[scikit-image] 68. ラベリングした領域のデータをregionprops_tableによりpandasのDataFrameで取得する(skimage.measure regionprops_table)

Pandas

はじめに

scikit-imageのregionprops_tableでラベリングした領域の情報を取得できるregionpropsのデータをpandasのDataFrameにする。

コード

label area centroid-0 centroid-1 equivalent_diameter
0 1 565 10 10 26.821267
1 2 1423 17 281 42.565477
2 3 3575 48 158 67.467261
3 4 7037 72 366 94.656150
4 5 256 60 268 18.054067
5 6 11557 138 70 121.304697
6 7 663 83 447 29.054394
7 8 1162 113 283 38.464326
8 9 3206 157 227 63.890578
9 10 188 152 396 15.471556
10 11 1200 185 310 39.088201
11 12 9337 230 419 109.033195
12 13 2120 265 28 51.954478
13 14 192 258 183 15.635280
14 15 240 278 265 17.480775
15 16 3345 326 120 65.260909
16 17 19675 409 163 158.275039
17 18 7976 352 464 100.773799
18 19 1349 336 15 41.443940
19 20 1689 384 362 46.373501
20 21 1077 431 408 37.030784
21 22 207 437 252 16.234549
22 23 188 453 27 15.471556
23 24 1166 480 313 38.530472
24 25 188 471 214 15.471556
25 26 174 477 450 14.884343
26 27 1780 494 398 47.606369

解説

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

画像データの生成

画像データの作成は下記記事と同様に行った。

[matplotlib] 57. plt.imshow()で軸を画像から離して表示
matplotlibのplt.imshowで画像を表示する際に、軸を画像から離して表示する方法について説明する。

画像を表示すると下記のようになる。

バイナリ画像の生成

threshold_otsuで大津の方法により2値化のためのしきい値を得る。
そのしきい値を用いて画像imをバイナリ画像へと変換する。
大津の方法による2値化については下記記事で説明した。

[scikit-image] 50. しきい値処理でグレースケール画像をバイナリ画像に変換
skimage.filtersのthreshold_otsuによるしきい値処理について説明する。

図示すると下記のようになる。

バイナリ画像のラベリング

labelでreturn_numをTrueにすると、ラベル画像と総ラベル数が返り値として得られるので、label_num = label_image[1]で総ラベル数を取得する。

label_imageの0の部分をnp.nanにして表示すると上記のようになる。タイトルに総ラベル数を表示した。

regionprops_tableによるデータの取得

propertiesに取得した項目を設定し、regionprops_tableにラベル画像とプロパティを記述することで辞書形式のデータが得られる。これをそのままpd.DataFrameでデータフレーム化することでTableが得られる。

取得できる項目については下記サイトが詳しい。

skimage.measure — skimage 0.25.0 documentation

このregionpropsで得られるデータを用いて、ラベルをつけた領域に対して様々な処理ができる。
その例を下記で説明する。

ラベル領域を四角で囲む

面積が1000以上のものを緑四角で囲む。region.bboxにより、4隅の座標を取得する。

ラベル領域の重心に点を表示

面積が1000以上のものの重心に緑点を表示する。region.centroidにより、重心の座標を取得する。

ラベル領域にラベル番号をつける

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

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

参考

skimage.measure — skimage 0.25.0 documentation
Explore and visualize region properties with pandas — skimage 0.26.0rc0.dev0 documentation

コメント