记录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
主要参考官方文档
文章参考:
有几个坑,需要注意:
- 官方文档第四行有一句:main_path='pwd',不用管行命令(直接跳过),在cmake的时候执行
cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="$main_path/vcglib"
时,把$main_path
替换成你安装vcglib
的对应路径就好。 - Eigen必须是3.2.X版本,如果按照官方文档安装貌似装的是最新版本,可以自己下载源码安装3.2.X版本。
- 在后面进行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
以上。