このページでは空間フィルタという画像処理の手法を説明します。
カーネルという行列と重み係数を準備します。下図は説明しやすくするためにa,b,c,・・・、重みwというようにアルファベットで記載しましたが、実際にはa,b,c・・・とwは数字です。
編集前の画像が下図だとします。
編集後の画像のB2セルの計算式は、
( A1*a + B1*b + C1*c + A2*d + B2*e + C2*f + A3*g + B3*h + C3*i ) / w
です。
a,b,c・・・に具体的に数字を入れて説明します。
編集後の画像のB2セルの計算式は、
( 123*1 + 123*2 + 122*1 + 124*2 + 124*4 + 124*2 + 124*1 + 125*2 + 125*1 ) / 16
です。
これを計算すると123.875となりますが、画像のピクセル値は整数ですから小数点以下を切り捨てて123です。
小数点以下を切り捨てるにはExcelのINT関数を使用します。
Excelの画面で見ていきます。【フィルタ】というシートを作り、下図のようにB2からD5にカーネルの行列を入力し、F3に重みを入力します。
【編集後R】シートのB2セルに以下の式を入力します。【フィルタ】シートのセルを式に書き込む場合はアルファベットを$$マークで囲って絶対参照にしています。
B2からKM199の範囲には同じ式が入っています。図示できないのでサンプルファイルをダウンロードして確認してみてください。
ただし上下左右の1行1列には数式は入れず、255を入力しています。RGBが全て255の場合は白になりますから、編集後の画像の上下左右の1行1列は白になります。
【編集後G】シートも同様です。
【編集後B】シートも同様です。
【編集後C】シートには以下の数式が入力されていますから、RGBの値を元に24ビットフルカラーの数値が表示されます。
【編集後の画像を描く】マクロを実行します。マクロを実行したときに「実行時エラー'1004':セルの書式が多すぎるため、書式を追加できません。」というエラーが出る場合があります。その場合は【編集後画像】シートを一旦削除してファイルを保存して閉じて、開きなおして【編集後画像】シートを作り直してから、再度マクロを実行してみてください。
また、【編集後画像】シートを表示した状態でマクロを実行すると、PCの負荷が大きく途中で止まってしまうことがありますので別のシートを表示した状態で実行してください。
編集後の画像は下図のようになりました。
編集前の画像が下図です。上図と下図を比較すると、編集後の画像の方がぼけているように見えます。
このページの説明では以下のフィルタを使用したわけですが、このフィルタはローパスフィルタというフィルタの一種で、画像の高周波数をカットし低周波数を通過させるフィルタです。
と聞くと多くの方はわけわからないと思いますが、要は画像をぼかすことができるフィルタです。
画像をぼかすではAVERAGE関数を使用して画像をぼかしました。AVERAGE関数を今回の空間フィルタに置き換えると下図になります。下図のフィルタは周囲9点の平均値を返すことが分かるでしょう。
AVERAGE関数は空間フィルタに書き換えることができるというわけです。
今回は画像を空間フィルタを使用して画像をぼかすことができました。空間フィルタは画像をぼかすだけでなく、カーネルを変更することで様々な画像処理に使用できますので、今後しばらくは空間フィルタの説明を続けます。
|