[scikit-image] 54. ラベリングした領域のサイズ、角度、重心などの測定(skimage.measure regionprops)

python

はじめに

画像処理において、ラベリングされた領域の特性を測定することは非常に重要です。scikit-imageのskimage.measure.regionprops関数を使用すると、ラベリングされた領域のサイズ、向き、重心など、様々な特性を簡単に測定できます。

regionpropsの基本的な使い方

画像をラベリングした後、regionpropsを使用して各領域の特性を取得します。

主な測定可能な特性

regionpropsで測定できる主な特性は以下の通りです:

  • area: 領域内のピクセル数
  • bbox: 領域を囲む最小の矩形(バウンディングボックス)
  • centroid: 領域の重心座標
  • orientation: 領域の主軸の向き(ラジアン単位)
  • major_axis_length: 楕円に近似した場合の長軸の長さ
  • minor_axis_length: 楕円に近似した場合の短軸の長さ
  • eccentricity: 楕円の離心率
  • solidity: 領域の凸包(convex hull)に対する面積の比率

コード

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

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

解説

モジュールのインポート

回転した楕円の生成

ellipse(256, 256, 100, 256)関数で中心座標(256, 256)に短径100×2、長径256×2の楕円を生成します。image[rr, cc] = 1で楕円に該当する部分を1に設定します。その後、rotate(image, angle=45)関数を使用して楕円を左に45度回転させます。

ラベリングとプロパティの取得

regionprops(ラベリングした画像)を使用すると、すべてのラベル領域の特性を一度に取得できます。返り値は各ラベルの特性情報を含むリストになります。

画像の表示

図形の表示

楕円の重心と長径と短径

props.centroidを使用すると重心の座標が得られ、props.orientationからは楕円の主軸と軸の間の角度(向き)を取得できます。また、major_axis_lengthは楕円の長軸の長さを、minor_axis_lengthは短軸の長さを表します。

バウンディングボックスの表示

Bounding Boxとは,対象物を囲むことのできる最も小さい四角形のことで、props.bboxで取得できます。

表示範囲の設定

まとめ

scikit-imageのregionprops関数は、画像内のラベリングされた領域の様々な特性を簡単に測定できる強力なツールです。これにより、物体検出、分類、特徴抽出などの高度な画像解析タスクが可能になります。

実際の応用では、これらの特性を組み合わせることで、より複雑な画像解析や物体認識が実現できます。例えば、医療画像における細胞の分類や工業用画像における欠陥検出など、幅広い分野で活用されています。

参考

Measure region properties — skimage 0.25.2 documentation
skimage.transform — skimage 0.25.2 documentation
skimage.measure — skimage 0.25.2 documentation

コメント