[scikit-image] 91. 各種エッジフィルタの回転不変性の比較

matplotlib

はじめに

このページでは、scikit-imageライブラリのエッジ検出フィルタ(sobel、prewitt、farid、scharr)の回転不変性を比較しています。比較結果によると、回転不変性の高さは farid > scharr > sobel > prewitt の順となっています。以下では、各フィルタを適用した画像の比較結果を示しています。

解説

モジュールのインポートなど

バージョン

画像データの作成

skimageのdisk関数を使用して円を作成できます。本実験では、中心座標(128,128)・半径100の円を作成してその部分を1とし、同じ中心で半径98の円を作成してその部分を0とすることで、円弧の画像を生成しました。

この作成した画像は以下のように表示されます。

エッジフィルタの適用

画像中の各画素に各種フィルタを適用すると、画像の勾配を求めることができます。この勾配が急激に変化する箇所がエッジとして検出されます。各フィルタの特性は以下の通りです。

Prewittフィルタ

Sobelフィルタ

Scharrフィルタ

Faridフィルタ

Image derivative - Wikipedia

フィルタを適用した画像の表示

Prewittフィルタを適用した画像

Sobelフィルタを適用した画像

scharrフィルタを適用した画像

faridフィルタを適用した画像

まとめて表示

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

まとめ

scikit-imageライブラリが提供する各種エッジ検出フィルタには、それぞれ特性があります。本記事で比較した回転不変性については、以下の順で優れていることが分かりました:

  1. farid:最も回転不変性が高い
  2. scharr:2番目に回転不変性が高い
  3. sobel:3番目に回転不変性が高い
  4. prewitt:最も回転不変性が低い

画像処理のタスクにおいては、対象となる画像の特性や求められる処理精度に応じて、適切なエッジ検出フィルタを選択することが重要です。回転不変性が重要な場合は、faridやscharrフィルタの使用を検討すべきでしょう。

参考

skimage.filters — skimage 0.26.0rc0.dev0 documentation
skimage.filters — skimage 0.26.0rc0.dev0 documentation
skimage.filters — skimage 0.26.0rc0.dev0 documentation
skimage.filters — skimage 0.26.0rc0.dev0 documentation

コメント