Tweet

octave で画像処理 - 2 次元 FFT の意味

前回は,いきなし 2 次元 FFT なんぞかましてしまったので,今回は 2 次元 FFT の意味と題して「空間周波数領域が何を表しているか」というあたりを見てみます.

空間周波数領域のある1点のみに値を設定し,他を0とすることで,値を設定した点が何を意味するかを見ます.

impulse_freq.png

とりあえず行列を作ります.

octave:1> y = zeros(256);          # 256x256 の零行列を作成
octave:2> y ( 3+1,4+1 ) = 1000;    # 値を設定

行列の場合,y ( row, column ) という表記なので,引数の縦方向を先に指定したり,添字が1から始まったりと,普通のプログラミングと勝手が違うので注意しましょう.

この行列の値を画像として表示します.

octave:3> imshow ( y );
impulse_freq_mat.png

逆 FFT にかけます.

octave:5> x = ifft2 ( y );

画像として表示してみます.

octave:8> imshow ( real(x)*50 );

実は,エイリアジング領域の値の設定をサボっているので,空間領域でも複素数の値になってしまってます. real() で実数部だけ抜き出しているのはそのためです.

impulse_space.png

グラデーションのかかったシマシマ模様が現れました. 波の立っている水面のようになっているわけです.

波の数を数えてみましょう. 横方向には4,縦方向には3,ですね. この値…空間周波数領域で最初に値を設定した点の座標ですね.

空間周波数領域の他の象限については下図のようになります.

space_frequency_quadrant.png

2 次元 FFT で得られた空間周波数領域での各点の値は,元の画像をこのような波の足し算と捉え,各要素に分解して表していることになります.


添付ファイル: filespace_frequency_quadrant.png 777件 [詳細] fileimpulse_space.png 536件 [詳細] fileimpulse_freq_mat.png 500件 [詳細] fileimpulse_freq.png 761件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-04-05 (月) 17:14:36 (3582d)