KinectFusion: Real-Time Dense Surface Mapping and Tracking |
2017-04-29 - 2018-10-03 (update) |
|
|
*Kinect Fusion とは
3次元センサを利用するタイプのSLAM(Simultaneous Localization And Mapping)の1つです.SLAMとは,センサの位置姿勢とシーンの構造を同時に推定する技術です.この技術によって,インタラクティブな映像表現やUIを実現できるようになります.なお,Kinect Fusionのアルゴリズムは,Kinect以外の3次元センサを使っても動かすことができます.
Kinect Fusionの論文[1]の筆者が公開しているデモ動画です.
[youtube:quGhaggn3cQ]
{{small:[1]R. Newcombe, S. Izadi, O. Hilliges, D. Molyneaux, D. Kim, A. Davison, P. Kohli, J. Shotton, S. Hodges, A. Fitzgibbon, "KinectFusion: Real-Time Dense Surface Mapping and Tracking", EEE International Symposium Mixed and Augmented Reality (ISMAR), 2011}}
{{small:[link:https://www.doc.ic.ac.uk/~ajd/Publications/newcombe_etal_ismar2011.pdf] }}
*サンプルコード (C++)
ライブラリ:[link:simplesp]
サンプルコード①:simplesp/sample/xx/kinectfusion
RealSenseを使って,Kinect Fusionを動かします.
現時点(2017/04)では,実装の完成度の関係で小規模なマップしか構築できません.
[link:librealsense 使い方]を参考に,まずはRealSenseを動かす準備が必要です.
サンプルコード②:simplesp/sample/gl/kinectfusion
シミュレーションにより作成した画像を使って,Kinect Fusionを動かします.
*アルゴリズム
ここではKinect Fusionのアルゴリズムを説明します.図1はシステム全体像を表すブロック図です.
[img:7rnm]
{{small:図1 Kinect Fusionのシステム}}
**Input
3次元センサが出力する距離画像です.各画素値はセンサからの距離を表します.ここで,時刻kで取得した距離画像を{$R_k$}とします.
**Measurement
距離画像の各画素値について,3次元座標と面の法線方向を算出します.法線方向は近傍の画素の距離値を参考に算出します.算出した3次元座標と面の法線方向を{$V_k$},{$N_k$}とします.
**Pose Estimation
ICPによって,センサの位置姿勢を推定します.ICPで比較するデータは時刻kで算出した{$V_k$},{$N_k$}と,過去の時刻k-1の情報を元に生成した{$\hat{V}_{k-1}$},{$\hat{N}_{k-1}$}です.
**Update Reconstruction
時刻kで取得した距離画像をもとにシーンの構造(マップ)を更新します.Kinect FusionではTSDF(Truncated Signed Distance Function)と呼ばれるボクセルに似たデータ構造でマップを表現します.ボクセルは2値で格子状に物体の有無を表現するのに対し,TSDFでは多値で物体の有無の度合い※を表現します.この表現方法によりシーンの構造を高精度に表現できるようにします.
{{small:※厳密には符号付距離場と言って近傍にある物体面との距離を多値で表現しています.}}
**Surface Prediction
次の時刻でPose Estimationを行うために,マップからICP用の3次元座標と面の法線方向を生成します.そのデータは{$V_k$},{$N_k$}と同じ2次元のマップとして出力します.
>> ご意見・ご質問など お気軽にご連絡ください.info