关于OpenMVG与OpenMVS之间的关系可见下图。关于目前常用的三维重建系统的对比见网址:
http://leohope.com/%E8%A7%A3%E9%97%AE%E9%A2%98/2018/03/06/compare-re3d-system/
可见OpenMVG与OpenMVS搭配使用,可以实现一个完美的三维重建流程。
下面开始讲解两者的配置与简单使用:
参考网页:https://github.com/openMVG/openMVG/blob/master/BUILD.md
##获取源码:
git clone --recursive https://github.com/openMVG/openMVG.git
##apt 安装所需依赖:
sudo apt-get install libpng-dev libjpeg-dev libtiff-dev libxxf86vm1 libxxf86vm-
dev libxi-dev libxrandr-dev
##(可选)如果你想以图形化界面的方式看 svg 日志的话,安装 Graphviz:
sudo apt-get install graphviz
##编译 openMVG:
cd path/to/openMVG
mkdir build
cd build
##如果想顺便编译例程和单元测试模块的话
cmake -DCMAKE_BUILD_TYPE=RELEASE -DOpenMVG_BUILD_TESTS=ON -
DOpenMVG_BUILD_EXAMPLES=ON . ../src/
##否则这样:
cmake -DCMAKE_BUILD_TYPE=RELEASE . ../src/
##编译:
make -j12
##跑一下测试例程看有没有装好:
make test
##报的都是好消息的话就说明装好了。
##然后直接安装,这样以后使用起来也非常方便。
sudo make install
网页里还有如果你在 camke 里使用 openMVG 的话的用法
##安装依赖项:
sudo apt-get -y install build-essential git mercurial cmake libpng-dev libjpeg-
dev libtiff-dev libglu1-mesa-dev libxmu-dev libxi-dev
##安装 Eigen 库:(这个之前装过的话就可以直接跳过了。之前我在装ORB-SLAM的
时候装过一次了。
hg clone https://bitbucket.org/eigen/eigen #3.2
mkdir eigen_build && cd eigen_build
cmake . ../eigen
make && sudo make install
cd ..##安装 Boost 库:
sudo apt-get -y install libboost-iostreams-dev libboost-program-options-dev
libboost-system-dev libboost-serialization-dev
##安装 opencv(opencv 之前通过别的常见办法装过的也都不用装了,个人感觉 apt 安装不
是很好)
sudo apt-get -y install libopencv-dev
##安装 CGAL
sudo apt-get -y install libcgal-dev libcgal-qt5-dev
##安装 VCGLib:
git clone https://github.com/cdcseacave/VCG.git vcglib
##安装 Ceres:
sudo apt-get -y install libatlas-base-dev libsuitesparse-dev
git clone https://ceres-solver.googlesource.com/ceres-solver ceres-solver
cd ceres-solver
mkdir build && cd build
cmake . ../ -DMINIGLOG=ON -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j12 && sudo make install
cd ..
##(可选的)安装 GLFW3
sudo apt-get -y install freeglut3-dev libglew-dev libglfw3-dev
##编译 openMVS:
git clone https://github.com/cdcseacave/openMVS.git openMVS
cd openMVS
mkdir build && cd build
cmake . ../ -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="path/to/vcglib"
#这个你去留意一下找一下 vcglib 的路径即可
##如果你想把 openMVS 当做一个共享的库的话,在 camke 里开启选项:
-DBUILD_SHARED_LIBS=ON
##编译并安装:
make -j12 && sudo make install
这一步弄完之后,如果在用 DensifyPointCloud、 TextureMesh 这些终端工具时提示找不到
命令,那就直接在 path/to/openMVS/build/bin 里面找到这些二进制文件然后复制到系统里
的/usr/bin 里面就可以了。
在安装配置好 openMVG 和 openMVS 后,突然对建图无从下手,不知道从哪里开始,,
然后仔细浏览了一遍官网文档,总结出了建图的办法。➢ 第一步:cd 到 path/to/openMVG/build/software/SfM 里,里面有两个脚本,分别是
SfM_SequentialPipeline.py 和 SfM_GlobalPipeline.py,两种不同的特征点匹配方式吧
(感觉),前面一种是按次序的,后面是按全局的。使用方法
python xxx.py path/to/image path/to/output_dir
见网页 https://openmvg.readthedocs.io/en/latest/software/SfM/SfM/
如果所选择的图像的质量比较好的话可以成功运行完,这个时候在 output_dir 里的
reconstruction_sequential 或者 reconstruction_global 目录下找到 sfm_data.bin 文件。
➢ 第二步:可以再 output_dir 和 images 同级目录下建一个空文件夹,把上一步找到的
sfm_data.bin 文件拷贝进去,在这里,用 openMVG_main_openMVG2openMVS 终端
工具将 openMVG 生成的 sfm_data.bin 转换成.mvs 文件格式,在 sfm_data.bin 目录下
输入具体指令:
openMVG_main_openMVG2openMVS -i sfm_data.bin -o scene.mvs
即可得到 scene.mvs 这种可以在终端使用 Viewer 查看的文件。
(官方给的 usage:
openMVG_main_openMVG2openMVS -i PATH/sfm_data.(json/xml/bin) -d OUTPUT_PATH -o OUTPUT_PATH/Scene
)
这个时候就是建立的稀疏图。可以在终端使用 Viewer 进行查看:
Viewer “把想看的.mvs 文件拖进来就 OK 了”
➢ 第三步:运用 openMVS 的一系列终端工具把最初的这个 sence.mvs 这个稀疏图最终
转换成带纹理的稠密图:
参考网页:https://github.com/cdcseacave/openMVS/wiki/Usage
#以下命令全部都在含 sence.mvs 的目录下运行:
⚫ 终端工具 DensifyPointCloud 建立稠密图:
DensifyPointCloud sence.mvs
这时会生成 scene_dense.mvs,这就是生成的稠密图,可以通过 Viewer 进行查看。
⚫ 2、终端工具 ReconstructMesh 建立粗网格:
ReconstructMesh scene_dense.mvs
这时会生 scene_dense_mesh.mvs,这个是生成的带粗纹理的。可通过 Viewer
查看。
⚫ 3、终端工具 RefineMesh 建立精致网格:(可选的,这步可以跳过)
RefineMesh scene_mesh.mvs
⚫4、终端工具 TextureMesh 混合网格建立纹理:
TextureMesh scene_dense_mesh.mvs
这时候生成最终的成品,可以通过 Viewer 进行查看,效果比较好的话看起来会很不错的,
但效果不好那就重新去挑选图片了2333