空間フィルタのカーネルを変更することで様々な画像処理を行うことができます。空間フィルタの計算方法については、空間フィルタ:ローパスフィルタのページで説明していますので、そちらをを参照してください。
このページではカーネルを変更し、エッジを検出するフィルタについて説明します。プレウィットフィルタによるエッジ検出について見ていきます。プレウィットというのはこのフィルタを考えた人の名前だと思いますがよく知りません。
プレウィットフィルタのカーネルは例えば以下のようなものがあります。
基本的にはハイパスフィルタの説明のときに使用したエクセルをそのまま使用することにして【フィルタ】シートだけ書き換えます。
【フィルタ】シートを下図のように書き換えます。
【編集中R】【編集中G】【編集中B】シートの内容はハイパスフィルタの説明のときと全く同じで構いません。
【編集後R】【編集後G】【編集後B】シートの内容もハイパスフィルタの説明のときと全く同じです。
このあたりの意味合いはハイパスフィルタの説明のページを参照してください。
各セルに入力されている式の詳細はサンプルファイルをダウンロードして確認してください。
【編集後C】シートには以下の数式が入力されていますから、RGBの値を元に24ビットフルカラーの数値が表示されます。0が入力されてるセルが多いです。プレウィットフィルタではエッジ意外は黒になります。0のセルが多いのはそのためです。
【編集後の画像を描く】マクロを実行します。
マクロを実行したときに「実行時エラー'1004':セルの書式が多すぎるため、書式を追加できません。」というエラーが出る場合があります。
今回このエラーが発生し、【編集後画像】シートを一旦削除してやり直してもうまくいきませんでした。仕方がないので今回は【編集前画像】シートを削除してからマクロを実行しなおしました。
そのため今回のサンプルファイルには【編集前画像】のシートはありません。処理が複雑になってきてエクセルの画像処理はこのあたりが限界なのかもしれません。もっと小さな画像でやっていれば問題なかったのかもしれませんが。
編集後の画像は下図のようになりました。
編集前の画像が下図です。プレウィットフィルタで画像の輪郭が検出できました。
ラプラシアンフィルタと比較してプレウィットフィルタのエッジ抽出ではエッジの方向を選択できることが特徴です。これはカーネルが上下左右に対象になっていないためです。カーネルの左右を入れ替えると検出されるエッジも左右反転します。
カーネルを左右入れ替えるとは以下のようにすることです。
このカーネルで処理すると下図の結果が得られました。三つ上の画像と比較してみてください。花びらのエッジが分かりやすいと思いますが、検出されるエッジが左右逆になっています。
|