簡體   English   中英

OpenCV中的逆FFT與Matlab提供不同的結果

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

使用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相同的結果?

您正在使用兩個不同的功能。 FFT是DFT的優化版本。 您應該在matlab中使用step函數,然后比較結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM