ubuntu16.04+openMVG+openMVS实现三维重建
简介
常用三维重建系统总结网址来自:http://leohope.com/解问题/2018/03/06/compare-re3d-system/
如图所示:
openMVG与openMVS的好处是开源、稳定、有官方说明文档,且两者互补,共同构建了一套完整的三维重建系统。
openMVG
编译
Github地址:https://github.com/openMVG/openMVG/blob/master/BUILD.md
注:
- 此过程注意相关路径即可,不必在意文档中的make test,编译过程无报错即可。
- 编译成功后安装时要加sudo,即sudo make install
openMVS
编译
Github地址:https://github.com/cdcseacave/openMVS/wiki/Building
此处必须安装几个如图所示必要的库,且Eigen的版本一定是3.2的版本。
注:
- 我在编译安装openMVS的时候,即执行make && sudo make install 的时候,出现了cmake版本不匹配的问题,自己的版本是3.5,而要求是3.8,此时,不要卸载自己的版本,再安装一个新版本即可,可参考链接:https://blog.csdn.net/qq_34935373/article/details/90266958
openMVG+openMVS实现三维重建demo
理解:
从简介里那张图可以看出openMVG实现的功能是將二维图像转换为point cloud 和 dense cloud,而openMVS则是將点云重建为surface和textured。
Github:https://github.com/cdcseacave/openMVS/wiki/Usage
Github:https://openmvg.readthedocs.io/en/latest/software/SfM/SfM/
第一步(openMVG):
- 找到tutorial_demo.py文件,同级目录下执行 $ python tutorial_demo.py 此处留下我自己的路径方便大家参考/home/x/catkin_ws/src/openMVG/openMVG_Build/software/SfM/tutorial_demo.py
- 此时目录下新出现两个文件夹,ImageDataset_SceauxCastle和tutorial_out,前者是由tutorial_demo.py文件运行后下载的此demo所需要的输入图片数据,后者是由openMVG经reconstruction_global和reconstruction_sequential这两种方式产生的输出数据。
- 我们以reconstruction_global为例。
在tutorial_out/reconstruction_global/目录下找到 sfm_data.bin,这就是我们此demo所需要的最重要的一个文件。因为我们即将对它进行一系列的处理并可视化每一步的结果。
注:此时openMVG的任务完成,产生了sfm_data.bin文件。
第二步(openMVS):
- 將openMVG产生的sfm_data.bin文件copy到openMVS/build/bin/目录下,此目录下有众多openMVS的可执行文件。
- 此目录下终端执行$ openMVG_main_openMVG2openMVS -i sfm_data.bin -o scene.mvs 产生了可可视化的scene.mvs文件,即將openMVG产生的数据转换成了openMVS可操作的数据类型。
- 执行$ ./Viewer scene.mvs 稀疏特征点云图
- 执行$ ./DensifyPointCloud sence.mvs 得到如下文件:
执行$ ./Viewer scene_dense.mvs 得到稠密点云图: - 同理,建立粗网格:$ ./ReconstructMesh scene_dense.mvs ,产生了scene_dense_mesh.mvs
可视化粗网格:$ ./Viewer scene_dense_mesh.mvs - 建立精致网格:$ ./RefineMesh scene_mesh.mvs
- 建立混合网格: $ ./TextureMesh scene_dense_mesh.mvs
都可得到对应的.mvs文件,再使用Viewer查看即可。第7步得到的是最终的三维重建图,如下:
注:每一步产生的.ply文件,如scene_dense.ply,也可以用Viewer打开,只是少了图中的网色网格线。