[scikit-image] 59. グレースケール画像の中から白い塊(ブロブ)を検出する(skimage.feature blob_dog, blob_log, blob_doh)

python

はじめに

scikit-imageライブラリを使用して、グレースケール画像から白い塊(ブロブ)を検出する方法を解説します。画像処理において、ブロブ検出は物体認識やカウントなどの重要なタスクです。本記事では、blob_dog(Difference of Gaussian)、blob_log(Laplacian of Gaussian)、blob_doh(Determinant of Hessian)の3つの異なるアルゴリズムを用いた検出方法について説明します。

コード

解説

ブロブ検出に用いるアルゴリズム

Laplacian of Gaussian (LoG)

LoGフィルタは、まずガウシアンフィルタで画像を平滑化し、その後ラプラシアンフィルタを適用してエッジを検出する手法です。詳細についてはこのサイトに詳しい説明があります。

Difference of Gaussian (DoG)

DoGフィルタは、σ値の異なる2つのGaussianフィルタの差分を利用してエッジを検出するフィルタです。詳細についてはこのサイトに詳しく説明されています。

Determinant of Hessian (DoH)

DoHフィルタは、ヘッセ行列式を用いた検出手法です。その詳細については下記で詳しく説明しています。

https://www.jstage.jst.go.jp/article/jjspe/77/12/77_1109/_pdf

モジュールのインポート

画像の読み込み

画像は袋にはいったサボテンの種を使用しました。

rgb2grayでグレースケール化したあとにinvertで白黒を反転しました。

LoGによるblob検出

blob_logを使用してLoG(ラプラシアン・オブ・ガウシアン)による検出を行います。返り値は、blobのy座標、x座標、そしてblob検出に使用したガウスカーネルの標準偏差です。blobの大きさは標準偏差×√2の範囲内に収まるため、標準偏差を半径に変換しています。

DoGによるblob検出

blob_dogを使用してDoG(Difference of Gaussian)による検出を行います。これはLoG(Laplacian of Gaussian)と同様に、標準偏差の値を半径に変換して利用します。

DoHによるblob検出

blob_doh関数を使用してDeterminant of Hessian(DoH)によるブロブ検出を実行します。検出されたブロブの半径はsigmaパラメータによって決まります。

検出結果の表示

左から順にLoG、DoG、DoHによるblob検出結果となります。

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

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

まとめ

本記事では、scikit-imageライブラリを用いたグレースケール画像からのブロブ検出について解説しました。blob_dog、blob_log、blob_dohという3つの異なるアルゴリズムを紹介し、それぞれの特性と適用例を示しました。これらの手法は、画像内の特徴的な領域を自動的に検出するのに役立ち、医療画像解析、顕微鏡画像の細胞カウント、天体写真の星検出など、様々な分野で応用可能です。アルゴリズムの選択とパラメータの調整が検出精度に大きく影響するため、用途に応じた適切な設定が重要です。

参考

Blob Detection — skimage 0.25.2 documentation
skimage.feature — skimage 0.25.2 documentation
skimage.feature — skimage 0.25.2 documentation
skimage.feature — skimage 0.25.2 documentation

コメント