[scikit-image] 10. 画像内の等高線を検出(measure.find_contours)

python

はじめに

scikit-imageのmeasure.find_contours関数は、グレースケール画像内の指定した値の等高線を検出するための関数です。この関数を使用することで、画像内のオブジェクトの境界を抽出したり、特定の輝度値を持つ領域を識別したりすることができます。

コード

解説

この例では、画像内の一定値の輪郭を検出します。検出にはskimage.measureモジュールのfind_contours関数を使用しており、この関数はマーチングスクエア(マーチングキューブ)法に基づいています。

マーチングキューブ法 - Wikipedia

モジュールのインポート

データの生成

np.meshgrid(x, y)関数を使用して1次元配列x、yから2次元配列X、Yを生成し、これを定義済みの関数に適用することでデータを作成しています。

等高線の検出

contours = measure.find_contours(Z, 0)を実行すると、値が0であるデータポイントが線で結ばれ、等高線として表示されます。

出力される等高線の精度を高めるため、配列値は線形補間されます。画像のエッジと交差する等高線は開いた状態になりますが、それ以外は閉じた状態となります。

図の表示

等高線を表示します。等高線データのcontoursはリスト形式で、各要素のcontours[:,1]にx軸、contours[:,0]にy軸のデータが格納されています。この構造に基づき、enumerateを使用したfor文で複数の等高線をプロットします。

カラーバーの表示

カラーバーは、画像と同じサイズになるように、make_axes_locatableをつかって作成します。

[matplotlib] 18. 効果的なカラーバーの表示:サイズと配置の最適化
Matplotlibを使用したデータ可視化において、カラーバーのサイズや位置を図に合わせて調整する方法を解説。より見やすく効果的なグラフ作成のテクニックを紹介しています。

値が0.7の等高線

値が-0.7の等高線

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

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

まとめ

scikit-imageのmeasure.find_contours関数は、画像内の等高線を効率的に検出するための強力なツールです。この関数を活用することで、以下のような画像処理タスクを実現できます:

  • 画像内のオブジェクト境界の抽出
  • 形状分析と特徴抽出
  • オブジェクトの計数と測定
  • 複雑な構造の視覚化

等高線検出は、医療画像解析、地理情報処理、物体認識など、様々な分野で応用可能な基本的かつ重要な画像処理技術です。

参考

Contour finding — skimage 0.25.2 documentation

コメント