2018年9月6日 更新

画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像処理のセグメンテーションの分野で用いられるLevel set 法を用いて画像のセグメンテーションを行います.

37,382 view お気に入り 1
それでは,上のコードを用いて,画像のセグメンテーションをしてみましょう.

基本的にはchanvase.py を実行すれば可能なのですが,convergenceの関数のところで,以下のように修正しました.
# Convergence Test
def convergence(p_mask, n_mask, thresh, c):
    diff = np.array(p_mask.astype(np.int)) - np.array(n_mask.astype(np.int)) ## modified
    n_diff = np.sum(np.abs(diff))
    if n_diff < thresh:
        c = c + 1
    else:
        c = 0
    return c
コードサンプル (上のサイトから少し修正).py
もし,パッケージなどでエラーがあれば,以下のようにパッケージをインストールしてみてください.私は,scipy の方で
ImportError: dlopen(/usr/local/lib/python2.7/site-packages/scipy/special/_ufuncs.so, 2): Library not loaded: /usr/local/opt/gcc/lib/gcc/5/libquadmath.0.dylib
  Referenced from: /usr/local/lib/python2.7/site-packages/scipy/special/_ufuncs.so
  Reason: image not found
Error1
のようなエラーがあったので,以下の方法で対処しました.
sudo pip install --upgrade --force-reinstall scipy
solve

実行結果

python chanvese.py
iteration: 0
iteration: 50
iteration: 100
iteration: 150
iteration: 200
iteration: 250
iteration: 300
iteration: 350
iteration: 400
iteration: 450
iteration: 500
iteration: 550
iteration: 600
iteration: 650
iteration: 700
iteration: 750
iteration: 800
iteration: 850
iteration: 900
iteration: 950
update
上のコードをそのまま実行しました.

上のコードをそのまま実行しました.

うまく動いているようですね!

Rice 画像のセグメンテーション

Rice 画像

Rice 画像

それでは,別の画像でSegmentation を行ってみましょう.
今回使うのはImageJのサンプルの,Rice 画像です.
コードを以下のように変更して,セグメンテーションを行います.
if __name__ == "__main__":
    img = nd.imread('./../rice.png', flatten=True)
    mask = np.zeros(img.shape)
    shp = img.shape
    mask[30:shp[0]-30, 30:shp[1]-30] = 1 ##modified

    chanvese(img, mask, max_its=1000, display=True, alpha=1.0)
コードサンプル.py
36 件

関連する記事 こんな記事も人気です♪

Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

画像処理の一つ,モルフォロジー変換をPython と OpenCVのライブラリを用いて実装し,それを2値画像に対して適用します.
等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

前回の記事「等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 1」の続きです. 実際に実装をして,写像を確かめてみます.
等角写像による画像の変換〜Schwarz-Christoffel 変換〜 part1

等角写像による画像の変換〜Schwarz-Christoffel 変換〜 part1

等角写像の一つであるSchwarz Christoffel 変換を用いて,画像の変換をしてみます. python によるコードも記載しております. 画像はhttps://uk.mathworks.com/help/images/examples/exploring-a-conformal-mapping_ja_JP.html より.
画像の一部を消すInpainting という技術とその実装 (python)

画像の一部を消すInpainting という技術とその実装 (python)

Python + OpenCVにより,画像の修復の技術,「Inpainting 」の実装を行います.
画像のFilter をPython で視覚的に理解する (Gaussian, Edge 抽出).

画像のFilter をPython で視覚的に理解する (Gaussian, Edge 抽出).

Python を用いて,画像のFilter を視覚的に理解してみます.コードを載せていますので,実装可能です.

この記事のキーワード

この記事のキュレーター

エルピクセル編集部 エルピクセル編集部