[scikit-image] 53. 画像のラベリング(skimage.measure labelなど)

python

はじめに

skimage.filtersのthreshold_otsu、morphologyのopening, closingなどによって、画像中の対象物をラベリングする方法について説明する。

コード

解説

モジュールのインポート

画像データの読み込み

昨年蒔いたアストロフィツム・ストロンギロゴナムの幼苗の画像を用いる。

大津の2値化

大津の2値化により単一のしきい値を求め、しきい値処理を行うことでバイナリ画像を生成する。

クロージングによる穴埋め

膨張処理後に収縮処理を行うクロージングによって、白い領域中の黒点を除去することができる。

オープニングによる小さい領域の除去

収縮処理後に膨張処理を行うオープニングによって、小さな白い領域を除去することができる。

画像の端に接している領域の除去

clear_borderにより画像の端に接している白い領域を除去する。

ラベリングし、ラベルごとに色を変えて表示

label(バイナリ画像)で連結している部分ごとにラベル付けを行う。label_imageはバイナリ画像と同じ形状で整数の配列となる。
label2rgbにより、ラベリングされた部分に色をつけることができる。

ラベリングした領域を四角で囲む

regionprops(label_image)によってラベリングした領域に関する多くの情報を得ることができる。region.area によってラベリングした領域の面積が得られる。ここでは、100ピクセル以上の面積をもつものに対して、region.bboxでラベル画像を囲む最小の四角の座標を取得し、緑線でRectangleを描いた。

regionpropsで得られる情報

areaで面積、labelでラベル番号、centroidで重心の値を得ることができる。その他については下記が詳しい。

skimage.measure — skimage 0.22.0 documentation

ラベリングした画像をそれぞれ表示

面積が100以上のものに対してregion.bboxでラベル画像を囲む最小の四角の座標を取得し、その座標で切り取りを行い、切り取った画像のリストを作成した。
そのリストをImagegridを用いて表示した。タイトルには切り取った画像のラベル番号を記している。

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

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

参考

Label image regions — skimage 0.22.0 documentation
skimage.filters — skimage 0.22.0 documentation
skimage.segmentation — skimage 0.22.0 documentation
skimage.measure — skimage 0.22.0 documentation
skimage.measure — skimage 0.22.0 documentation
matplotlibでcolor cycleのN番目の色を指定するいくつかの方法 - Qiita
実際の活用場面に即したタイトルにすると__「同じ図に複数データをプロットする際にcolor cycleから同じ色を指定する方法」とでもなりますが、少し一般性を持たせるためにどういう作業をするかに注目…

コメント