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,可以省略,其作用是當做後面的路徑,需要換成自己的安裝位置

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>/reconstrution/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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章