實戰(zhàn) | 手把手教你跑三維重建代碼!
點擊上方“AI算法與圖像處理”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
OpenMVS是三維重建的一個成熟開源框架,綜合重建效果和性能,該算法是目前MVS(Multi-View Stereo)相關(guān)的所有開源庫中最好的一個。該算法的框架如下所示

用OpenMVS重建的結(jié)果如下所示:

計算機視覺life對該代碼進行了詳細注釋(持續(xù)更新), 歡迎star,代碼地址:
https://github.com/electech6/openMVS_comments
想要得到上述的重建結(jié)果,那么如何編譯運行OpenMVS源碼呢?下面是詳細教程:
依賴項
OpenMVS 依賴的幾個開源庫,有兩個是可選的可以先不安裝.
Eigen version 3.2 (or higher on Windows only) OpenCV version 2.4 or higher Ceres version 1.10 or higher (可選) CGAL version 4.2 or higher Boost version 1.56 or higher VCG GLFW(可選)
安裝說明
工具:
CMake git C/C++ compiler like Visual Studio or GCC
Linux 編譯
Ubuntu 16.04
#準備一個空閑的機器安裝:
sudo apt-get update -qq && sudo apt-get install -qq
sudo apt-get -y install git cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev
#安裝Eigen (必需)
git clone https://gitlab.com/libeigen/eigen.git --branch 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 (必需)
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
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
git clone https://github.com/electech6/openMVS_comments.git openMVS
mkdir openMVS_build && cd openMVS_build
cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="/path to vcglib/vcglib"
#如果想生成共享庫,可以在cmake加如下命令:
#-DBUILD_SHARED_LIBS=ON
#生成 OpenMVS 庫文件:
sudo make -j2 && sudo make install
可能存在的編譯問題
opencv中部分函數(shù)未定義
先卸載:
sudo apt-get autoremove opencv-doc opencv-data libopencv-dev libopencv2.4-java libopencv2.4-jni python-opencv libopencv-core2.4 libopencv-gpu2.4 libopencv-ts2.4 libopencv-photo2.4 libopencv-contrib2.4 libopencv-imgproc2.4 libopencv-superres2.4 libopencv-stitching2.4 libopencv-ocl2.4 libopencv-legacy2.4 libopencv-ml2.4 libopencv-video2.4 libopencv-videostab2.4 libopencv-objdetect2.4 libopencv-calib3d2.4再源碼安裝,可以安裝比如4.1.1版本。
boost報錯
解決方法:升級boost==1.6.3
使用說明
OpenMVS可執(zhí)行文件生成在openMVS/openMVS_build/bin/里面,在openMVS_build文件夾下打開終端,按照順序執(zhí)行如下命令:(-w 設(shè)置的是數(shù)據(jù)的路徑,-i 是輸入的文件名,-o是輸出的文件名)。
注意:colmap/openmvg計算的位姿可以通過作者提供的InterfaceCOLMAP,InterfaceVisualSFM轉(zhuǎn)成稠密重建輸入的*.mvs文件。這里我們主要關(guān)注mvs重建過程,未給位姿這個配置介紹(后面如果大家需求可以補充)。大家先根據(jù)提供的數(shù)據(jù)測試。
稠密重建
./bin/DensifyPointCloud -w /home/**/data/openMVS_sample -i scene.mvs -o test_dense.mvs輸出log:

得到的稠密點云test_dense.ply:

曲面重建
./bin/ReconstructMesh -w /home/data -i test_dense.mvs -o test_mesh.mvs輸出的log :

生成的網(wǎng)格模型test_mesh.ply:

網(wǎng)格優(yōu)化
./bin/RefineMesh -w /home/data -i test_mesh.mvs -o test_refinemesh.mvs輸出的log :

優(yōu)化的模型test_refinemesh.ply:

紋理貼圖
./bin/TextureMesh -w /home/data -i test_refinemesh.mvs -o test_texture.mvs輸出的log:

輸出的結(jié)果 test_texture.ply test_texture.png:

至此,恭喜你,大功告成!
