简要记录一下colmap+openMVS稠密重建相关使用
openMVS的sample使用
- 测试数据集下载
链接:https://pan.baidu.com/s/13T04aKJ2OB6_RX7IMMGhpg 提取码:oxkp - 运行测试
将data放在OPENMVS/路径下。
cd ~/Documents/OPENMVS/openMVS/openMVS_build
# 稠密重建及可视化
./bin/DensifyPointCloud -w ../../data/ -i scene.mvs -o test_dense.mvs
# 网格重建及可视化
./bin/ReconstructMesh -w /home/juling/Documents/OPENMVS/demo/ -i demo_dense.mvs -o demo_mesh.mvs
./bin/Viewer ../../demo/demo_mesh.mvs
# 网格优化
./bin/RefineMesh -w /home/juling/Documents/OPENMVS/demo/ -i demo_mesh.mvs -o demo_refinemesh.mvs
./bin/Viewer ../../demo/demo_refinemesh.mvs
# 纹理贴图
./bin/TextureMesh -w /home/juling/Documents/OPENMVS/demo/ -i demo_refinemesh.mvs -o demo_texture.mvs
./bin/Viewer ../../demo/demo_texture.mvs
生成的稠密点云结果如下所示:
纹理贴图结果如下所示:
colmap稀疏重建导出SFM参数
windows下的稠密重建教程:colmap稠密三维重建
colmap进行稀疏重建主要有以下几个步骤:
- 项目文件夹下包括images文件夹、sparse文件夹、dense文件夹
- 新建项目、db文件、选择images文件夹
- Feature extraction:其中默认相机模型为SIMPLE_RADIAL,修改成PINHOLE,openMVS只支持PINHOLE模型。
- Feature matching:默认
- Start Reconstuction:进行稀疏重建
- 导出txt文件:File→Export model as txt→选择sparse文件夹,可以看到sparse文件夹下有cameras.txt、images.txt、points3D.txt这三个文件,即为所需的位姿参数。
稀疏重建结束,可以看到SFM的结果如下:
注:我使用SIMPLE_RADIAL相机模型导出了cameras.txt,在cameras.txt中将所有SIMPLE_RADIAL直接修改为PINHOLE后保存,再使用openMVS重建,得到的效果非常奇怪,最后重新跑了一遍稀疏重建,相机模型选择PINHOLE,得到的重建结果正常。
openMVS稠密重建
- 将colmap位姿转换成openMVS格式
-
项目目录结构:
-
openMVS/openMVS_build/bin,有InterfaceCOLMAP接口。
-
box文件夹下有images和sparse两个文件夹,其中images为图片,sparse下为SFM生成的3个txt文件。
-
cd openMVS/openMVS_build
-
./bin/InterfaceCOLMAP -i /home/juling/Documents/OPENMVS/box -o box.mvs
-
-i 是包含images和sparse文件夹的目录。
-
-o 是生成.mvs文件保存的路径。
-o box.mvs
表示在openMVS_build目录下生成box.mvs。
注:生成.mvs文件的路径貌似不能设置保存到自定义路径,设置保存到自定义路径是可以保存成功的,但在进行稠密点云重建时会出现路径错误,无法读取图片。所以默认设置
-o box.mvs
在openMVS_build目录下生成box.mvs,然后将这个文件复制到box下使用,就不会出现稠密重建读不到图像的问题。
- openMVS稠密重建
cd ~/Documents/OPENMVS/openMVS/openMVS_build
- 稠密重建:
./bin/DensifyPointCloud -w ../../box/ -i box.mvs -o box_dense.mvs
,会在box目录下生成深度图、box_dense.mvs、box_dense.ply文件。查看稠密重建的结果可用MeshLab打开ply文件,也可使用openMVS提供的Viewer接口查看./bin/Viewer ../../box/box_dense.mvs
。 - 曲面重建:
./bin/ReconstructMesh -w ../../box/ -i box.mvs -o box_mesh.mvs
生成box_mesh.mvs以及box_mesh.ply。
注:继续进行网格优化时出现报错,发现是相对路径的问题,在运行时-w输入绝对路径即可。
cd ~/Documents/OPENMVS/openMVS/openMVS_build
# 转换mvs格式
./bin/InterfaceCOLMAP -w /home/juling/Documents/OPENMVS/underwater/ -i /home/juling/Documents/OPENMVS/underwater/ -o underwater.mvs
# 稠密建图
./bin/DensifyPointCloud -w /home/juling/Documents/OPENMVS/underwater/ -i underwater.mvs -o underwater_dense.mvs
# 网格重建
./bin/ReconstructMesh -w /home/juling/Documents/OPENMVS/underwater/ -i underwater_dense.mvs -o underwater_mesh.mvs
# 网格优化
./bin/RefineMesh -w /home/juling/Documents/OPENMVS/underwater/ -i underwater_mesh.mvs -o underwater_refinemesh.mvs
# 纹理贴图
./bin/TextureMesh -w /home/juling/Documents/OPENMVS/underwater/ -i underwater_refinemesh.mvs -o underwater_texture.mvs
稠密重建结果如下:
参考:
[1] MVS三维重建概述与OpenMVS开源框架配置