前回画像をフーリエ変換しましたが,周波数のデータに変換したときにどういう周波数成分がどのぐらい存在するのかという事を視覚的に分かるようにパワースペクトルを画像として出力したいと思います.幸い変換前のRGB情報の数と変換後の周波数情報の数は同じなので同じImage構造体に放りこむ事ができます.パワースペクトルは
で求めることができますが,各ピクセルの値は0から255までの値しか取れませんが,これでは殆ど255より大きくなってしまいますので定数で割っています.
RgbFrequencyTrans(img, re, im, DFT); for(i=0; i<img->height*img->width; i++){ temp = re[i]*re[i] + im[i]*im[i]; temp /= 255*255*255; if(temp>255) temp = 255; img->data[i].r = img->data[i].g = img->data[i].b = temp; }
今回値がマイナスになることはありませんが,定数で割っても値が255を越えるものも出てきますので越えたものは255に丸めています.
以上でパワースペクトル画像を出力する事ができますが,周波数成分の強さが視覚的に分かれば良いので定数の値は適宜変更したり,別の方法をとっても問題ありません.ただし,正規化しようとすると一部で極端に大きな値が出たときに他の値が見えなくなるので工夫する必要があると思います.