[SciPy] 24. ガウス微分フィルタによるエッジ検出(ndimage.gaussian_gradient_magnitude)

matplotlib

はじめに

このページでは、SciPyのndimageモジュールにあるgaussian_gradient_magnitude関数を使って画像のエッジを検出する方法について解説します。ガウス微分フィルタを適用することで、画像内の輝度変化の大きい領域(エッジ)を強調し、物体の境界を検出することができます。

コード&解説

モジュールのインポート

バージョン

画像の読み込み

下記サイトから画像を取得し、plt.imread()関数で読み込みます。

たい焼き器のイラスト(養殖)
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

グレースケール変換

skimage.colorモジュールのrgb2gray関数を使用して、RGB画像をグレースケール画像に変換できます。

このグレースケール変換画像をcmap=”bone”パラメータで表示すると、以下のような結果になります。

ガウス微分フィルタ

sigma=3でガウス微分フィルタを適用した結果は以下のようになります。

手動でガウス微分フィルタ

x方向にガウス微分フィルタを適用した結果は、ndi.gaussian_filter(img_g, (sigma,sigma), (0,1))で得られます。y方向の結果はorderを(1,0)とした場合に得られます。エッジの強度画像は、これら各成分の2乗値の平方根として計算されます。

ガウス微分フィルタのsigmaを変えた場合

ガウス微分フィルタのsigmaを変えた時の変化は以下のようになります。

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

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

まとめ

SciPyのndimageモジュールに含まれるgaussian_gradient_magnitude関数は、画像処理においてエッジ検出を行うための強力なツールです。この関数は以下の特徴を持ちます:

  • ガウス微分フィルタを適用して画像の輝度変化の大きい部分を強調
  • 物体の境界を効果的に検出し、画像内の特徴を抽出
  • シグマパラメータの調整により、検出の感度を制御可能

エッジ検出は物体認識や画像セグメンテーションなど様々な画像処理タスクの基礎となる重要な技術です。gaussian_gradient_magnitude関数を活用することで、高度な画像解析を比較的簡単に実装することができます。

参考

gaussian_gradient_magnitude — SciPy v1.16.1 Manual
gaussian_filter — SciPy v1.16.1 Manual

コメント