空間フィルタのカーネルを変更することで様々な画像処理を行うことができます。空間フィルタの計算方法については、空間フィルタ:ローパスフィルタのページで説明していますので、そちらをを参照してください。
このページではカーネルを変更し、ハイパスフィルタについて説明します。
ハイパスフィルタのカーネルは例えば以下のようなものがあります。
Excelの画面で見ていきます。【フィルタ】というシートを作り、下図のようにB2からD5にカーネルの行列を入力し、F3に重みを入力します。
【編集中R】シートを作成し、B2セルに以下の式を入力します。わざわざ【計算中R】というシートを作ったのは以下のような理由からです。下図の式の計算結果は0未満になることがありますし、255を超えることもあります。
そのような計算結果になった場合、画像の色としては不適切ですから、0未満の場合は0に、255を超える場合は255にしてやる必要があります。
IF関数を使うことになるのですが、下図の式にIF関数を書き込むと式が非常に長くなってしまい読み解くことが難しくなりますから、一旦【編集中R】というシートを作ってこのシートには計算途中を入力することにします。
このシートの計算結果は0未満でもよいですし255を超えても構いません。
【編集後R】シートには以下の式を書き込みます。この式は【編集中R】が0未満の場合は0に、255を超える場合は255にするための式です。
【編集後G】【編集後B】についても同様にします。説明がくどくなるのでG、Bについては図示しません。サンプルファイルをダウンロードして確認してください。
【編集後C】シートには以下の数式が入力されていますから、RGBの値を元に24ビットフルカラーの数値が表示されます。0が入力されてるセルが散見されます。
これらのセルはフィルタ計算の段階では0未満になっていたのだと思います。マイナスの数字を色に変換するとノイズのように表示されると思います。マイナスはまずいのでIF関数で0に変換した結果です。
【編集後の画像を描く】マクロを実行します。
マクロを実行したときに「実行時エラー'1004':セルの書式が多すぎるため、書式を追加できません。」というエラーが出る場合があります。
今回このエラーが発生し、【編集後画像】シートを一旦削除してやり直してもうまくいきませんでした。仕方がないので今回は【編集前画像】シートを削除してからマクロを実行しなおしました。
そのため今回のサンプルファイルには【編集前画像】のシートはありません。処理が複雑になってきてエクセルの画像処理はこのあたりが限界なのかもしれません。もっと小さな画像でやっていれば問題なかったのかもしれませんが。
編集後の画像は下図のようになりました。
編集前の画像が下図です。上図と下図を比較すると、編集後の画像の方がぼけが取れてシャープになっています。あまり綺麗な出来ではないと思います。カーネルを工夫することでもっと良い結果が得られると思います。
前のページでローパスフィルタは画像の高周波数部分をカットするフィルタだと説明しました。ハイパスフィルタは逆に画像の低周波数部分(ぼけている部分)をカットするフィルタです。
あまり良い結果は得られませんでしたが、ローパスフィルタ、ハイパスフィルタともに画像処理の教科書的な書籍には記載されていますのでここでも紹介させていただきました。
|