2014年12月09日

KinectとOpenGLで遮蔽感のあるAR

 エンターテインメントや教育さらには作業支援など様々な分野でARを用いたコンテンツを目にするようになりました。しかし、これらARコンテンツの多くはカメラ画像に重畳したCGと現実物体との位置関係を認識していないため、常にCGが前面に表示されてしまいます。そのため、実空間中の前後関係と矛盾した情報提示が行われてしまい、利用者が違和感を感じてしまうことがあります。

 一方、Kinectセンサ登場したことで以下の動画のようにカラー画像と現実物体上の点の3次元座標の集合(Point Cloud)の同時取得を安価・簡便に行えるようになりました。



そこでPoint Cloudを使用して実物体とCGとの前後関係の判定を行い、矛盾のない表示が可能なARの実現方法の概要を紹介します。

 処理手順の概略は下の図に示したとおりです。
arkinect1.png

 (i)Kinectからリアルタイムに取得したPoint Cloudと,提示したい仮想物体をVR空間に配置する.この時,glEnable(GL_DEPTH_TEST);で前後判定を有効にしておきましょう。そうすることで、3次元物体の位置関係や隠れの有無について矛盾の無い表示を得られます.

 (A)さらに、PointCloudや背景の色に特定の色を指定して仮想物体が表示されている部分以外をその色で塗りつぶした画像を作成します。ちなみにOpenGLではglReadPixelsという関数を用いれば表示されているものを画像化することが可能です。

 続いて、(B)Kinectセンサに搭載されたカメラから風景映像を取得し、(C)これらをクロマキー合成して前後関係に矛盾のないAR表示を行います。

 以上の処理を行うことで以下の動画のようにユーザーの手による遮蔽がCGの外観に反映させることができます。



 今回は遮蔽感のあるARを自力で実装するための手順について紹介しました。ですがぶっちゃけた話、metaio SDK6.0でその辺はサポートしていたりします。もっと楽をしましょう!




本記事はAR Advent Calendarに登録しました。





posted by yoshinaga at 09:59 | Comment(0) | 技術
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: