3

给定一个图像,我在它上面应用 fft,然后是逆 fft。

我期望得到与原始图像相同的结果,但我得到的却是巨大的数字。

我正在使用以下简单代码:

    fid=fopen("C:\\res3\\padded2.txt","w+");
    for (int i=0;i<padded2.rows;i++){
        for (int j=0;j<padded.cols;j++){
            fprintf(fid,"%f ", padded2.at<float>(i,j));
        }
        fprintf(fid,"\n");
    }
    fclose(fid);


    Mat fftimg;
    dft(padded2, fftimg);            

    Mat ifftimg;
    dft(fftimg,ifftimg,cv::DFT_INVERSE);

    fid=fopen("C:\\res3\\inversefftimage.txt","w+");
    for (int i=0;i<ifftimg.rows;i++){
        for (int j=0;j<ifftimg.cols;j++){
            fprintf(fid,"%f ",ifftimg.at<float>(i,j));
        }
        fprintf(fid,"\n");
    }

    fclose(fid);

如您所见,我在 fft+ifft 之前和之后将图像打印到文件中。当我检查文件时,我看到 fft+ifft 之后的数字非常不同。fft+ifft 之后的数字要大得多(大约 30,000,而不是大约 4-5)。

有人可以解释一下这种行为吗?我应该改变什么以获得相同的结果?

我正在使用 VS 2012 和 Windows 8 开发 OpenCV 2.4.5。

提前致谢!

吉尔。

4

1 回答 1

1

看看这个答案。它可能与您的输出数据类型有关。默认输出类型是复数。

于 2013-11-13T16:24:53.863 回答