逆DFT - Matlab与OpenCv

时间:2015-02-10 20:16:22

标签: matlab opencv fft

我试图将一些Matlab代码转换为OpenCv,并且遇到逆FFT问题。 MATLAB和OpenCV中的代码给出了不同的结果。

在MATLAB中:

A = [ 1 2 3; 4 5 6;  7 8 9; 10 11 12]; %simplest matrix I can think of
mask = [0 1 0 0; 0 1 0 0; 0 1 0 0]';

F = fft(A,[],1);
F(~mask) = 0;
real(ifft(F,[],1))
ans =
-1.5000  -1.5000  -1.5000
-1.5000  -1.5000  -1.5000
1.5000   1.5000   1.5000
1.5000   1.5000   1.5000

的OpenCV:

Mat A = (Mat_<float>(4,3) <<  1,2,3,
                            4,5,6,
                            7,8,9,
                            10,11,12);

transpose(A,A); //transpositions to make DFT on columns like in MATLAB
Mat transformed;
dft(A,transformed,DFT_ROWS|DFT_COMPLEX_OUTPUT);  // Applying DFT
Mat mask = (Mat_<float>(4,3) << 0,0,0,
                            1,1,1,
                            0,0,0,
                            0,0,0);
transpose(transformed,transformed);
vector<Mat> transformed_splitted;
split(transformed, transformed_splitted);
transformed_splitted[0] = transformed_splitted[0].mul(mask);
transformed_splitted[1] = transformed_splitted[1].mul(mask);
merge(transformed_splitted,transformed);
transpose(transformed,transformed);
idft(transformed,transformed,DFT_ROWS|DFT_REAL_OUTPUT|DFT_SCALE);
transpose(transformed,transformed);
cout << transformed;

output:
[-3 -3 -3 ;
-3 -3 -3 ;
3 3 3 ;
3 3 3 ]

在我看来,缩放有问题。有趣的是,对于矩阵5x3,两个代码的结果是相同的。对于8x3,另外一些结果不同。如何从IFFT中获得相同的结果?

我在此编辑的帖子中也提到了这个问题:Matlab FFT vs OpenCv DFT

0 个答案:

没有答案