https://github.com/intel-isl/Open3D
用彩色图和深度图重建三维模型,只支持针孔相机模型,不支持全景图重建。
彩色图支持jpg,png格式的32位图,深度图只能是16位png图片。
参考https://blog.csdn.net/fly_hps/article/details/106663431
安装流程参考文章一https://blog.csdn.net/public669/article/details/99044895
。其中,在make阶段出现一些问题本文没有提,如果有问题详细可参考文章二https://blog.csdn.net/weixin_41896508/article/details/80795239
罗列的方法解决。
针对文章二补充:
1)问题一中:下载ippicv_linux_20151201.tgz,如果打不开文中提供的链接可以去github下载https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20151201/ippicv
。下载后,文中说放在opencv-3.2.0/3rdparty/ippicv/downloads/,我的是放在opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/,比文中多了一层,不确定放在哪里可以先执行make,报错是报哪里就放在哪里。
2)解决完文中问题后在make阶段报错 “…opencv_lapack.h:2:45: fatal error: LAPACKE_H_PATH-NOTFOUND/lapacke.h:No such file…”,则执行sudo apt-get install liblapacke-dev checkinstall
,如果依然报错找不到文件,则打开出错文件opencv-3.2.0/build/opencv_lapack.h,把第2行:
#include "LAPACKE_H_PATH-NOTFOUND/lapacke.h"
去掉 LAPACKE_H_PATH-NOTFOUND/ ,改成:
#include "lapacke.h"
针对文章一补充:
1)添加路径时,如果是在服务器上无法显示图形界面,把所有的gedit命令替换成vim即可。
pip install open3d -i https://pypi.douban.com/simple
#拉取open3d
git clone --recursive https://github.com/intel-isl/Open3D
#进入Open3D/文件夹中
cd Open3D
#拉子模块
git submodule update --init --recursive
#创建build文件夹
mkdir build
cd build
#在build文件夹下编译
cmake -DCMAKE_INSTALL_PREFIX=../open3d/ ..
#如果这里make有error, 比如缺少头文件,那就重新拉取子模块
make -j8
make install
#因为open3d的0.10版本安装上之后很多东西不兼容所以选择0.9版本
#如果是python2安装open3d
pip install open3d=0.9.0.0
#如果是python3安装open3d
pip3 install open3d=0.9.0.0
因为是用github的样例代码进行测试的,所以如果是pip安装的open3d,还是要把https://github.com/intel-isl/Open3D的文件clone下来
在Open3D/examples/python/ReconstructionSystem/scripts/有几个sh脚本,依次执行可以下载它的数据集,sh脚本把数据集下载在了 Open3D/examples/Python/ReconstructionSystem/dataset/,可查看一下是否下载成功。
我只有sh download_tutorial.sh
执行成功,下载了数据集tutorial,其他的失败了。
open3d官网: http://www.open3d.org/docs/release/tutorial/ReconstructionSystem/system_overview.html
页面中提供的一个样例下载链接[quicklink]: https://drive.google.com/open?id=11U8jEDYKvB5lXsK3L1rQcGTjp0YmRrzT
,数据集文件名016
。
下载后手动放在 Open3D/examples/Python/ReconstructionSystem/dataset/ 下
系统重建测试如果有报错拉到后面4看解决办法。
Open3D/examples/Python/ReconstructionSystem/dataset/tutotial
说明:tutorial中有depth和image两个文件夹,描述一个卧室场景
cd到Open3D/examples/Python/ReconstructionSystem/,
依次执行
python3 run_system.py config/tutorial.json --make
python3 run_system.py config/tutorial.json --register
python3 run_system.py config/tutorial.json --refine
python3 run_system.py config/tutorial.json --integrate
或者直接执行
python3 run_system.py config/tutorial.json --make --register --refine --integrate
保存在Open3D/examples/Python/ReconstructionSystem/dataset/tutorial/scene/下的.ply文件
效果展示:
make和register各用7分钟,一共生成了13个碎片(fragment);
refine很快;
integrate用了47分钟左右;
Open3D/examples/Python/ReconstructionSystem/dataset/016
说明:016中有depth和image两个文件夹,数据集image和depth两个文件夹各2G多,描述一个完整的房子内部;
修改Open3D/examples/Python/ReconstructionSystem/config/tutorial.json(或者复制内容重建一个json),把参数
"path_dataset": "dataset/tutorial/",
更改为
"path_dataset": "dataset/016/",
然后测试过程同上
保存在Open3D/examples/Python/ReconstructionSystem/dataset/016/scene/下的.ply文件
效果展示:
make和register各用90分钟左右,生成319个碎片;
refine很快;
integrate用了20个小时;
1) 如果要测试其他数据集,让config/下的json文件中要测试的文件名和data/下的数据集名称对应,数据集中depth和image下的图片名称和数量一一对应。
2) 在Open3D/examples/Python/ReconstructionSystem/config/tutorial.json中可能需要修改的参数
参数 | 默认值 | 说明 |
---|---|---|
path_intrinsic | 缺省 | 说明图片分辨率和相机内参的json文件的路径 |
max_depth | 3.0 | 相机拍摄的最大距离 |
min_depth | 0.3 | 相机拍摄的最小距离 |
算法默认图片分辨率为640x480,如果图片分辨率不是640x480或者要修改相机内参,需为参数path_intrinsic添加一个值:
"path_intrinsic": "dataset/myDataset/camera.json",
然后在Open3D/examples/Python/ReconstructionSystem/dataset/myDataset/ 下新建camera.json,内容形式如下(下列数据是算法默认数据):
{
"width" : 640,
"height" : 480,
"intrinsic_matrix" :
[ 512.0,
0,
0,
0,
525.0,
0,
319.5,
239.5,
1 ]
}
1) 报错AttributeError: module 'open3d' has no attribute 'pipelines'
,open3d版本更新导致的。搜索Open3D/examples/Python/ReconstructionSystem/下的所有 .py文件中出现的 o3d.piplines.xxx
的 .pipelines
删掉,改成o3d.xxx
。
2) 在1中,每一句都会有同样的错误AttributeError: 'bool' object has no attribute 'lower'
,需到相应的.py文件中修改。比如第三句–refine时报错:
Traceback (most recent call last):
File "run_system.py", line 78, in <module>
refine_registration.run(config)
File "/root/open3d/examples/Python/ReconstructionSystem/refine_registration.py", line 179, in run
make_posegraph_for_refined_scene(ply_file_names, config)
File "/root/open3d/examples/Python/ReconstructionSystem/refine_registration.py", line 137, in make_posegraph_for_refined_scene
if config["python_multi_threading"].lower() == "true":
AttributeError: 'bool' object has no attribute 'lower'
上面的错误到refine_registration.py中把
if config["python_multi_threading"].lower() == "true":
改为
if str(config["python_multi_threading"]).lower() == "true":
测试时间非常长,测试过程中cpu拉满,gpu空闲。