2

任何人都可以帮助我了解如何获得复杂矩阵的绝对值。矩阵在一个通道中包含实值,在另一个通道中包含虚值。如果可能的话,请帮助我给我一些例子。

在此先感谢阿兰加拉扬

4

2 回答 2

4

假设您有 2 个分量: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]);
  }
}
于 2012-05-03T10:24:31.907 回答
1

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

于 2016-08-23T00:41:04.140 回答