[scikit-image] 11. 画像の凸包計算:morphology.convex_hull_imageの使い方

python

はじめに

skimage.morphology の convex_hull_image 関数を使用すると、画像の凸包(convex hull)を計算することができます。凸包とは、対象となる点集合を全て含む最小の凸多角形のことです。

コード

解説

この例では、2値化画像の凸包を求めています。凸包とは、入力画像内のすべての白いピクセルを囲む最小の凸多角形のことです。

凸包 - Wikipedia

モジュールのインポート

データの読み込み

画像をimread()で読み込み、> 0の条件式を適用することでブール値配列に変換します。画像は下記サイトから取得した。

Cactus icon 3 | アイコン素材ダウンロードサイト「icooon-mono」 | 商用利用可能なアイコン素材が無料(フリー)ダウンロードできるサイト
6000個以上のアイコン素材を無料でダウンロードできるサイト ICOOON MONO

凸包を求める

skimage.morphology モジュールの convex_hull_image(image) 関数を使用すると、画像の凸包を効率的に計算できます。

図の表示

凸包部分の可視化

img_as_floatを使うとchullのTrue部分が1になり、chull_diff[image] = 2によってimageのTrue部分が2となります。これにより、元のimageの部分が2、凸包の部分が1という値を持つ配列が得られます。

この結果を表示すると、上図のように元の画像のどの部分が凸包処理されたかを視覚的に確認できます。

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

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

使用上の注意点

凸包処理を行う際は、以下の点に注意すると良いでしょう:

  • 入力画像はバイナリ画像である必要があります。グレースケールやカラー画像の場合は事前に二値化処理を行いましょう。
  • ノイズに敏感なため、前処理としてノイズ除去を行うと良い結果が得られます。
  • 複数のオブジェクトが存在する画像では、すべてのオブジェクトを含む一つの凸包が生成されます。個別に処理したい場合は、オブジェクトごとに分離する必要があります。

凸包処理は、画像解析やコンピュータビジョンの分野で広く活用されており、形状認識や特徴抽出などの基礎となる重要な技術です。

参考

Convex Hull — skimage 0.25.2 documentation

コメント