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

python

はじめに

skimage.measureのfind_contoursによる画像内の等高線検出について説明する。

コード

解説

この例では、画像内で一定値の輪郭を見つける。その際、skimage.measureのfind_contoursを用いるが、これはマーチングスクエア(マーチングキューブ)法を使用している。

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

モジュールのインポート

データの生成

X,Y = np.meshgrid(x, y)により、1次元配列x,yを2次元配列X,Yにして、定義した関数にX,Yを流し込むことで、データを生成した。

等高線の検出

contours = measure.find_contours(Z, 0)により、値が0であるデータが線で結ばれて、等高線が表示される。

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

図の表示

で等高線を表示する。等高線データのcontoursはリストで、各次元のcontours[:,1]にx軸、contours[:,0]にy軸のデータが格納されているデータ構造となっているので、enumerateのfor文で複数データをプロットする。

カラーバーの表示

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

[matplotlib] 18. カラーバーを図にあわせる
疑似カラーマップのカラーバーを図にあわせて表示

値が0.7の等高線

値が-0.7の等高線

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

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

参考

Contour finding — skimage 0.22.0 documentation

コメント