openCVでemアルゴリズム〜共変動行列のタイプ編〜

初回のメモで省いたparamsの初期化において,

params.cov_mat_type = CvEM::COV_MAT_SPHERICAL;


がある.これは処理に用いる共変動行列(分散共分散行列)のタイプの指定で,以下の3つがある.

初期値について特に知識を持たなければSPHERICALを使い,時間があれば第二ステップでDIAGONALを用いると精度が上がるらしい.GENERICトットちゃん志向…いや,玄人志向で,ある程度初期値がわかっているか,サンプル数が多い時以外はお勧めできないとリファレンスには書いてある.
実際にいろんな組み合わせで試してみた.
SPHERICAL⇒DIAGONICは結構いい感じ.SPHERICALだけだと単位行列で味気ないし,DIAGONICだけだと平均がヘン.

一方GENERICのみを用いると,共変動行列はSPHERICAL⇒DIAGONICに似ていて良い.ただ重みがヘン.結構ヘン.そこで全部載せしてSPHERICAL⇒DIAGONIC⇒GENERICとすると重みも落ち着いて,全体的に良くなった.今のところこれが最強コンボだが,今後実際に前景抽出やmatlabとの比較で探る必要がありそう