三维重建系统搭建-openMVG和openMVS

记录openMVG,openMVS的编译,使用流程。

三维重建流程

三维重建的流程大致如下:首先,通过多角度拍摄或者从视频中提取得到一组图像序列,将这些图像序列作为整个系统的输入;随后,在多视角的图像中,根据纹理特征提取出稀疏特征点(称为点云),通过这些特征点估计相机位置和参数;在得到相机参数并完成特征点匹配后,我们就可以获得更稠密的点云(这些点可以附带颜色,从远处看就像还原了物体本身一样,但从近处能明显看出它们只是一些点);最后根据这些点重建物体表面,并进行纹理映射,就还原出三维场景和物体了。

概括起来就是:图像获取->特征匹配->深度估计->稀疏点云->相机参数估计->稠密点云->表面重建->纹理映射

详细见这篇文章

openMVG搭配openMVS 刚好完成从原始图像到稀疏点云、重建稠密点云、重建表面和纹理映射的流程。以下是两个开源系统的编译和使用流程。

编译

openMVG

跟着官方文档走就可以了,没有什么坑,注意依赖库的版本就行。

或者看这里:

git clone --recursive https://github.com/openMVG/openMVG.git

sudo apt-get install libpng-dev libjpeg-dev libtiff-dev libxxf86vm1 libxxf86vm-dev libxi-dev libxrandr-dev

sudo apt-get install graphviz

cd path/to/openMVG
mkdir build
cd build

cmake -DCMAKE_BUILD_TYPE=RELEASE -DOpenMVG_BUILD_TESTS=ON -DOpenMVG_BUILD_EXAMPLES=ON . ../src/

make -j12

make test

sudo make install

编译openMVS

主要参考官方文档

文章参考:

  1. OpenMVG与OpenMVS安装配置、简单使用

  2. ubuntu16.04下安装openMVG+openMVS +三维重建测试

  3. Ubuntu使用OpenMVG和OpenMVS进行三维重建

有几个坑,需要注意:

  1. 官方文档第四行有一句:main_path='pwd',不用管行命令(直接跳过),在cmake的时候执行cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="$main_path/vcglib"时,把$main_path替换成你安装vcglib的对应路径就好。
  2. Eigen必须是3.2.X版本,如果按照官方文档安装貌似装的是最新版本,可以自己下载源码安装3.2.X版本。
  3. 在后面进行MVS的测试是,需要把openMVS_build/bin的文件复制到linux下面/user/bin文件夹里面;才能运行MVS重建命令。

使用流程

openMVG的sfM用例

官方文档

比如我的流程是:

openMVG_main_SfMInit_ImageListing -d ~/3d-reco/openMVG/src/openMVG/exif/sensor_width_database/sensor_width_camera_database.txt -i ~/datasets/ImageDataset_SceauxCastle-master/images -o ~/datasets/ImageDataset_SceauxCastle-master/matches/

openMVG_main_ComputeFeatures -i ~/datasets/ImageDataset_SceauxCastle-master/matches/sfm_data.json -o ~/datasets/ImageDataset_SceauxCastle-master/matches/

openMVG_main_ComputeMatches -n ANNL2 -f 1 -i ~/datasets/ImageDataset_SceauxCastle-master/matches/sfm_data.json -o ~/datasets/ImageDataset_SceauxCastle-master/matches/

openMVG_main_GlobalSfM -i ~/datasets/ImageDataset_SceauxCastle-master/matches/sfm_data.json -m ~/datasets/ImageDataset_SceauxCastle-master/matches/ -o ~/datasets/ImageDataset_SceauxCastle-master/outReconstruction/

openMVG_main_ComputeMatches步骤时我遇到invalid match files的错误,通过更换matching的方法,即使用指令openMVG_main_ComputeMatches -n ANNL2 -f 1就可以执行下面的重建步骤。

另外,若使用openMVG_main_GlobalSfM,可能也会遇到invalid match files的问题,这是因为上一步骤可能生成的是matches.f.bin,而openMVG_main_GlobalSfM需要的是matches.e.bin,这时将matches.f.bin重命名为matches.e.bin即可。

openMVS流程

官方文档

我的流程:

sudo openMVG_main_openMVG2openMVS -i ~/datasets/ImageDataset_SceauxCastle-master/reconstruction_global/robust.bin -o ~/datasets/ImageDataset_SceauxCastle-master/reconstruction_global/global_scene.mvs

DensifyPointCloud global_scene.mvs 

ReconstructMesh -d 4 global_scene_dense.mvs

RefineMesh --resolution-level=4 global_scene_dense_mesh.mvs

TextureMesh global_scene_dense_mesh_refine.mvs

以上。

updatedupdated2019-12-282019-12-28