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 の後の数値ははるかに大きくなります (約 4 ~ 5 ではなく約 30,000)。

誰かが私にこの振る舞いを説明してもらえますか? 同じ結果を得るには何を変更すればよいですか?

私はVS 2012とWindows 8でOpenCV 2.4.5に取り組んでいます。

前もって感謝します!

ギル。

4

1 に答える 1