4

現在、 fftw_plan_dft_2d を介して画像の fft を計算しようとしています

この関数を使用するには、画像データを in 配列に線形化し、上記の関数を呼び出します (詳細は以下を参照)。

ftw_plan fftw_plan_dft_2d(int n0, int n1,
                            fftw_complex *in, fftw_complex *out,
                            int sign, unsigned flags);

func は、元のイメージのピクセル数と同じサイズの複素数配列 out を変更します。

これが画像の 2D FFT を計算する適切な方法かどうか知っていますか? もしそうなら、アウト内のデータは何を表していますか? IE 配列内の高周波値と低周波値はどこにありますか?

ありがとう、djs22

4

2 に答える 2

6

2D FFT は、1 回のパスで画像の各行に 1D FFT を適用した後、最初のパスからの出力のすべての列に 1D FFT を適用することと同じです。

2D FFT の出力は 1D FFT の出力に似ていますが、1 次元ではなく、x、y 次元に複雑な大きさがある点が異なります。予想どおり、空間周波数は x および y インデックスと共に増加します。

実数から複素数への 2D FFT 出力データの構成をカバーする FFTW マニュアル ( here ) には、それを使用していると仮定したセクションがあります。

于 2011-03-16T18:19:35.867 に答える
0

です。2 つの計画を計算してみてください。

plan1 = fftw_plan_dft_2d(image->rows, image->cols, in, fft, FFTW_FORWARD, FFTW_ESTIMATE); 
plan2 = fftw_plan_dft_2d(image->rows, image->cols, fft, ifft, FFTW_BACKWARD, FFTW_ESTIMATE);

ifft で元のデータを取得します。

それが役に立てば幸い :)

于 2012-05-19T22:40:11.437 に答える