書くよって言っていたので、簡単に記しておきます。
2次元FFT
2次元になったからといって、1次元から大きく変わることはありません。
各列に対し1次元FFTかけた結果の各行を、もう一度FFTするだけです。
順番は逆でもいいはず。
1次元FFTを関数化しておけば、簡単に書けます。
パワースペクトル出力
コードで説明します。
fft_shift(&image_f); spectrum2image(&spectrum, &image_f, 'R', 100*255*255);
2次元FFTした結果は、直流成分が配列の左上にあります。
パワースペクトルを見やすくするために、まずfft_shiftを使って直流成分を配列の中心に移動させます。
ここで、image_fは周波数領域画像の構造体です。
fft_shiftは、配列の第1象限と第4象限、第2象限と第3象限をそれぞれ入れ替えています。
spectrum2imageは、パワースペクトルを画像に変換します。
spectrumは、画像の構造体です。
'R'でR-chのデータをグレースケール画像化するよう指定しています。
100*255*255は、一般的に2次元FFTした結果は絶対値が0-255の範囲に収まるとは限らないため、適当な定数で割るその値です。
画像によってパワースペクトルが見やすくなる値が変わるため、引数としました。
それでも255を超えたときは、255に丸めています。