グラフカット(Graph Cut)

ここで説明するグラフカットは、画像の領域抽出などで使用される手法の1つ。

■ 用途

たとえば、写真画像から背景と前景物を分離したいとか


http://www.insight-journal.org/browse/publication/777

CT画像

から臓器の領域だけ取り出したい
、という用途で使用される。
http://www.grand-challenge2008.bigr.nl/proceedings/pdfs/lts08/02_cmm.pdf

ほかにも、複数の画像をシームレスに接続するとか、ノイズを除去するとか、画像処理に関する幅広い用途で用いられている。


■ 問題設定

次のエネルギーを最小化する「最小化問題」とみなす。

なるべくデータに忠実に(データ項)、でも、できるだけ滑らかに(平滑化項)領域分けしましょう。と考える。

たとえば、CT画像のなかで、「ある画素値をもつ部分は肝臓っぽい(データ項)」という判断だけで領域分けすると、
ノイズの影響で、輪郭がガタガタになったり、または離れた場所に点々と肝臓とみなされる領域が作られることになってしまう。

そこで、点在する領域は無視して、また、輪郭はなるべく滑らかになってほしいという点(平滑化項)も考慮して、最適化問題を解く、というアプローチをとる。


CT画像中のある画素が、肝臓であるか否か、を2値で表す場合、画素の数がNだとすると2のN乗通りもの可能性があって、この最適解を見つけることは(NP困難なので)現実的に解けない。

ところが・・

ここにグラフカットのアプローチを導入すると、多項式時間で解けてしまう。すごい。


■ グラフカットとは?

たとえば、次のように辺に重みのついたグラフを考える。
(図出典:http://www.f.waseda.jp/hfs/SSIITutorial.pdf

このグラフをsに接続した領域とtに接続した領域に分離したい。

ただし、辺を切断するにはコストがかかる(辺に書かれた数字)。

できるだけコストのかからない方法で分離したい。

下のような方法で分離すると、10のコストがかかる。

下の方法だと4のコストで済み、これが「最小切断」と呼ばれる。

このような切断方法は、多項式時間で求めることができる。


■ 画像の領域分割にグラフカットの考えを導入する

隣接する画素の間に「辺」を配置したグラフを構築する。
画素の中には、あらかじめ基準となる点を指定しておいて、それをうまく分離するような境界をグラフカットで求めることになる。

辺には隣接する画素の値に応じてコストを設定しておく。
たとえば類似する画素はなるべく分離されて欲しくないので、大きいコストを設定する(平滑化項)。


さらに詳しくは
名古屋市立大学 石川博先生による「グラフカット」http://www.vision.cs.chubu.ac.jp/CV-R/pdf/HiroshiCVIM2007.pdf
名古屋市立大学 石川博先生による「グラフカットの理論と応用」http://www.f.waseda.jp/hfs/SSIITutorial.pdf
・Yuri Boycov, Graph Cuts vs. Level Sets part I Basics of Graph Cuts, http://www.docstoc.com/docs/80874533/Graph-Cuts-vs-Level-Sets-part-I-Basics-of-Graph-Cuts
・Konstantinos G. Derpanis, Gabor, filters http://www.cse.yorku.ca/~kosta/CompVis_Notes/gabor_filters.pdf

グラフ理論入門

グラフ理論入門

詳解 画像処理プログラミング

詳解 画像処理プログラミング