open3d重建工作+复现Choi2015
前言
最近使用open3d实现了对Choi_cvpr2015中工作的复现,参考的pipeline为基于open3d的室内重建
本文记录了复现过程和出现的问题。
1. 软件要求及安装
1.1 软件版本
软件版本要求如下:
ubuntu18.04+
python 3.6/3.7/3.8
open3d-0.12.0(低版本行不行没有试过)
我使用的python3.6为ubuntu自带,ubuntu版本为18.04,open3d版本为0.12.0。
强烈建议使用open3d-0.12.0,我出的主要问题在于第一次使用open3d-0.11.2版本报错,后面细说。
1.2 open3d-0.12.0的安装
open3d-0.12.0推荐使用官网open3d的安装包,链接图片如下,可以根据自己的系统和python版本选择(可能官网里的链接会出错,我在文末把安装包上传到百度网盘了):
之所以选择官网下载,是因为使用如下命令会默认安装open3d-0.11.2版本,会为复现带来很多麻烦。
pip3 install open3d
下载完open3d安装包后,开始安装:
1.2.1 配置pip国内源
首先配置pip的国内源,加快open3d一些依赖项的安装速度。
sudo gedit ~/.pip/pip.conf
在~/.pip/pip.conf文件中输入:
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
具体参考博客pip更换国内源。
1.2.2 安装
在open3d安装包的位置打开终端,输入
pip3 install open3d-0.12.0+6aeebf1-cp36-cp36m-linux_x86_64.whl
等待…
安装完成后,输入如下代码测试open3d是否安装成功。
python -c "import open3d as o3d"
2.运行过程
代码从这里下载:open3d重建-代码链接。
数据集准备
有很多网上的RGBD数据集:the SceneNN dataset 、 Redwood data等等。
我们需要RGB图像数据集和对应深度图像数据集。将RGB数据集和深度图数据集分别放置于如下文件夹:examples/python/reconstruction_system/dataset/tutorial/image和examples/python/reconstruction_system/dataset/tutorial/depth
2.1 make fragments
第一步:从RGBD图像数据集生成一些点云片段(这里是14个)。
在代码根目录打开终端,运行如下命令:
cd examples/python/reconstruction_system/
python3 run_system.py config/tutorial.json --make
运行结果存储在examples/python/reconstruction_system/dataset/tutorial/fragments,包含一系列.ply点云文件和.json文件。
每一个.json文件存储了100个节点从首到尾两两之间的information6 * 6特征信息矩阵、100个节点从首到尾两两之间的transformation4 * 4转换矩阵、100个节点的4 * 4位姿矩阵。
最后一个.json文件存储的节点数是64个,矩阵数对应。
2.2 register
第二步:对齐这些点云片段。
在代码根目录打开终端,运行如下命令:
cd examples/python/reconstruction_system/
python3 run_system.py config/tutorial.json --register
运行结果存储在examples/python/reconstruction_system/dataset/tutorial/scene,包含两个.json文件:global_registration_optimized.json和global_registration.json.
每一个.json文件存储了被对齐的点云片段两两之间的information6 * 6特征信息矩阵、被对齐的点云片段两两之间的的transformation4 * 4转换矩阵、14个点云片段的4 * 4位姿矩阵。
(不是任意两个点云片段都能够对齐,即产生回环约束)
global_registration_optimized.json的点云片段的4 * 4位姿矩阵得到了优化,仅此和global_registration.json不同。
2.3 refine register
第三步:在上一步对齐基础上,进一步 更高精度地对齐点云。
在代码根目录打开终端,运行如下命令:
cd examples/python/reconstruction_system/
python3 run_system.py config/tutorial.json --refine
运行结果存储在examples/python/reconstruction_system/dataset/tutorial/scene,同样包含两个.json文件:refine_registration_optimized.json和refine_registration.json
每一个.json文件存储了被对齐的点云片段两两之间的information6 * 6特征信息矩阵、被对齐的点云片段两两之间的的transformation4 * 4转换矩阵、14个点云片段的4 * 4位姿矩阵。
(2.3refine 中被对齐的点云片段对 真包含于(真子集) 2.2register中 被对齐的点云片段对 )
refine_registration_optimized.json和refine_registration.json的不同在于:前者的点云片段的4 * 4位姿矩阵得到了优化。
refine_registration_optimized.json和global_registration.json的4 * 4位姿矩阵不同。
2.4 integrate scene
第四步:得到整个室内完整点云图,重建室内环境。
在代码根目录打开终端,运行如下命令:
cd examples/python/reconstruction_system/
python3 run_system.py config/tutorial.json --integrate
运行结果存储在examples/python/reconstruction_system/dataset/tutorial/scene,包含一个完整的.ply点云文件和trajectory.log相机关键帧轨迹。
最后的点云图如下:
3.出现的问题
1、问题主要出现在2.2步,报错时open3d版本为0.11.2,报错如下:
具体报错是:open3d.pipelines.registration.RANSACConvergenceCriteria()的参数使用错误。
在确保复现的代码无误的情况下,卸载open3d-0.11.2,按照1.2的步骤安装了open3d-0.12.0,错误消失。
2、期间一度对joblib/parallel.py的报错感兴趣,经过对代码逐行调试,打消对joblib/parallel.py的怀疑,认定是open3d的版本问题。
4. open3d_0.12安装包
链接: https://pan.baidu.com/s/1PZLoPQh76Ly8-M12E9p1MA
提取码: h2vv