はじめに
skimage.measureのfind_contoursによる画像内の等高線検出について説明する。
コード
![](https://sabopy.com/wp/wp-content/uploads/2019/12/find_contours_0-800x533.jpg)
解説
この例では、画像内で一定値の輪郭を見つける。その際、skimage.measureのfind_contoursを用いるが、これはマーチングスクエア(マーチングキューブ)法を使用している。
![](https://upload.wikimedia.org/wikipedia/commons/6/63/Marchingcubes-head.png)
マーチングキューブ法 - 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をつかって作成。
![](https://sabopy.com/wp/wp-content/uploads/2019/03/cb_append_axes_121_122-1-160x90.png)
[matplotlib] 18. カラーバーを図にあわせる
疑似カラーマップのカラーバーを図にあわせて表示
値が0.7の等高線
![](https://sabopy.com/wp/wp-content/uploads/2019/12/find_contours_07-800x533.jpg)
値が-0.7の等高線
![](https://sabopy.com/wp/wp-content/uploads/2019/12/find_contours_m07-800x533.jpg)
参考
Contour finding — skimage 0.24.0 documentation
コメント