ITKのWatershedフィルターによる領域分割(1)

投稿者: | 2021年12月31日

今回からの特集では、Watershed法を使った画像の領域分割についてお話する。今回の特集の目的は、Watershed法についてわかりやすく説明しつつ、Watershed法を実際に使い、入力画像からのオブジェクトのセグメンテーションを試みることである。第一回目の本記事では、領域分割とは何か、Watershed法とは何か、そしてどのようにITKを使ってWatershed法を実行するのかについての説明を行っていきたい。

セグメンテーションとは

まず、領域分割は、画像処理の分野ではセグメンテーション(Segmentation)と呼ばれてる。セグメンテーションとは画像の中にあるオブジェクトの領域を背景(と見なす部分)と分けたり、2つ以上のくっついているオブジェクトを別々の領域として分けることである。下の図のように、イチゴのパターンだけを色付けし、背景を黒く塗りつぶすことも「セグメンテーション」である。人間がイチゴのパターンとそうでない部分を分けることは簡単だが、コンピューターは手順を教えてあげないと分けることはできない。手順とは方法やアルゴリズムのことである。今回は、セグメンテーションアルゴリズムとしてWatershed法を用いる。

元画像

セグメンテーション適用

Watershed法の原理

Watershed法とは何か?Watershedとは、日本語にすると「流域」や「集水域」を意味する。Watershed法は、ある地形(流域)に雨が降れば雨粒は等高線の高いところから低いところへ滴り落ち集水域(流域)を形成する、という地球物理学的なモデルから着想を得て考案された。つまり、画素値を標高や高さと見なして画像上で集水域を形成すれば自動的にセグメンテーションができるはず、というアイディアから生まれた方法である。

Watershed法の原理

Watershed法の適用

では、どのようにWatershedモデルを画像に適用するのだろうか?

画像に適用する場合、輝度値など画素の持つ値は標高(高さ)とみなされる。そうすると、局所的な最小値を持つ画素は、ある領域の最も標高が低い場所と見なすことができる。そしてこの最小値を持つ画素に最急降下法によって(雨滴が低地に流れ落ちるように)移動することができる画素の集合を集水域とみなす。つまりその集水域がセグメンテーション領域となる。

今回の特集では、ITKを使って簡単にWatershedによるセグメンテーションを実行する。具体的には、ITKのWatershedフィルターを使ってセグメンテーション画像をそれぞれ作成する。また2種類のWatershedフィルターを使用し、結果画像を比較していきたいと思う。

一つ目のWatershedフィルターとしては、itk::WatershedImageFilterを使う。このフィルターには前述の原理を基に考案されたアルゴリズムが実装されている。

もう一つのWatershedフィルターとしては、モルフォロジカル(オブジェクトの形状や構造)な分析結果を与えてくれるitk::MorphologicalWatershedImageFilterを使う。このフィルターは、前者のフィルターとはかなり違ったアルゴリズムステップが実装され効率化されている上に、セグメンテーション領域の境界線(Watershed line)も得ることができる。

さらに説明すると、itk::WatershedImageFilterでは前述したように局所的な最小値を求め最急降下法によって初期セグメンテーション領域を得たあと、この領域をマージするマージツリーを作成するのである。そのため、入力画像の大きさや求める精度にもよるが、計算コストが小さくないことは想像に難くない。

一方、itk::MorphologicalWatershedImageFilterではマージツリーは作成されない。初期セグメンテーション領域もノードとして保持することもない。その代わりに、セグメンテーション領域の境界を拡張するため、キュー(Queue)を利用する。このキューにはセグメンテーション領域の境界ラインである画素情報のみが保持されている。経験則的にはこちらのフィルターの方が高速に処理してくる。

まとめ

今回は、Watershed法の原理とそれを利用したセグメンテーション、Watershed法を実装しているITKのフィルターについての説明を行った。次回からはitk::WatershedImageFilterを使ってセグメンテーションを実際に行い、結果をお見せしたいと思う。

以上。

コメントを残す

メールアドレスが公開されることはありません。