Open3DでRGB-Dデータの統合

Open3Dを使ってKinectなどから取得したRGB-Dのデータを統合し、一つの3Dモデルを生成してみる。RGB-Dデータの統合のためには、各RGB-D画像を取得したカメラの位置姿勢情報が必要となるが、今回は統合の部分だけを試してみたいので、ミュンヘン工科大学のRGB-Dデータセットを入力として使った。
RGB-D SLAM Dataset and Benchmark
https://vision.in.tum.de/data/datasets/rgbd-dataset

今回は「rgbd_dataset_freiburg3_long_office_household」をダウンロードして使ってみた。データセットには、カラー画像とデプス画像の他にそれぞれのデータが取得されたタイムスタンプと画像ファイルの対応表rgb.txt,depth.txtやカメラの位置姿勢の真値groundtruth.txtなどが含まれている。
このデータセットを使うとGround Truthの位置姿勢があるため、統合処理のみを試すことが可能になる。ただし、rgb, depth, groundtruthでそれぞれの取得タイミングが微妙に異なるので、まずは近い時刻のデータをまとめ上げる必要がある。このまとめ上げには、Datasetと一緒に公開されている、ツールを利用すると簡単にデータの準備を行うことができる。
Useful tools for the RGB-D benchmark
https://vision.in.tum.de/data/datasets/rgbd-dataset/tools

とりあえず、公開されているpython scriptをダウンロードする。この中の、associate.pyを使うことで近い時刻のデータをまとめることができる。今回は、まず、rgbとdepthのデータを統合し、その後、統合したデータとGround Truthのデータを統合することで、rgb,depth,groundtruthのデータを作成した。注意点として、ツールはPython2系で書かれているため、Python3系で利用するためには一部修正する必要がある。
python associate.py rgb.txt depth.txt > rgb_depth.txt
python associate.py rgb_depth.txt groundtruth.txt > rgb_depth_gt.txt
統合後のデータは以下のようになった。
1341847980.786856 rgb/1341847980.786856.png 1341847980.786879 depth/1341847980.786879.png 1341847980.790000 -0.6832 2.6909 1.7373 0.0003 0.8617 -0.5072 -0.0145
1341847980.822978 rgb/1341847980.822978.png 1341847980.822989 depth/1341847980.822989.png 1341847980.820100 -0.6821 2.6914 1.7371 0.0003 0.8609 -0.5085 -0.0151
1341847980.854676 rgb/1341847980.854676.png 1341847980.854690 depth/1341847980.854690.png 1341847980.850000 -0.6811 2.6918 1.7371 0.0001 0.8610 -0.5084 -0.0159
1341847980.890728 rgb/1341847980.890728.png 1341847980.890737 depth/1341847980.890737.png 1341847980.890100 -0.6797 2.6921 1.7373 0.0000 0.8610 -0.5083 -0.0162
1341847980.922978 rgb/1341847980.922978.png 1341847980.922989 depth/1341847980.922989.png 1341847980.920000 -0.6785 2.6925 1.7375 -0.0003 0.8607 -0.5088 -0.0160
1341847980.954645 rgb/1341847980.954645.png 1341847980.954676 depth/1341847980.954676.png 1341847980.950000 -0.6775 2.6928 1.7374 -0.0001 0.8607 -0.5088 -0.0166
1341847980.990699 rgb/1341847980.990699.png 1341847980.990724 depth/1341847980.990724.png 1341847980.990000 -0.6759 2.6933 1.7375 -0.0002 0.8611 -0.5082 -0.0170
1341847981.022715 rgb/1341847981.022715.png 1341847981.022728 depth/1341847981.022728.png 1341847981.020000 -0.6749 2.6938 1.7375 -0.0003 0.8609 -0.5085 -0.0170
1341847981.054711 rgb/1341847981.054711.png 1341847981.054773 depth/1341847981.054773.png 1341847981.050000 -0.6736 2.6942 1.7374 -0.0001 0.8615 -0.5075 -0.0174
データの並びは以下のようになっている。
rgbタイムスタンプ rgb画像ファイル depthタイムスタンプ depth画像 GTタイムスタンプ tx ty tz qx qy qz qw
tx,ty,tzはカメラ位置,qx,qy,qz,qwはカメラ姿勢のクウォータニオン表現となっている。

これで、カラー画像、デプス画像、カメラ位置姿勢のデータセットが出来たので、順番に読み込みながら統合していく。データの統合には以下のページにあるScalableTSDFVolumeを利用した。
RGBD integration
http://www.open3d.org/docs/release/tutorial/Advanced/rgbd_integration.html

データの読み込みの様子は以下の通り。
統合結果は、以下の通り。さすがにGround Truthのカメラ位置姿勢を利用しているので綺麗。

コメント

このブログの人気の投稿

COLMAPでキャリブレーション済みのデータを使う

5点アルゴリズムによるカメラ位置・姿勢の推定

2D-3D対応からのカメラ位置・姿勢の推定