Kinectを複数台繋いでKinect Fusionin development

 
date:2013.12.02   posted by:sakuma
 

佐久間です。

「Kinect Fusion」とは、接続したKinectで被写体を撮影する事で3Dモデルとしてのデータを作成する事が出来るという機能です。これはKinect for Windows SDKで提供されている機能であり、Windows専用の「Kinect for Windows」でのみ使用可能な機能となります。

Kinect Fusion自体はSDK 1.7から使えるようになっていたものですが、1.7の時はスライムが人間に擬態したようなモデルしか作れず、正直オマケ程度の機能・・・という印象でした。ところが最新版のSDK1.8からは、モデル取得の精度も速度も大幅に改善され、一気に実用的な機能になりました。また1.8からモデルデータだけではなくカラー情報まで取得できるようになり、ちょっとした3Dスキャナとして十分使用に耐えうるスペックになっています。

海外の事例ですが、Kinect Fusionで作成したモデルデータを3Dプリンタで出力してくれるサービスまで登場しています。

前述のカラー情報取得の他にも、Fusion関連でSDK1.8から追加された機能に「複数台のKinectを使用したKinect Fusionでの情報取得」があります。通常Kinect1台でのFusionの場合、Kinectまたは被写体を360度回転させて撮影するのですが、Kinect複数台同時に使用する事でKinectや被写体を回転させずとも全面モデルを作成する事が可能になります。

この複数Kinectを使用してのFusionについて調査した結果をまとめましたので、参考になれば幸いです。

まず、以下が通常のKinect1台使用で作成できるモデルです。

少しゴミは入りますが、少し整えればそのまま3Dプリンターで出力できるくらいの精度は出ています。

そして以下がKinectを2台接続して作成したモデルです。対面に2台設置し中央に被写体を置いた形で撮影しています。

うーん・・・

横から見た図です。

間に州が入ってしまっています。

理論的には2台使用すれば180度×2で全面をカバーできるのですが、実際にはそう上手くはいかないようで、全面をカバーするには3~4台は最低必要そうだなという感触です。またKinectの位置合わせも相当シビアで、正確なモデルを取ろうとするとミリ単位での調整が必要になります。

結論としては、現状では単体KinectでのFusionの方が明らかに精度が上です。マルチキネクト無念・・・

何故こうなるかという理由については公式のドキュメントにも記載がありますが、Fusionは複数の角度から取得した深度データを点群データ(Point Cloud)として保存し、それに補正をかけることで3Dモデルを作成するアルゴリズムになっているため(こちらの説明が分かりやすかったです)、出来るだけ多くの角度からのデータをサンプリングしてあげた方が正確なデータを作成できるのです。

アルゴリズム的には複数Kinectの場合でも回転しながら撮影すれば精度の向上が期待できますが、その場合、複数台設置するメリットが全く無いので採用する理由がないですね・・・位置合わせもメチャシビアなので・・・

よってKinectを被写体の周囲に回転させるか、もしくは被写体自体を回転させて撮影するのが現状のベストプラクティスのようです。

実際に正確なモデルを撮影しようとするなら、Kinectを固定して被写体をターンテーブルの上に載せて回転させながら撮影する方法や、こちらのようにカメラ自体が一周するようなセットを作成するかになるかと思います。

また、もう一つ重要なファクターとして被写体とカメラの距離があります。
以下の画像は、左はKinectから70センチの距離、右が170センチの距離から撮影したモデルになります。

右のモデルの方が明らかに凸凹しているのが分かります。やはり出来るだけ近い距離から撮影した方が精度の高いモデルが作成できるのですが、人物を撮影する場合、カメラから150~200センチほどは離れないと全身が入らないので悩ましいところです。

近々登場する予定の新Kinectでは深度センサーの解像度もアップするとの事で、Fusionについても更なる精度の向上を期待したいところです。

 
Copyright © TheDesignium inc. powered by WordPress & mootools.
Relative Keyword|none