NyARToolkit NyARTransMatC言語版
Copyright (C)2008 A虎＠nyatla.jp

version 0.39.3

http://nyatla.jp/nyartoolkit/
airmail(at)ebony.plala.or.jp
--------------------------------------------------


このモジュールは、NyARToolkitに搭載されているNyARTtansMat関数を
C言語で使えるように移植したものです。

NyARTtansMatはオリジナルのarGetTransMat関数と引数・演算互換性のある、
約3倍の演算性能のある変換行列計算関数です。

簡単な差し替え作業で、ARToolkitプログラムの高速化が期待できます。
(シャア専用ではありませんので、何方でもご利用頂けます)


○使い方

A.インストール
  1.ARToolKitのARToolKit\lib\SRC\ARディレクトリに、nyar_NyARTransMat.cをコピーする。
  2.ARToolKitのARToolKit\include\ARディレクトリに、nyar_NyARTransMat.hをコピーする。
  3.VCのプロジェクトに、nyar_NyARTransMat.cを追加する。

B.差し替え
  1.nyar_NyARTransMatを使う.cファイル(main.cとか)に、nyar_NyARTransMat.hをインクルードする。
  2.arInitCparam直後に、nyar_NyARTransMat_O2_create関数コールを加える。
    引数には、arInitCparamに渡したものと同じARParam構造体を渡す。
  3.arGetTransMatをコールしているところを、nyar_NyARTransMat_O2_transMatに置き換える。
    関数の1番目の引数は、nyar_NyARTransMat_O2_createで作ったインスタンスを指定する。
  4.プログラム終了前に、nyar_NyARTransMat_O2_free関数を呼びだす。
    関数の1番目の引数は、nyar_NyARTransMat_O2_createで作ったインスタンスを指定する。

うまく差し替えができれば、1マーカー当りのTransmat演算が3倍高速化されます。


○実装例
 #include <AR/config.h>
 #include <AR/video.h>
 #include <AR/param.h>			// arParamDisp()
 #include <AR/ar.h>
 #include <AR/gsub_lite.h>
 #include "AR/nyar_NyARTransMat.h"  ←追加
 :
 nyar_NyARTransMat_O2_t* gnya;←追加
 :
 arParamChangeSize(&p,320,240,&p2);
 arInitCparam(&p2);
 gnya=nyar_NyARTransMat_O2_create(&p2); ←追加
 :
 nyar_NyARTransMat_O2_transMat(nya,&(marker_info[0]), gPatt_centre, gPatt_width, gPatt_trans);←追加
 //arGetTransMat(&(marker_info[0]), gPatt_centre, gPatt_width, gPatt_trans);←削除
 :
 nyar_NyARTransMat_O2_free(nya);←追加

 組み込み例は、sample.cを見てください。（このサンプルは組み込み例であり、動きません）



○おまけ

NyARTransMatの高速化は、主に計算テーブルの使用と、ループの省略
によるものです。

ARToolkitの理論を学ぶ目的には向きませんので、その場合は本家ARToolkit
のソースを読むことをお勧めします。

Transmat演算は、1マーカー当りARToolkitの約50％の負荷を生み出します。
この演算はマーカー1個に対して1回行われるため、マーカーの数が
1個なら50％、２個なら66％、３個なら75％、４個なら87％の負荷が、
この演算から発生することになります。

NyARTransMatはこの負荷を1/3にするので、1個のマーカーを処理する
分には30%程度の速度向上しかありませんが、10個、20個とマーカー
数が増えたときに、最大300％の速度向上を見込むことが出来ます。


実験環境では、オリジナルはマーカー同時認識数13個で60fpsを維持
できなくなりましたが、NyARToolkitは同時認識数35個まで60fpsを
維持することが出来ました。




ご質問・ご感想は、blog又はメールにてお願いします。

2008.05.26 A虎＠nyatla.jp