0

我正在尝试使用 OpenCV 和 FFTW3.3 库在 C++ 中实现 MATLAB fft2() 和 ifft2() 函数。我已经能够成功移植代码,它可以正确执行正向和逆变换。但是,MATLAB R2009a fft2() 函数生成的 dft 矩阵的复数值与其对应的 FFTW 有很大不同。我需要解决这个问题以获得我的应用程序的最佳性能。我在下面提供我的 C++ 实现和示例输入/输出:

例如,使用以下代码调用上述 fft2() 函数:

cv::Mat im(2,2,CV_64FC2);

im.at<cv::Vec2d>(0,0)[0] = 1;
im.at<cv::Vec2d>(0,0)[0] = 0;
im.at<cv::Vec2d>(0,1)[1] = 1;
im.at<cv::Vec2d>(0,1)[1] = 0;
im.at<cv::Vec2d>(1,0)[0] = 1;
im.at<cv::Vec2d>(1,0)[1] = 0;
im.at<cv::Vec2d>(1,1)[0] = 1;
im.at<cv::Vec2d>(1,1)[1] = 0;
    int rows = im.rows;
int cols = im.cols;
cv::Mat imagefft(rows,cols,CV_64FC2);
imagefft = fft2(im);

对于 x = [ 1+1i 1+1i; 1+1i 1+1i] fft2(x) 提供

[4.0000 + 4.0000i 0; 0 0 ] 其中 fftw 实现提供,

[-6.27744e+066-6.27744e+066i 6.27744e+066-6.27744e+066i ; -6.27744e+066-6.27744e+066i 6.27744e+066-6.27744e+066i]

我需要了解这两个矩阵之间的关系(如果有的话)。

期待您的建议。

提前致谢。

4

0 回答 0