简体   繁体   English

OpenCV中的逆FFT与Matlab提供不同的结果

[英]Inverse FFT in OpenCV gives different result than Matlab

Using OpenCV, I want to get the same result of Matlab's ifft2 function. 使用OpenCV,我想获得与Matlab的ifft2函数相同的结果。 In Matlab I get: 在Matlab中,我得到:

A = [1 2 0; 4 5 0; 7 8 9; 10 11 12];
inverse = ifft2(A);

inverse =

   5.7500 + 0.0000i  -0.1250 + 0.3608i  -0.1250 - 0.3608i
  -1.7500 - 2.0000i  -0.3080 + 0.4665i   0.5580 + 0.0335i
  -1.2500 + 0.0000i  -0.1250 - 0.2165i  -0.1250 + 0.2165i
  -1.7500 + 2.0000i   0.5580 - 0.0335i  -0.3080 - 0.4665i

In OpenCV, when I do: 在OpenCV中,当我这样做时:

cv::Mat paddedA;
int m = cv::getOptimalDFTSize(A.rows);
int n = cv::getOptimalDFTSize(A.cols);

cv::copyMakeBorder(A, paddedA, 0, m - A.rows, 0, n - A.cols, cv::BORDER_CONSTANT, cv::Scalar::all(0));
cv::Mat planes[] = { cv::Mat_<float>(paddedA), cv::Mat::zeros(paddedA.size(), CV_32F) };
cv::Mat complexA;
cv::merge(planes, 2, complexA);

cv::Mat inverse;
cv::idft(complexA, inverse, cv::DFT_SCALE | cv::DFT_COMPLEX_OUTPUT);

This gives me: 这给了我:

inverse = [1, -0, 2, -0, 0, -0;
     4, -0, 5, -0, 0, -0;
     7, -0, 8, -8, 9, 0;
     10, -0, 11, -0, 12, -0]

And the type of A is CV_32F . A的类型为CV_32F How can I get the same result as that of Matlab? 如何获得与Matlab相同的结果?

You are using two different functions. 您正在使用两个不同的功能。 FFT is optimized version of DFT. FFT是DFT的优化版本。 You should use step function in matlab then compare the results. 您应该在matlab中使用step函数,然后比较结果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM