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

python

はじめに

blob_dog, blob_log, blob_dohなどを用いて、グレースケール画像の中から白い塊(ブロブ)を検出する方法について説明する。

コード

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

解説

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

Laplacian of Gaussian (LoG)

LoGフィルタとは、ガウシアンフィルタで平滑化した画像に対して、ラプラシアンフィルタを適用することでエッジを検出するフィルタとなっている。詳細はこのサイトが詳しい。

Difference of Gaussian (DoG)

DoGフィルタはσの異なる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座標、blobのx座標、blob を検出したガウスカーネルの標準偏差となる。
blobの大きさは標準偏差×√2の範囲に収まるので、標準偏差を半径に置き換えている。

DoGによるblob検出

blob_dogでDoGによる検出を行う。LoGと同様に標準偏差を半径に置き換える。

DoHによるblob検出

blob_dohによりDoHによるblob検出を行う。blob_dohで検出されるblobの半径はsigmaとなる。

検出結果の表示

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

参考

Blob Detection — skimage v0.16.1 docs
Module: feature — skimage v0.16.1 docs
Module: feature — skimage v0.16.1 docs
Module: feature — skimage v0.16.1 docs

コメント