octave で画像処理 - bilinear 法

bilinear 法

画像の拡大法には bilinear 法というものもあります. 簡単に言ってしまえば「線形補間」です.

画像を2倍に拡大する場合の重み付け係数は

1/41/21/4
1/211/2
1/41/21/4

になります.

実行してみる

octave 上で実際に bilinear 補間を実行してみましょう.

octave:1> [ x m a ] = imread ( 'gaishi.jpg' );
octave:2> x = double ( x )/255;
octave:3> h = [ 0.25 0.5 0.25; 0.5 1 0.5; 0.25 0.5 0.25 ]; # 重み付け係数行列
octave:4> x2 = magnify ( x, 2 );                           # 黒画素水増しで 2 倍に拡大
octave:5> x2_bl(:,:,1) = conv2 ( x2(:,:,1), h );           # RGB各プレーンでフィルタリング
octave:6> x2_bl(:,:,2) = conv2 ( x2(:,:,2), h );
octave:7> x2_bl(:,:,3) = conv2 ( x2(:,:,3), h );
octave:8> imshow ( x2_bl );
gaishi2_bl.jpg

nearest neighbor 法よりも画面のざわつきが少ないように見えますね.

空間周波数スペクトル

空間周波数領域でスペクトルを見てみましょう.

octave:15> y = fft2(x2_bl);
octave:17> imshow ( abs(swap2(y))/100);
gaishi2_bl_f.jpg

nearest neighbor 法に比べてエイリアジングが抑えられています.

bilinear フィルタ特性

bilinear 法のフィルタ特性を見てみましょう.

octave:19> hh = zeros ( 512 );
octave:20> hh ( 1:3, 1:3 ) = h;
octave:21> yy = fft2 ( hh );
octave:23> imshow ( abs(swap2(yy))/max(max(abs(yy))));
freq_resp_bl.jpg

フィルタの「キレ」は nearest neighbor よりも良くなってますね.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-04-13 (火) 12:42:59 (3740d)