ARシステムの開発(CV・CG・計算幾何学)
最近ARシステムの開発をしています。果たして、修論に繋がるんだか繋がらないんだか、何とも困ったものではあるのですが、趣味としては楽しいですね。
ARといえば、イマドキはUnityを使っちゃうようなハイレベルなフレームワークがいくつも出てきているし、オープンソースでも(FL|Ny)ARToolkitのようなライブラリもあるわけですが、今回は、OpenCVとOpenGLでマーカー認識から位置合わせ、CG描画まで自力で車輪を再発明することにしました。とりあえず、この3週間ほどで、苦節の末、ARっぽく表示することが出来るようになりました。
まだ色々と課題がある*1ので、しばらくは改良が必要となりますが、コードはいずれGithubにでも上げるかと思います。ちなみに、全部Pythonで書いた*2ので、よく見られるOpenCV 1.x系のC言語のソースコードよりは相当見通しが良くなっています。
実の所、コンピュータビジョン(CV)は全くの専門外で、OpenCVも今回初めて触ったのですが、このARシステムの開発を通じて、CVに全体に関する理解が少し深まったかなと思ってます*3。また、わりと時間を食ったのが、いわゆる計算幾何学*4の領域で解決されているアルゴリズムの問題です。例えば、マーカー領域を抽出したり、向きを調べたり、位置合わせをする時に、配列内の頂点の並びに非常に気を使う必要があります。その際、ある頂点同士を結んだ時、線分が交差しているだとか、頂点の並びが時計回りか、などをチェックする必要が生じます。一見、単純なベクトルの計算でチェックできそうだなぁ、とか思うのですが、これが中々簡単では無いのですね。そこで出てくるのが計算幾何学で、こういった問題に対して、少ない計算量の良いアルゴリズムが様々研究されているわけです。
ということで、今回の開発で得た色々な情報は、こういったCVや計算幾何学などの科学的な話も含めて、このブログにちょこちょことメモしていきたいと思っています、という所信表明でした。