如何计算opencv中复数的绝对值

时间:2012-05-03 09:42:54

标签: opencv matrix

任何人都可以帮助我获得如何获得复杂矩阵的绝对值。矩阵包含一个通道中的实际值和另一个通道中的虚数值。请帮助我 如果可能意味着给我一些例子。

提前致谢 Arangarajan

2 个答案:

答案 0 :(得分:3)

假设您有两个组件:X和Y,两个相同大小和类型的矩阵。在你的情况下,它可以是真实的/即时值。

// n rows, m cols, type float; we assume the following matrices are filled 
cv::Mat X(n,m,CV_32F); 
cv::Mat Y(n,m,CV_32F);

您可以计算每个复数的绝对值,如下所示:

// create a new matrix for storage
cv::Mat A(n,m,CV_32F,cv::Scalar(0.0));
for(int i=0;i<n;i++){
  // pointer to row(i) values
  const float* rowi_x = X.ptr<float>(i);
  const float* rowi_y = Y.ptr<float>(i); 
  float* rowi_a = A.ptr<float>(i); 
  for(int j=0;j<=m;j++){ 
     rowi_a[j] = sqrt(rowi_x[j]*rowi_x[j]+rowi_y[j]*rowi_y[j]);
  }
}

答案 1 :(得分:1)

如果查看OpenCV phasecorr.cpp模块,有一个名为magSpectrums的函数已经执行此操作,并将处理共轭对称打包的DFT结果。我不认为它是由头文件暴露的,但它很容易复制它。如果您关心速度,请确保使用任何可用的SIMD选项进行编译,因为它们可以对此计算产生重大影响。