Ubuntu下openMVG+openMVS实现三维重建

三维重建简介

三维重建是一个计算机视觉领域经典的问题,近年来也出现了许多利用深度学习直接从图像中得到网格的方法,取得了很好的效果。本文主要关注三维重建的经典实现方法,其步骤为:

  1. 通过相机获取一系列三维物体不同侧面的图片
  2. 对相机的内外参数进行标定
  3. 对图像中的特征进行提取(如SIFT、SURF等)
  4. 从匹配得到的信息中构建三维稀疏点云
  5. 根据稀疏点云进行稠密点云重建
  6. 对点云进行预处理(如去噪、下采样等)
  7. 进行网格重建
  8. 进行纹理映射

这些步骤已经有许多三维重建框架来实现,主要框架对比如下:
框架对比
本文主要利用openMVG+openMVS来实现三维重建

环境配置

本文的环境是在Ubuntu 16.04 LTS下进行配置的

openMVG

openMVG配置过程主要参考这里

首先进行外部库的安装

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目录

git clone --recursive https://github.com/openMVG/openMVG.git
mkdir openMVG_Build && cd openMVG_Build

配置并生成(需要安装cmake)

cmake -DCMAKE_BUILD_TYPE=RELEASE ../openMVG/src/
cmake --build . --target install

测试,我在此处测试失败了,但是不影响使用效果

make test

openMVS

openMVG配置过程主要参考这里

首先更新apt-get并安装外部库,原文还指定main_path=pwd,可以省略,其作用是当做后面的路径,需要换成自己的安装位置

扫描二维码关注公众号,回复: 14654530 查看本文章
sudo apt-get update -qq && sudo apt-get install -qq
sudo apt-get -y install build-essential git mercurial cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev libxmu-dev libxi-dev

安装Eigen

hg clone https://bitbucket.org/eigen/eigen#3.2
mkdir eigen_build && cd eigen_build
cmake . ../eigen
make && sudo make install

安装Boost

sudo apt-get -y install libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev

安装OpenCV

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,原文从https://ceres-solver.googlesource.com/ceres-solver下载会提示失败,因此换了一个下载地址

sudo apt-get -y install libatlas-base-dev libsuitesparse-dev
git clone https://github.com/ceres-solver/ceres-solver ceres-solver
mkdir ceres_build && cd ceres_build
cmake . ../ceres-solver/ -DMINIGLOG=ON -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j2 && sudo make install
cd ..

安装GLFW3(可选)

sudo apt-get -y install freeglut3-dev libglew-dev libglfw3-dev

下载openMVS,此处-DVCG_ROOT需指定为安装vcglib的路径,如果想把openMVS作为库使用,在最后加上-DBUILD_SHARED_LIBS=ON

git clone https://github.com/cdcseacave/openMVS.git openMVS
mkdir openMVS_build && cd openMVS_build
cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="$~/openMVS/vcglib"

安装openMVS库(可选)

make -j2 && sudo make install

如果安装了Anaconda,此处会报错

Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

因为make会自动采用Anaconda的gcc,但是其版本过低会导致make失败,解决方案是暂时移走Anaconda3/lib下的libuuid库文件

ls ~/Anaconda3/lib/libuuid*
mkdir ~/Anaconda3/libuuid
mv ~/Anaconda3/lib/libuuid* ~/Anaconda3/libuuid

等make完成以后再将文件移回即可

mv ~/Anaconda3/libuuid ~/Anaconda3/lib/libuuid*

重建

下面就可以使用openMVG+openMVS实现三维重建了

openMVG

我采用的测试图片如下:https://github.com/openMVG/ImageDataset_SceauxCastle。首先切换到图片目录后开始执行指令,需要指定相机焦距-f,大致可以由图像长乘以1.2估计得到,例如图像长宽为1280×720,则焦距估计为1280×1.2=1536。

openMVG_main_SfMInit_ImageListing -i <images-dir> -f focal_length -o <output-dir>
openMVG_main_ComputeFeatures -i <output-dir>/sfm_data.json -o <output-dir>
openMVG_main_ComputeMatches -i <output-dir>/sfm_data.json  -o <output-dir>
openMVG_main_IncrementalSfM -i <output-dir>/sfm_data.json -m <output-dir> -o <output-dir>/reconstruction
openMVG_main_ComputeSfM_DataColor -i <output-dir>/reconstruction/sfm_data.bin -o  <output-dir>/colored.ply
openMVG_main_ComputeStructureFromKnownPoses -i <output-dir>/reconstruction/sfm_data.bin -m . -o <output-dir>/reconstruction/robust.bin -f <output-dir>/matches.f.bin

openMVG得到的稀疏点云结果可以用meshlab打开:

在这里插入图片描述

openMVS

openMVS可以很好地与openMVG对接,其主要的作用是进行稠密点云重建、网格重建与纹理映射。-d 4与–resolution-level=4的作用是为了简化运算,减小了重建的网格数量与精细程度

openMVG_main_openMVG2openMVS -i <output-dir>/reconstruction/robust.bin -o scene.mvs
DensifyPointCloud scene.mvs
ReconstructMesh -d 4 scene_dense.mvs
RefineMesh --resolution-level=4 scene_dense_mesh.mvs
TextureMesh scene_dense_mesh_refine.mvs

最后得到的效果:

在这里插入图片描述

参考链接

[1] https://leohope.com/%E8%A7%A3%E9%97%AE%E9%A2%98/2018/03/06/compare-re3d-system/
[2] https://www.itread01.com/content/1543864993.html
[3] http://www.ishenping.com/ArtInfo/3737460.html
[4] https://blog.csdn.net/weixin_41631970/article/details/87893750
[5] https://www.youtube.com/watch?v=ELHOjC_V-FE&t=1134s

猜你喜欢

转载自blog.csdn.net/shanwenkang/article/details/103196001