元派遣プログラマの自称技術系ブログです。雑記とか自作のオープンソースプロジェクトの話とか。
Javaとか組込とかできます。お仕事ください。

ARisさんのマーカー認識

電脳フィギュア ARisのキューブ探索アルゴリズムを考える。 | タロタローグ ブログ
太郎さんが頑張っていますねー。

なにやら認識率が悪いとのことですが、多分、マーカーの正規化のところじゃないかな?と。

ARToolkitのマーカー認識は、正規化されたマーカーの内側の中から、64×64の点をサンプリングして、そこから16x16の評価パターンを作って評価する仕組みになってる。

問題なのは、ARToolkitの場合、評価対象になるマーカーの正規化部分が、1:2:1比率の内側になってるので、ARisさんのマーカーを使うと、真ん中部分しか判定の対象にならないこと。
(白部分をサンプリングして評価パターンを作ってる。)
参考:工学ナビの中の人の研究と周辺 20080917


この比率は、NyARColorPatt_O3クラスの(FLARToolkitだとFLARColorPatt_O3かな?)のupdateExtpat関数の、xwとywの辺りを変えればいじれる。(計算式はちゃんと解析して無いから、具体的な数値はわかりません。ごめんなさい)

		double xw;
		for (i = 0; i < i_xdiv2; i++) {
			xw = 102.5 + 5.0 * ((double) i + 0.5) / i_xdiv2;
			para20_xw[i] = para20 * xw;
			para00_xw[i] = para00 * xw;
			para10_xw[i] = para10 * xw;
		}

		int index_num;
		//ピクセルリーダーを取得
		INyARRgbPixelReader reader=image.getRgbPixelReader();
		
		for (j = 0; j < i_ydiv2; j++) {
			yw = 102.5 + 5.0 * ((double) j + 0.5) / i_ydiv2;
			para21_x_yw = para21 * yw + 1.0;
			para11_x_yw = para11 * yw + para12;
			para01_x_yw = para01 * yw + para02;
			extpat_j = L_extpat[j / ydiv];
			index_num = 0;

これをやれば、マーカーの内側の枠ギリギリまでのエリアを判定エリアに出来て、精度自体は格段に上がる…とおもわれます。

ちなみに、マーカーファイルもこの比率で作り直さないといけないので、結構めんどくさいです。

正規化部分の面積さえあわせれば、アレだけ違うパターンなら結構いい数字出る・・・んじゃないかな。

追記

今数えてみたけど、ARisさんのマーカーも解像度16x16っぽいですね。枠の比率あわせれば、いける予感。

さらに追記

ちゃんと確認してないので、嘘ついてる可能性があります。後日検証しますので、しばらくの間はあまり信用しないで下さい。