はじめに
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.24.0 documentation
このregionpropsで得られるデータを用いて、ラベルをつけた領域に対して様々な処理ができる。
その例を下記で説明する。
ラベル領域を四角で囲む
面積が1000以上のものを緑四角で囲む。region.bboxにより、4隅の座標を取得する。
ラベル領域の重心に点を表示
面積が1000以上のものの重心に緑点を表示する。region.centroidにより、重心の座標を取得する。
ラベル領域にラベル番号をつける
コードをダウンロード(.pyファイル)
コードをダウンロード(.ipynbファイル)
参考
skimage.measure — skimage 0.24.0 documentation
Explore and visualize region properties with pandas — skimage 0.25.0rc2.dev0 documentation
コメント