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

python

はじめに

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

コード

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

解説

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

画像の読み込み

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

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

chan_vese法によるセグメント化

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

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

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

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

結果の表示

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

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

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

参考

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

コメント