[scikit-image] 88. threshold_sauvola, opening, label, regionpropsなどを駆使してサボテンの種の数を調査

matplotlib

はじめに

scikit-imageを活用してサボテンの種子をカウントする手法を解説。threshold_sauvola、モルフォロジー演算、ラベリング、regionpropsなどの画像処理技術を組み合わせて、植物学研究や種子分析に役立つ自動計測方法を紹介します。

コード

解説

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

バージョン

画像の読み込み

獅子王丸の実から種を採取しました。6個の実から取り出した種子をティッシュペーパー上に広げた画像を分析に使用します。

画像の2値化

画像をバイナリ化するためにskimage.filtersのthreshold_sauvolaを使用します。threshold_sauvolaの詳細については下記記事で説明しています。

[scikit-image] 52. 適応的しきい値処理による画像のバイナリ変換:threshold_niblackとthreshold_sauvola
scikit-imageライブラリのthreshold_niblackとthreshold_sauvolaを使った適応的しきい値処理について学び、照明条件が不均一な画像や複雑な背景を持つ画像の二値化処理を実装する方法を解説します。

結果を示すと以下のようになります。

Openingによるゴミの除去

Openingの処理で二値化画像から小さなノイズを除去します。結果は以下のようになります。

ラベル画像の生成

skimage.measureのlabel関数を使用してラベル画像を生成します。このラベル画像では、背景部分は0の値となります。そのまま画像表示すると見づらいため、背景部分をNaN値に変換して表示を改善します。

図示すると以下のようになります。

種それぞれの面積を調べる

面積が100ピクセル以下のものはノイズと考えられるため、100ピクセルを超える物体のみをカウントした結果、253個のサボテンの種が確認された。

centroidによってそれぞれの種の重心座標が得られるので、各種に番号を振った画像を作成すると以下のようになる。

画像を見ると、いくつかの種が互いにくっついていることがわかります。このため、watershedアルゴリズムを使用することで、より正確な種の数をカウントできると考えられます。なお、watershedセグメンテーション手法については下記記事で詳しく解説しています。

[scikit-image] 56. Watershedセグメンテーション(skimage.morphology watershed)
scikit-imageのwatershedアルゴリズムを使用した画像セグメンテーション技術について解説。重なり合った円を個別に識別する方法を具体例とともに紹介し、画像処理における物体分離手法を学ぶ。
コードをダウンロード(.pyファイル)

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

まとめ

本記事では、scikit-imageライブラリを使ってサボテンの種の数を自動計測する方法を解説しました。threshold_sauvolaによる適応的二値化、openingによるノイズ除去、labelによる連結成分のラベリング、そしてregionpropsによる特徴抽出という一連の処理を通じて、画像内のサボテンの種を高精度でカウントすることができます。この手法は植物学研究や農業分野での種子分析に応用可能であると思います。

参考

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

コメント