Snakeによる輪郭抽出を実装してみた

以下の本を読み始めた。 opluse.shop-pro.jp 第一章の動的輪郭モデルに関する話の冒頭で代表的な方法であるSnakeがでてきた。 アルゴリズムの説明があり、シンプルだったので自分で実装してみた。

こんな感じで動いた。

f:id:KYudy:20200531103535g:plain
m570の動的輪郭追跡(gamma=0.7)

gammaを0.7から0.5に変えると以下のようになった。画像の勾配に対して鈍感になるのでM570の左上のクリックボタンの輪郭を取れなくなってしまった。 一方で画像の勾配に鈍感な分、輪郭を縮めるので収束が速い。

f:id:KYudy:20200531101326g:plain
m570の動的輪郭追跡

ソースは以下のgistに載せた。 skimageをインポートしているが、Snakeのメインのアルゴリズムは自分で書いている。 Pythonでループを使って書かれているのでとても動作が遅いがアルゴリズムを理解するために書いたのであまり気にしていない。 Snakeのアルゴリズムはいくつかあるが、上記の書籍で紹介されているアルゴリズムは以下である。 Donna J et al. A Fast algorithm for active contours and curvature estimation. gist.github.com