我正在尝试使用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]
我需要了解这两个矩阵之间的关系,如果有的话。
期待您的建议。
提前致谢。