Categories: OpenCV画像処理

Prewitt(プレヴィット)フィルタで画像のエッジを抽出する

本日はPrewitt(プレヴィット)フィルタという画像のディジタルフィルタを紹介し、Prewittフィルタの効果であるエッジの抽出を行うプログラムを紹介してみたいと思います。

Prewittフィルタ

Prewittフィルタは、一次微分を利用して画像から輪郭を抽出するフィルタです。

一次微分というと複雑に感じますが、以下のような係数で与えられるディジタルフィルタです。例のように、水平方向の画素に大きく差がある場合に値が大きくなるため、エッジを抽出することができます。

垂直方向のエッジを抽出したい場合には、上記のフィルタを90度回転させた以下のフィルタ係数となります。

水平・垂直方向問わずにエッジを抽出したい場合においては、両方のフィルタを掛けた結果を足し合わせるなど、合成することでエッジの抽出が可能です。

画像へのPrewittフィルタ適用によるエッジ抽出プログラム(Python+OpenCV)

画像にPrewittフィルタを適用するプログラムを以下で紹介します。

以下の3パターンを試せるプログラムとしました。

  1. 水平方向Prewittフィルタ
  2. 垂直方向Prewittフィルタ
  3. 水平・垂直合成Prewittフィルタ

ソースコード

動作環境:OpenCV 4.5.5

ソースコードの解説

以下の箇所で水平方向Sobelフィルタの処理を記述しています。

また、以下の箇所で垂直方向Sobelフィルタの処理を記述しています。

最後に、以下の箇所で水平・垂直合成Sobelフィルタの処理を記述しています。

プログラムの動作結果

入力データとしては、以下の2枚の画像を用いました。結果を見る限りでは、エッジが正しく抽出できているように見えます。

水平方向Prewittフィルタ

垂直方向Prewittフィルタ

水平・垂直合成Prewittフィルタ

まとめ

本日はPrewittフィルタを用いたエッジ抽出を紹介しました。以前にラプラシアンフィルタを用いたエッジ抽出についても紹介しているので、以下の記事も参考にしてみてください。

本日はラプラシアンフィルタという画像のディジタルフィルタを紹介し、ラプラシアンフィルタの効果であるエッジの抽出を行うプログラムを紹介してみ...

Haruoka

Recent Posts

PyTorchのTensor配列の結合方法(catとstack)

本記事では、PyTorchの配…

1か月 ago

Excelで作成した表を簡単にLaTeXのテーブルにする方法

論文を書く際に、Excelなど…

2か月 ago

LaTeXでハイフネーションを調節する方法

ハイフネーションとは、英語の長…

2か月 ago