本日はPrewitt(プレヴィット)フィルタという画像のディジタルフィルタを紹介し、Prewittフィルタの効果であるエッジの抽出を行うプログラムを紹介してみたいと思います。
目次
Prewittフィルタ
Prewittフィルタは、一次微分を利用して画像から輪郭を抽出するフィルタです。
一次微分というと複雑に感じますが、以下のような係数で与えられるディジタルフィルタです。例のように、水平方向の画素に大きく差がある場合に値が大きくなるため、エッジを抽出することができます。
垂直方向のエッジを抽出したい場合には、上記のフィルタを90度回転させた以下のフィルタ係数となります。
水平・垂直方向問わずにエッジを抽出したい場合においては、両方のフィルタを掛けた結果を足し合わせるなど、合成することでエッジの抽出が可能です。
画像へのPrewittフィルタ適用によるエッジ抽出プログラム(Python+OpenCV)
画像にPrewittフィルタを適用するプログラムを以下で紹介します。
以下の3パターンを試せるプログラムとしました。
- 水平方向Prewittフィルタ
- 垂直方向Prewittフィルタ
- 水平・垂直合成Prewittフィルタ
ソースコード
動作環境:OpenCV 4.5.5
ソースコードの解説
以下の箇所で水平方向Sobelフィルタの処理を記述しています。
また、以下の箇所で垂直方向Sobelフィルタの処理を記述しています。
最後に、以下の箇所で水平・垂直合成Sobelフィルタの処理を記述しています。
プログラムの動作結果
入力データとしては、以下の2枚の画像を用いました。結果を見る限りでは、エッジが正しく抽出できているように見えます。
水平方向Prewittフィルタ
垂直方向Prewittフィルタ
水平・垂直合成Prewittフィルタ
まとめ
本日はPrewittフィルタを用いたエッジ抽出を紹介しました。以前にラプラシアンフィルタを用いたエッジ抽出についても紹介しているので、以下の記事も参考にしてみてください。