Re - ImageJで学ぶ!: 第32回 ImageJによる領域抽出処理で学ぶ!

2015年10月3日土曜日

第32回 ImageJによる領域抽出処理で学ぶ!

画像の領域抽出処理は、2値化あるいは2値画像処理と関連して頻繁に使用される画像処理です。画像内の特定の対象(臓器、組織、細胞、特定の病巣、特定の色を持つ領域など)をこの領域抽出処理によって取り出し、各種統計解析処理や特徴量の解析などにつなげるためにも精度の高い自動抽出機能が望まれます。

lmageJでも代表的な領域抽出法がいくつか紹介されていますが、その中でもユニークな動的輪郭モデル(スネーク)による領域抽出法を紹介します! 

閾値処理による領域抽出法


最も簡単な領域抽出法として、単に2値化する際に用いる閾値抽出法が挙げられます。これは、ImageJで標準機能として用いることができます。(ImageJによる2値化については、第23〜25回で詳述してきました。)
ヒストグラムにあきらかな山と谷がある場合は、「大津の方法」と呼ばれるヒストグラム法などで、画像内の特別な値を持つ対象のみを抽出できます。

次の図は、この方法をlmageJで試みた例です。
(元画像)
(2値化)

図のように、画像の背景や対象の濃淡値が不均一の場合や、対象としたい領域と似ている別の領域がある場合には、工夫しなければ、使用するのが困難であることがわかります(赤い部分が抽出処理によって認識された部分で、思ったところを完全には抽出できていないことがわかります)。

このような閾値抽出の失敗をカバーするために、ヒステリシス(Hysteresis)閾値処理が使用される場合があります。
この処理は、閾値に一定の幅を持たせ、閾値以下の画素であっても閾値以上の濃度値を持つ画素の近隣に位置するものであれば抽出する方法です。別名、Connection Thresholding」とも呼ばれています。こちらからプラグインをダウンロードしましょう。
http://imagejdocu.tudor.lu/doku.php?id=plugin:segmentation:thresholding_by_connection:start
利用するためには、説明に沿って、2つのクラスファイルを、pluginsフォルダ直下に保存して、ImageJを起動します。
次の図に、ImageJによるヒステリシス閾値処理例を示します。
(プラグイン起動)
(SetでデフォルトのままOKして、閾値別の領域ごとに3色表示)
(近傍の抽出領域の濃淡値を変えてマルチ二値化)

(近傍の領域を含めてまるまる二値化=ヒステリシス二値化)


本質的には、この処理の結果は単純な大津の方法とあまり変わりません。
この処理のアルゴリズムの詳細は、ImageJのドキュメンテーショWiki(http://imagejdocu.tudor. lu/imagej-documentation-wiki/plugins)紹介されています

また、マルチ大津法というlmageJのプラグイン(http://rsbweb.nih.gov/ij/plugins/download/Multi_OtsuThreshold.java) も紹介されています。結果は、上記のヒステリシス閾値処理と類似しているため割愛します。

これら閾値による領域抽出法では、記のように完全自動で抽出するのが困難な場合が少なくありません。このため、扱う画像の性質により、あらかじめ前処理を施して使用することになります。例えば、あらかじめ対象の抽出のために、グレイスケールレベルでオープニング処理を施して、対象以外の余計な対象をすべて除去し、その後、大津の方法を使用して抽出するなどの方法が必要になります。

このように、自動領域抽出といっても、実際は画像の性質に応じて何らかの前処理が必要な場合が多いということになります。

動的輪郭抽出処理


画像上の対象が何らかの輪郭を持ち、エッジが観察できる場合、そのエッジを閉曲線として抽出する処理を動的輪郭抽出処理と言い、一般的には「スネー (snakes)」と呼ばれています(参考文献1)

次の図は、Dr. Thomas Boudier によって作成されスネークプラグインhttp://rsb.info.nih.gov/ij/plugins/snake.html)の施行結果です。操作手順として、前述のImageJのドキュメンテーションWikiからSnake_.classファイルとPoint2d.class をダウンロードし、pluginsにファイルを置きます。

実際の操作手順は、下記の通りです。
検出したい部分の周辺をROIで囲む(任意のROIでよい)
プラグインから(Snake)を起動
各種設定をしてから、実行。


(Snakeプラグインの実行結果:繰り返しは1回)

さらに、このSnakeプラグインの改良版に「ABSnake2」が公開されています(http://imagejdocu.tudor.lu/doku.php?id=plugin:segmentation:active_contour:start)。

こちらも同じようにプラグインをセットして利用できます。違いは、繰り返し計算ごとのROIや位置情報テキストを保存できるようになったことなど、マナーチェンジが行われています。


  1. まず、前述同様、任意のROIを、関心領域内におさまるように配置(エッジ強調などをして、領域確認するといいかもしれません。)
  2. 設定したROIからエッジを検出していくための閾値(Gradient threshold)を設定( 大きな値はよりスムーズな曲線になります) 
  3. 繰り返し数を設定
を行って、以下の設定を任意に行います。

  • 繰り返しごとの画像を保存するチェック
  • 繰り返しごとのROI位置情報をテキスト保存するチェック(coordinates)
  • セグメント領域の二値化画像の生成チェック(うまく動作しないことがあります)
  • 繰り返しごとのROI情報を保存するチェック
  • ROIのサイズを記録するチェック
  • テキスト、画像、ROIを保存する場所の指定
スタック画像の場合は、最初のスライスの設定が次のスライスに反映されます。 

この処理を肺がん例に適用した例が次の図です。


(ROI設定)

(ABSnake設定画面:繰り返し数は、数百などの大きい値にした方が、きれいに抽出されます。)

(抽出結果)

(自動保存されたデータ)


肺がんの関心領域が、スネークインターフェイスのパラメータに従って抽出できていることが観察できます。スネークは、一般的になめらかな輪郭線の場合は精度良く抽出できますが、複雑な形状の場合はパラメータ調整も複雑になります。

スネークアルゴリズムの解説


スネーク処理をする場合、最初に画像上の対象に対して、大雑把な閉曲線を作るのが一般的な手法です。この閉曲線のエネルギーEsは次式で与えられます

(参考記事より引用)

このEsが最小値になるように閉曲線を求めます
ここでv(s)は、s(0s1)媒介変数とする閉曲線です。一般的にv(s)は、二次元閉局面を示すので、v(s)= (x(s),y(s))と表されます。

(1)Einternalは、閉曲線の連続性のなめらかさを表すエネルギー、Eimageは画像のエッジの強さに基づくエネルギー、Eexternalは、閉曲線を縮小させるためのエネルギーを意味します。

さらにEinternalは、連続性のエネルギー EcontinuityとなめらかさのエネルギーEcurvatureの荷重和です。
この連続性のエネルギーは、次の式で表すことができます。

(参考記事より引用)

これは、v(s)の一次微分値の2乗です。また、なめらかさのエネルギーは、次の式で表されます。

(参考記事より引用)

これはv(s)の二次微分値の2乗です。
上記の荷重和の荷重係数は、対象に応じて調整するのが一般的手法です
Eimageのさらに詳細な式として、次の式が与えられます。


(参考記事より引用)

この式はv(s)の位置での画像値の勾配を示しています。ここで閉曲線v(s)は、デジタル画像では離散的な点であり、点列の間はスプライン補間などが施行されます。

この点列は、エネルギーが小さくなる方向へ、指定された画素近傍から順次移動していきます。ほとんどのスネークアルゴリズムが上記の処理の変形です。

今回は、ImageJを用いた画像の中の対象を抽出する処理の説明を行いました。この処理は、三次元画像処理でも応用されており、取り出された対象の体積や三次元形状指標などが計算されて、診断のための定量化がなされています次回は続けて、画像の要素の検出方法について述べます!

Reference
  • 山本修司:ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(22・11) 2007, p105-107」
  • 1) Kass, M., Witkin, A., Terzopoulos, D. : Snakes : Active Contour Models”. IJCV, 321-331,1988. 
  • 2) T. Boudier, Elaboration d'un modèle de déformation pour la détection de contours aux formes complexes, Innov. Techn. Biol. Med., Vol 18, n°1, 1997.

0 件のコメント:

コメントを投稿