基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置
基于MVS的三維重建算法學習筆記(一)— MVS三維重建概述與OpenMVS開源框架配置
- 聲明
- 1. MVS(Multi-view stereo)概述
- 稀疏重建與稠密重建的區別
- 稀疏重建——SFM(Structure from Motion)算法
- 稠密重建——MVS(Multi-view stereo)方法
- 圖像一致性
- 立體匹配
- 2. OpenMVS開源框架
- 介紹
- OpenMVS安裝
- OpenMVS測試
- Meshlab下載
- 測試數據集下載
- 1. 稠密重建
- 2. 曲面重建
- 3. 網格優化
- 4. 紋理貼圖
- 參考文獻和資料
聲明
本人書寫本系列博客目的是為了記錄我學習三維重建領域相關知識的過程和心得,不涉及任何商業意圖,歡迎互相交流,批評指正。
1. MVS(Multi-view stereo)概述
MVS(多視點立體視覺,Multi-view stereo)能夠單獨從圖像中構造出高度細節化的3D模型,采集一個龐大的圖像數據集,用其來構建出一個用來解析圖像的3D幾何模型。MVS算法的流程圖如下所示,輸入為一組圖像及其相應的攝像機參數:
稀疏重建與稠密重建的區別
稀疏重建通常是重建一些圖像特征點的三維坐標,稀疏重建主要用于定位。稠密重建又稱三維重建,是對整個圖像或圖像中絕大部分像素進行重建。二者分別對應著MVS三維重建方法中的第二步和第三步:稀疏重建一般使用SFM算法,得到每張圖片的相機參數;稠密重建則對應著MVS中最核心的部分,一般所說的MVS算法指的就是稠密重建。
稀疏重建——SFM(Structure from Motion)算法
MVS算法的性能只取決于輸入圖像的質量和攝像機參數,所以MVS的成功很大程度上歸功于底層的用來計算攝像機參數的SFM算法。SFM算法以一組圖像作為輸入,生成兩個信息:每幅圖像的攝像機參數和圖像中可見的一組三維點,這些點通常被編碼為軌跡。 軌跡被定義為重建的3D點的3D坐標和輸入圖像子集中對應的2D坐標的列表,算法流程如下圖所示:
稠密重建——MVS(Multi-view stereo)方法
稠密重建是假設相機參數已知的情況下,尋找空間中具有光度一致性(Photo-consistency)的點,對場景進行立體匹配的過程;
圖像一致性
假設對于下面兩幅圖像和這樣一個三維場景,若選擇的三維點位于物體的表面上,那么這個三位點根據相機的內外參投影到圖像上,以投影點為中心取出兩個方形的小patch,那么它們所包含的場景應該是比較類似的;反之,如果這個點在物體外,兩個小patch相差是比較大的,若能度量兩個patch之間的一致性,就可以衡量這個三維點是否位于物體表面或者位于這個物體表面的概率大小。
立體匹配
立體匹配這一概念貫穿整個MVS方法,其目標就是從不同視角的圖像中找到匹配的對應點,從而從二維圖像中恢復出三維信息,即通過校正后的一對圖像獲取到視差圖的過程,叫做立體匹配;而通過匹配后得到的視差圖就能夠轉化為深度圖,從而從深度圖中獲取圖像的三維信息,完成稠密重建的任務。
2. OpenMVS開源框架
介紹
OpenMVS是一個比較經典的MVS(Multi-View Stereo)開源庫,集成三維重建整個完整的技術方案(相機模型,多視立體幾何,稠密重建,曲面重建,點云融合,紋理貼圖)。在每個重建環節使用的都是非常經典有效的算法,例如包含目前三維重建非常經典有效的深度圖重建算法SGM,PatchMatch。綜合重建效果和性能,目前MVS是所有開源庫中最好的。該框架還涉及Graph Cut、MRF、泊松融合等比較經典的通用算法原理與代碼實現,以及常見的點云后處理和網格后處理(去噪、細分,去非流形,補洞)等圖形學相關算法。
綜合來說,OpenMVS非常適合入門系統學習和二次開發。代碼框架非常完善,代碼實現清晰且規范,可快速提高項目實戰經驗。學習三維重建必備。
OpenMVS安裝
其中/path to vcglib/要改為自己系統下的vcglib的路徑;
10. 生成OpenMVS庫文件(在編譯的過程中可能會出現一些warning,不用管,這一步會有許多種類的報錯,具體的修改方案參考教程):
OpenMVS測試
OpenMVS可執行文件生成在openMVS/openMVS_build/bin/里面,(-w 設置的是數據的路徑,-i 是輸入的文件名,-o是輸出的文件名),執行命令時在openMVS_build文件夾中打開終端:
Meshlab下載
參考教程
測試數據集下載
鏈接:https://pan.baidu.com/s/13T04aKJ2OB6_RX7IMMGhpg
提取碼:oxkp
下載完的數據如下所示:
1. 稠密重建
./bin/DensifyPointCloud -w /path to data/data -i scene.mvs -o test_dense.mvs其中/path to data/需要改為data在系統中的路徑,運行后得到log和test_dense.ply:
2. 曲面重建
./bin/ReconstructMesh -w /path to data/data -i test_dense.mvs -o test_mesh.mvs得到log和test_mesh.ply:
3. 網格優化
./bin/RefineMesh -w /path to data/data -i test_mesh.mvs -o test_refinemesh.mvs得到log和test_refinemesh.ply:
4. 紋理貼圖
./bin/TextureMesh -w /path to data/data -i test_refinemesh.mvs -o test_texture.mvs得到log和test_texture.ply以及test_texture.png:
參考文獻和資料
[1]Multi-View Stereo: A Tutorial
[2]三維重建筆記——稠密重建
[3]MVS——multi view system從多視圖的密集重建(1)
[4]初識立體匹配
總結
以上是生活随笔為你收集整理的基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 「冰狐智能辅助」如何实现在线实时调试?
- 下一篇: 桌上有一只盘子,每次只能放入一个水果。请