【问题标题】:Inverse FFT in OpenCV gives different result than MatlabOpenCV中的逆FFT给出与Matlab不同的结果
【发布时间】:2015-09-26 07:47:29
【问题描述】:

使用 OpenCV,我想得到与 Matlab 的 ifft2 函数相同的结果。在 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

在 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);

这给了我:

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]

A 的类型是CV_32F。如何获得与 Matlab 相同的结果?

【问题讨论】:

  • 对于 OpenCV 版本,结果在inverse,而不是complexA
  • 那是我的错字。我已经更正了。
  • 这很奇怪。我试了代码inverse和Matlab版本一样。
  • 有趣。你使用完全相同的代码和输入吗??
  • 是的,除了这里缺少的A 的初始化代码。

标签: c++ matlab opencv fft


【解决方案1】:

您正在使用两种不同的功能。 FFT 是 DFT 的优化版本。你应该在matlab中使用step函数然后比较结果。

【讨论】:

    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 2012-01-30
    • 2022-01-07
    • 2015-08-02
    • 2017-11-10
    • 2017-09-28
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多