射影変換再び

以前実装した高速射影変換パラメータ計算器に不具合が見つかった。

見つけてくれたのはFLARManagerを作っているericさん。ありがたやー。

不具合の内容は、マーカが0,90,180,270度ぴったりのときに、高速射影変換パラメータ計算器がゼロ除算を起こして、パターン認識ができないとのこと。

原因を調べてみると、これは8元一次方程式の解き方の問題らしく、2.4系の頃からずっとあったらしい。気がつかなかったなぁ。ピボット操作をまともにしないで方程式を解いていたせいで、誤差蓄積の結果、計算に失敗するみたいだった。

というわけで、逆行列を使って誤差蓄積を少なくする方法に変更。でも8×8行列は重いので、4×4行列と2×2行列を組み合わせて解く方法を考えた。

理屈はこのへんにまとめたので、興味のある人は読んでみてね。
http://sourceforge.jp/projects/nyartoolkit/docs/tech_document0001/ja/2/tech_document0001.pdf

結果、パターン認識が失敗しにくくなり、小さいサイズのマーカの認識精度も向上。該当処理にかかる時間が倍になったのは残念だけど、全体への影響は1%以下なのでまあいいか。

実装はNyARToolkit2.5.2系としてリリース予定。既にtrunkにはコミット済みです。2.5.2では、ラスタ処理系の見直しや、静止画対応のサンプルなどをリリースする予定です。