* octave で画像処理 - bilinear 法 [#ed76b369]

** bilinear 法 [#lbf61f98]

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

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

|1/4|1/2|1/4|
|1/2|1|1/2|
|1/4|1/2|1/4|

になります.

** 実行してみる [#xe03196f]

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 );

#ref(gaishi2_bl.jpg,center)

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

** 空間周波数スペクトル [#eb97b946]

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

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

#ref(gaishi2_bl_f.jpg,center)

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

** bilinear フィルタ特性 [#tb07f127]

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))));

#ref(freq_resp_bl.jpg,center)

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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS