octave で画像処理 - bilinear 法 †bilinear 法 †画像の拡大法には bilinear 法というものもあります. 簡単に言ってしまえば「線形補間」です. 画像を2倍に拡大する場合の重み付け係数は
になります. 実行してみる †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 ); nearest neighbor 法よりも画面のざわつきが少ないように見えますね. 空間周波数スペクトル †空間周波数領域でスペクトルを見てみましょう. octave:15> y = fft2(x2_bl); octave:17> imshow ( abs(swap2(y))/100); 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)))); フィルタの「キレ」は nearest neighbor よりも良くなってますね. |