ARシステムの開発(CV・CG・計算幾何学)

最近ARシステムの開発をしています。果たして、修論に繋がるんだか繋がらないんだか、何とも困ったものではあるのですが、趣味としては楽しいですね。

ARといえば、イマドキはUnityを使っちゃうようなハイレベルなフレームワークがいくつも出てきているし、オープンソースでも(FL|Ny)ARToolkitのようなライブラリもあるわけですが、今回は、OpenCVとOpenGLでマーカー認識から位置合わせ、CG描画まで自力で車輪を再発明することにしました。とりあえず、この3週間ほどで、苦節の末、ARっぽく表示することが出来るようになりました。

f:id:s-shin:20130831162623p:plain

まだ色々と課題がある*1ので、しばらくは改良が必要となりますが、コードはいずれGithubにでも上げるかと思います。ちなみに、全部Pythonで書いた*2ので、よく見られるOpenCV 1.x系のC言語ソースコードよりは相当見通しが良くなっています。

実の所、コンピュータビジョン(CV)は全くの専門外で、OpenCVも今回初めて触ったのですが、このARシステムの開発を通じて、CVに全体に関する理解が少し深まったかなと思ってます*3。また、わりと時間を食ったのが、いわゆる計算幾何学*4の領域で解決されているアルゴリズムの問題です。例えば、マーカー領域を抽出したり、向きを調べたり、位置合わせをする時に、配列内の頂点の並びに非常に気を使う必要があります。その際、ある頂点同士を結んだ時、線分が交差しているだとか、頂点の並びが時計回りか、などをチェックする必要が生じます。一見、単純なベクトルの計算でチェックできそうだなぁ、とか思うのですが、これが中々簡単では無いのですね。そこで出てくるのが計算幾何学で、こういった問題に対して、少ない計算量の良いアルゴリズムが様々研究されているわけです。

ということで、今回の開発で得た色々な情報は、こういったCVや計算幾何学などの科学的な話も含めて、このブログにちょこちょことメモしていきたいと思っています、という所信表明でした。

*1:特にマーカー解析部分の速度が遅い、普通のARマーカーにも対応してみようか、画像型マーカー(SURF等の特徴点を利用したマーカー認識)にも対応するか、など。

*2:OpenCV 2.4、PyOpenGL

*3:最初はOpenCVもどっから取り掛かったものか検討もつきませんでしたが、大分どんなことがどうすれば実現できるのかが分かってきたような気がします。

*4:Computational Geometory。日本語だと計算機科学(Computer Science)と発音が同じなので紛らわしいですね。