はじめに
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.24.0 documentation
コメント