[scikit-image] 66. レベルセット法による画像のセグメンテーション(skimage.segmentation chan_vese)

python

はじめに

skimage.segmentationのChan-Vese Algorithmによる画像のセグメンテーション例について説明する。

コード

解説

モジュールのインポートなど

画像の読み込み

下記画像を下記サイトからダウンロードし、plt.imread()で読み込む。rgb2grayでグレースケールに変換した。

ペンギンのバンドのイラスト
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

chan_vese法によるセグメント化

muはエッジ長さのパラメータであり、muの値が大きいと丸いエッジが生成され、ゼロに近い値であるほど小さいオブジェクトが検出される。muは一般的に0〜1の範囲で調整するが、輪郭が不明確なものがある場合は1より大きくても良い。

tolは反復間のレベルセットの変動許容値であり、画像の面積で正規化された連続するレベルセット間のL2ノルムの差がこの値を下回った場合に、解に到達したと判断して、計算を終了する

max_iterは計算の試行回数となる。

返り値としては3つ返ってくる。1つ目はセグメンテーション画像であり、2つ目は最終的なレベルセットの画像であり、3つ目は、各ステップにおけるエネルギーの値のリストであり、計算が収束したかの判断ができる。

結果の表示

左上にオリジナル画像、右上のセグメンテーション画像、左下にレベルセット、右下にエネルギーの変化を示した。w

muを変化させたときの結果

muを大きくすると、小さい領域が潰れていくことが見てわかる。

形態学的なchan-base

形態学的なchan-baseによるセグメンテーションについて下記記事で解説した。

[scikit-image] 102. MorphACWEによる画像のセグメンテーション(skimage.segmentation.morphological_chan_vese)
skimage.segmentation の morphological_chan_veseで、モフォロジカル・スネーク法によるセグメンテーションを行うことができる。ここでは、Morphological Active Contours without Edges(MorphACWE)で画像をセグメンテーションした例について説明する。MorphACWEはオブジェクトの内側と外側の領域のピクセル値の平均値が異なる場合にうまく機能すると言われている。
コードをダウンロード(.pyファイル)

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

参考

Chan-Vese Segmentation — skimage 0.23.1 documentation
skimage.segmentation — skimage 0.23.1 documentation
画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -
画像処理のセグメンテーションの分野で用いられるLevel set 法を用いて画像のセグメンテーションを行います.

コメント