主成分分析(カメレオンはどこだ! テクスチャ画像の領域分割)

最大固有値とその固有ベクトルを求める方法としては、ベキ乗法(power iteration)がある。

学生時代に「第3回アルゴリズムコンテスト(’99)「カメレオンはどこだ! −テクスチャ画像の領域分割−」の宿題があり、提出したレポートの抜粋。

実験例

図1に示すclass1とclass2の画像を同一の手法で対象領域と背景領域に分割し、2値画像(黒白画像)を生成してみる。

図1 class1の画像(上)とclass2の画像(下)

多機能性をもつ手法

濃淡ヒストグラムをx軸、y軸、z軸…とおき、多次元空間中で分割面を決定し2値画像を生成する。

3次元空間中にプロットした例を図2、3に示す。

ここで、黄緑色が物体領域、青色が背景領域である(左のクラスが物体領域、右のクラスが背景領域)。

図2 平均、コントラスト、分散を軸とした3次元グラフ(class1)

図3 分散、エネルギー、エントロピーを軸とした3次元グラフ(class2)

3次元空間の場合、点群の共分散行列を次のように定義する。

(1)   \begin{eqnarray*} A=\sum \left( \begin{array}{ccc} x'^2_i & x'_iy'_i& x'_iz'_i \\ x'_iy'_i& y'^2_i& y'_iz'_i\\ x'_iz'_i& y'_iz'_i& z'^2_i\\ \end{array} \right) \end{eqnarray*}

ただし、

x'_i=x_i-\bar x
y'_i=y_i-\bar x
z'_i=z_i-\bar x

である。

この最大固有ベクトルを、\be_1 とし、この軸への投影を、

(2)   \begin{eqnarray*} u_i = (x_i~~ y_i~~ z_i) \be_1 \end{eqnarray*}

とする。
u_i にたいして 大津の閾値 の手法で閾値\thetaを決める。

すなわち、単位ベクトルeを用いると、次の判別式で2値化する事になる。

(3)   \begin{eqnarray*} (e_{11}~~e_{12}~~e_{13}) \left( \begin{array}{ccc} x_i\\ y_i\\ z_i\\ \end{array} \right)> \theta  \end{eqnarray*}

アルゴリズム設計

設計したアルゴリズムを図4に示す。

対象と背景を分割するアルゴリズム

まず、あらかじめ平均(mean)、コントラスト(contrast)、分散(variance) 、エネルギー(energy)、エントロピー(entropy)を計算しておく。

次に5×5行列に拡張した式(1)を解き、最大固有ベクトルを求め閾値を求め、2値化処理を行う。

実験結果

class1の結果のヒストグラムを図5に、class2の結果のヒストグラムを図6に示す。

図5 class1のヒストグラム

図6 class2のヒストグラム

本手法で得られたclass1とclass2の2値化結果を図7、図8に示す。

図7 class1の画像結果

図8 class2の画像結果

精度評価

得られた2つの画像の精度の評価を行う。今回は正解画像が提供されているため、正解画像と出力画像との誤り画素数を計測する。

メディアンフィルタを用いる前の精度結果を表1に示す。

表1 本手法で得られた画像の精度

画像 正解画像との画素誤り(画素) 正解画像との画素誤り
class1 6046 2.306
class2 6125 2.337

表1より本手法を適用した結果、class1、class2共に約2.3\%の精度が得られた。

次にこの結果にメディアンフィルタを用いた結果を図9、図10に示す。

また、精度結果は表2に示す。

図9 class1の画像結果

図10 class2の画像結果

表2 メディアンフィルタを用いた結果

画像 正解画像との画素誤り(画素) 正解画像との画素誤り
class1 4046 1.543
class2 5688 2.170

表2より、メディアンフィルタが最後の処理として有効であることが分かる。

ソース

以下に作成したソース(必要であろうと思われる箇所のみ)。

ライブラリ部分

メイン部分

タイトルとURLをコピーしました