読者です 読者をやめる 読者になる 読者になる

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

NyARToolkit/2.4.0のリリースについて

NyARToolkit/2.4.0が完成しました。

JavaC#はリリース済です。
C++については、Alchemyバインドを修正後のリリースとなりますが、それ以外はSubversionのRev309からダウンロード可能です。

http://sourceforge.jp/projects/nyartoolkit/


今回アップデートでは、アルゴリズムレベルでの高速化を行いました。1フレーム辺りの画処理時間が約1.5倍、1マーカ辺りの座標変換速度が約10倍に高速化しています。

高速化手法

高速化手法の紹介です。

ラベリング方式の変更

画像処理部で、ARToolKit由来のラベリングから、自前で実装したRLEラベリングへの切り替えを行いました。ベンチマーク用の画像では、概ね1.5倍の高速化が確認できています。ARToolKitのラベリング機能では不可能だった、画像端1ドットのラベリングもできるようになりました。

並進ベクトル計算器の最適化・高度化

座標変換行列計算処理で、並進ベクトル計算器を、ARToolKitの本を参考に実装しなおしました。逆行列を使用した解法を使わないので、4頂点以上の入力が受け付けられます。元々負荷が少ないのでパフォーマンスにはあまり影響を及ぼしませんが、高速化しています。

偏微分フィッティング

座標変換行列計算処理で、行列最適化処理を、自前で実装したZXY系の偏微分フィッティング処理に置き換えました。処理速度が10倍程度高速化しています(2.3.0系比)。処理方式の変更により、N個の頂点から最適化問題を解くことが出来るようになりました。また、精度も向上しています。(してるはず…)

ARToolKitもN個の頂点から最適化問題解けましたが、NyARToolKitで一度4個に絞った経緯があります。



全体では、ARToolKit/2.72.1系と比較して、4倍程度の速度が達成できています。(同一言語で比較した場合)ARToolkit/2.72.1を1倍とすると、Java版で2倍、C#版で1.0倍、C++版で4倍くらいの処理速度になります。

座標変換行列計算処理の高速化具合が大きいので、特にマルチマーカを使用した場合に、さらに大きな速度向上が期待できます。