2018年9月6日 更新

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

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

863 view お気に入り 1

セグメンテーションとは

画像のセグメンテーションとは,画像から注目している領域を切り取る ということです.例えば,細胞の画像が与えられたとき,その画像から細胞部分と背景部分とを区別することは,非常に重要です.

 (4906)

一見,二値化すれば終わりのように思いますが,画像処理の分野では,画像にノイズが含まれる場合を考慮する必要があり,簡単にはいきません. ここで力を発揮するのが,画像のセグメンテーションです.

画像のセグメンテーションには,いくつか手法があります.

  • Snakes
  • Level set 法
  • Deep Learning に基づく方法

ここではその中でも,Level set 法と呼ばれる方法を紹介したいと思います.

Level set 法

Level set 法とは,Osher やSethean によって開発された,セグメンテーションの枠組みです.この枠組みでは,領域の内部,外部をLevel set 関数と呼ばれる陰関数$\phi$の符号によって表現します. 具体的には

\begin{equation} \phi(r,t) < 0 \ \ r \in \Omega \end{equation}

\begin{equation} \phi(r,t) =0 \ \ r \in \partial \Omega
\end{equation} \begin{equation} \phi(r,t) >0 \ \ r \notin \Omega \end{equation}

とします.Level set 関数には,領域の個数などの事前情報が必要ないといったメリットがあります.

 (4904)

Level set 法の更新則

ここで更新の仕方をざっと説明したいと思います.

\begin{align} \phi(r+dr,t+dt) - \phi(r,t) = 0 \end{align} \begin{align} \therefore \ \frac{\partial \phi}{\partial t} + v\cdot \nabla \phi =0 \end{align}

この式はHamilton-Jacobi 方程式と呼ばれ,様々なところで目にすると思います.

ここで,上の$v$は更新速度であり,評価関数の微分によって計算されます.

実装

大まかな理論に関して説明したところで,具体的に画像のセグメンテーションを行いましょう. 今回は,Github で公開されていた,Python のプログラムを用いてみます.

Chan-Vese level sets in Python

Chan-Vese Level set では以下のコスト関数を最小化します.

\begin{align} E(C) = \mu_1 \int_{\rm inside} |I(x,y)-c_1|dxdy + \mu_2 \int_{\rm outside} |I(x,y)-c_2|dxdy + \alpha \kappa \end{align}

この式の意味は

  • 第一項: 内部の輝度値($c_1$)と画像の輝度値($I(x,y)$)との差分
  • 第二項: 外部の輝度値($c_2$)と画像の輝度値($I(x,y)$)との差分
  • 第三項: 曲線の曲率項(安定して更新するため)

です.つまり,内部と外部の輝度値を決めておくことで,外部の輪郭の抽出ができるということですね.

36 件

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

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

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

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

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

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

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

Python を用いて,画像のFilter を視覚的に理解してみます.コードを載せていますので,実装可能です.
三好 裕之 | 4,532 view
点像分布関数の話

点像分布関数の話

光学系を理解するうえで前提として知っておいた方が良い内容
Yoshiyuki Arai | 758 view
現役JDと学ぶ画像処理入門①〜openCV入門〜

現役JDと学ぶ画像処理入門①〜openCV入門〜

openCV入門(画像の読み込み、表示、保存、線形変換、拡大縮小)
広部ゆりか | 33,781 view

この記事のキーワード

この記事のキュレーター

三好 裕之 三好 裕之