はじめに
scikit-imageのregionprops_tableは、画像処理におけるラベリングした領域の情報を取得し、それを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 |
解説
モジュールのインポートなど
画像データの生成
画像データの作成は下記記事と同様に行いました。

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

バイナリ画像の生成
threshold_otsuを用いて大津の方法により2値化のためのしきい値を取得します。このしきい値を使って画像imをバイナリ画像に変換します。大津の方法による2値化については下記記事で詳しく説明しています。

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

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

labelでreturn_numオプションをTrueに設定すると、ラベル画像と総ラベル数が返り値として得られます。この場合、label_num = label_image[1]で総ラベル数を取得できます。また、label_imageの0の部分をnp.nanに置き換えて表示すると、上記のような結果になります。タイトルには総ラベル数を表示しました。
regionprops_tableによるデータの取得
まず、propertiesに取得したい項目を設定します。次に、regionprops_tableにラベル画像とプロパティを指定することで辞書形式のデータが得られます。この辞書データをpd.DataFrameに変換するだけで、整理されたテーブル形式のデータが完成します。取得可能な項目の詳細については、下記サイトをご参照ください。
regionpropsで取得したデータを活用して、ラベル付けした領域に対して様々な処理が可能です。以下でその具体例を説明します。
ラベル領域を四角で囲む

面積が1000以上の領域を緑色の四角形で囲みます。region.bboxを使用して、四角形の4隅の座標を取得します。
ラベル領域の重心に点を表示

面積が1000以上の領域の重心に緑点を表示します。重心の座標はregion.centroidプロパティから取得できます。
ラベル領域にラベル番号をつける

まとめ
scikit-imageのregionprops_tableを使用することで、ラベリングした画像の各領域の特性データをpandasのDataFrameとして簡単に取得できます。これにより、画像内のオブジェクトの特性を分析しやすくなり、データの可視化や統計処理が効率的に行えます。特に複数の領域を含む画像処理において、この機能は非常に有用です。
コメント