前回は、画像群(クラス)の中から共通する特徴量を画像化するための主成分分析について説明しました。今回は、クラスとクラスがよく区別されるような処理法である判別分析法および、あらかじめ分類すべきデータがどのクラスに属するのかわかっていない「教師なし 学習」におけるパターン認識をする処理手法であるクラスタリングについて述べます。
医用画像処理では、よく画像のセグメンテーション手法にクラスタリングが用いられます。その中でも、今回はImageJを用いたk-meansクラスタリングについてサンプル画像を用いてより実践的な解説を行います。
判別分析法
主成分分析は、あるクラス内の特徴を画像化する方法ですが、判別分析は、クラス間を分離するためにクラス特徴量を用いて判別する処理法です。
この方法は、主成分分析と同じく二次元の特徴空間から、図のようにクラス間を最も識別できる基底を固有ベクトルより求めることによって判別します。
具体的な計算方法は、あるクラスCのパターンの数をN(c)とし、平均値をM(c)、全サンプル数をN、その平均ベクトルをMとした場合、全サンプルの分散共分散行列Sは、次の式で表されます。
次に、クラスCの分散共分散行列S(c) は、同様に、次の式で表されます。
これらの分散共分散行列から、クラス内分散共分散行列S(w)とクラス間分散共分散行列S(b)を求める式は以下のとおりです。
上式から、クラス間の分離を最大にするためには、S(b)S(w)-1乗が大きくなるように、基底を配列すればよいことになります。
ここで固有ベクトルを求める式は以下の式です。
固有値λが大きい順に固有ベクトルを並べると、これが判別分析のための基底となります。この値を主成分分析と同様に画像化すれば、それがクラス間を区別するための特徴画像となります。
画像のクラスタリング
パターン認識は、まず画像群を収集して、その画像一つひとつの特徴量を抽出し、パターン学習を行い、クラスの特徴を記録した「辞書」を作成します。
入力された画像は、このクラス辞書によってクラス分けされます。この場合、学習用の入力画像はあらかじめどのクラスに属するのかがわかっています。このような場合を「教師あり学習」と言います。また、クラスがわかっていない場合を「教師なし学習」と言います。
教師なし学習で、対象となる入力画像が特徴空間の中でクラスごとに集まっていると仮定して、クラスのパターン認識をする処理手法をクラスタリングと言います。クラスタリングは、大きく2つに分類され、階層的クラスタリングと非階層的クラスタリングがあります。
階層的クラスタリングは、クラス数を減少させていく処理を行う場合、初期状態において個々のクラスの要素を1つのクラスと考え、互いの距離の近いものから順にクラスを結合し、目的とする数のグループに分割します。よって、この場合は、融合していく過程がツリー状に表現できます。
K-meansクラスタリング
k-meansクラスタリングは、非階層的クラスタリングの1つです。あらかじめ割り振ったクラスの数をk個設定し、それぞれのクラスの代表となる種子点をk個、特徴空間に分布させます。そして、それぞれの点からクラスの最も近い中心に調整して新たな分割を設定し、クラスの平均の位置を更新していきます。この処理を繰り返すことによって、クラスが、与えられたクラス数だけ、分割されていきます。
図に、この処理の概要を示します。
より具体的な手順は以下のとおりです。
- あらかじめ仮設定したクラスの代表として、種子点をランダムに特徴空間上に分布させ、種子点との距離で仮のクラスを作成する(図a、b)。
- 割り振った種子点をもとに各クラスの中心を計算する。一般的にはクラス内平均値が使用される(図b)。
- 各種子点と各クラスの中心との距離を求め、種子点を最も近い中心のクラスターに割り当て直す(図c、d)。
- 上記の処理で、すべての種子点のクラスの割り当てが変化しなかった場合(エラーがない場合)は処理を終了する。それ以外は、新しく割り当てられたクラス中心点を再計算して上記の処理を繰り返す(Iteration数を確認することで、何回繰り返したかわかる)。
k-meansクラスタリングは、階層的クラスタリングに比べアルゴリズムが簡単で、処理量も少ないという利点がありますが、初期値としての種子点によって結果が異なるという欠点もあります。
ImageJによるk-meansクラスタリング
ImageJでk-meansクラスタリングを行う場合、Jarek Sacha氏がGNU Lesser General Public Licenseのもと、無償でImageJプラグインを提供しています。
このプラグインでは、任意のクラス数を決めて、そのクラスに各画素を割り当てた結果の画像を作成できます。
このk-meansクラスタリングを医用画像処理で使用する場合、マルチバンドの画像のピクセル値をベースとした領域分割が可能です。
処理対象がスタック画像の場合は、2つの解釈ができます。2D画像として、一つひとつの画像を1バンドと解釈し、その数kを初期値(画像)としてクラスタリングを行う、あるいは、1バンドの3D画像として解釈することができます。
このk-meansクラスタリングを医用画像処理で使用する場合、マルチバンドの画像のピクセル値をベースとした領域分割が可能です。
処理対象がスタック画像の場合は、2つの解釈ができます。2D画像として、一つひとつの画像を1バンドと解釈し、その数kを初期値(画像)としてクラスタリングを行う、あるいは、1バンドの3D画像として解釈することができます。
RGBカラー画像の場合は、赤、緑、青のそれぞれのピクセル群をクラスとみなして、この場合は種子点を3としてクラスタリングを行います。それぞれのクラスは、カラー画像の場 合、三次元空間上で中心位置が定義され、画像のピクセル群はこの中心位置から距離の近いクラスタに割り振られます。
各クラスタは、n次元空間における重心によって定義されます。
ピクセルは、クラスタの重心への近接性によってグループ化されます。
ImageJのk-meansプラグインのGUI(グラフィカルユーザー インターフェイス)から操作できる機能の特徴は下記のとおりです。
・ROI内だけのk-meansクラスタリングが可能
・クラスタリングの際の距離パラメータは、非等方性のマハラノビス距離が用いられる(マハラノビス距離についての説明は前回記事を参照して下さい)。
・ファジーk-meansへの拡張 ・クラスの検証用インデックス ・クラス数の自動選択
実際に、ImageJを用いたk-meansクラスタリングの処理例(プラグイン公開サイトのサンプルを使用)を示します。
まず、プラグインのk-means Configrationダイアログのクラスターの数を設定(ここでは"4":見た目で、青、オレンジ、緑、黒に領域が分かれそうだと最初にわかるので。)し、次に種子点をランダムに配置する際の種子数を決めます。計算の過程やクラスの分割を最適化していくにあたり、誤差を追って行く場合は、Point optimization traceにチェックを入れておきます。
実行後のログから、何色がクラスタリングされたのかわかります。RGBカラーは、こちらのサイトで確認できます。(http://mementoo.info/archives/594)
まず、プラグインのk-means Configrationダイアログのクラスターの数を設定(ここでは"4":見た目で、青、オレンジ、緑、黒に領域が分かれそうだと最初にわかるので。)し、次に種子点をランダムに配置する際の種子数を決めます。計算の過程やクラスの分割を最適化していくにあたり、誤差を追って行く場合は、Point optimization traceにチェックを入れておきます。
実行後のログから、何色がクラスタリングされたのかわかります。RGBカラーは、こちらのサイトで確認できます。(http://mementoo.info/archives/594)
このように、処理画像を変えてやってみるといいかもしれません。単純X線写真、アンギオ画像、CT、MRI、PET、SPECT、エコー画像など、自分でクラス数を予想しながら、修正しつつ、クラスタリングしてみると、画像の特徴から、所見の内部構造分類などが可能になります。
今回はImageJを用いた判別分析法とクラスタリングについて説明を行いました!
次回は少し臨床的な画像解析手法について説明します!
Reference
- 「山本修司:ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(23・4) 2008, p92-94」
0 件のコメント:
コメントを投稿