octave で画像処理 - ギブズの現象 †タイトルでネタバレしてるような気もしますが,気にしないでいきます. しましま †先日の「空間周波数領域での画像拡大」法で拡大した画像の端をよく見ると,変なしましまが現れています. こいつは困りますね. 市松模様 †というわけで,今回はこんな画像を拡大してみます. 2x2 マスの白黒の市松模様です. やってみる †octave:1> x(:,:,1) = [ ones(128) zeros(128); zeros(128) ones(128) ]; # RGB各プレーンに市松模様を代入 octave:2> x(:,:,2) = [ ones(128) zeros(128); zeros(128) ones(128) ]; octave:3> x(:,:,3) = [ ones(128) zeros(128); zeros(128) ones(128) ]; octave:4> y = fft2(x); # 2次元FFT octave:5> y2 = magnify_f(y,2); # 空間周波数領域で画像拡大 octave:6> x2 = ifft2 ( y2 ); # 2次元逆FFT octave:7> imshow ( real(x2)*4); # 拡大画像の表示 こんな風になりました. 碍子画像と同様,画像 4 辺の端にしましまが現れています. が,同様のしましまが白黒の境目近辺にも現れています. 実はこれ,ギブズの現象と考えられます. ギブズの現象は,時間領域で変化が急峻なところ(方形波の立ち上がりなど)で起こる現象です. 変化が急峻な部分を有限の周波数成分で近似しようとしてもなかなか収束しない,つまり,変化が急峻な部分は高い周波数成分を多く含んでいる,とも言えます. この画像については,空間周波数領域で高い空間周波数成分(中身は all 0)を追加したたことで,結果的には「有限の周波数成分で近似を打ち切った」のと同じ状態になったしまったために現象が起きたわけです. なぜ画像の端で? †画像中央のしましまはギブズの現象で説明がつきました. が,なぜ画像の端でも同様の現象が生じているのでしょうか? というあたりを次回書く予定. |