multi-view stereo文檔


multi view stereo文檔

該文檔總結了使用筆者multi view stereo (MVS)的方法對相機進行rectify, 生成深度圖的過程, 希望能給之后的同學一些幫助。

MVS簡介

Multi View Stereo, 是對於多視圖三維重建一系列方法的總稱, 簡而言之, 就是利用多個相機拍攝的多張照片, 來重建出照片中的場景。

學習multi view stereo的流程有以下一些經典的資源, 可以點擊下面表格里的鏈接進行下載。

內容 描述
multiview stereo a tutorial mutli view stereo的經典教程, 強烈推薦閱讀。
pixelwise... MVS colmap團隊寫的論文
structure from motion 理解structure from motion非常好的材料, 一本書中的一個章節, 專門介紹sfm

完整的multi view stereo pipeline 會有以下的步驟

  • input images
  • structure from motion(SFM) => camera parameters, sparse point cloud
  • Muti view stereo(MVS) => depth map, dense point cloud
  • Surface reconstruction(SR) => poisson or delauny reconstruction, mesh
  • texture mapping(TM)=> get mesh with texture

sfm的流程可以用一下這張圖來表示

MVS工具鏈

幾種開源工程的總結

如前文所述, MVS pipeline主要有四個步驟, SFM, MVS, SR和TM, 這幾個步驟分別有以下的開源工具可以參考, 點擊鏈接可以直接轉到相應工程中

  • SFM:

    • visual sfm 非常robust的sfm工具, window下可以直接下載打包好的binary, mac和Linux下如果手動編譯比較復雜(非常不推薦手工編譯, 筆者在這個問題上卡了好幾天, 妥協下用windows也是不錯的選擇)
    • open MVG 筆者沒有跑過這個工程, 效果未知, 可以之后嘗試
    • colmap 界面簡潔好用, 但是只能在windows下裝好cuda才可以使用dense reconstruction, 推薦使用
  • MVS

    • PMVS-CMVS 經典的MVS工具, 首先用CMVS對input image分類, 然后PMVS重建, 融合, 非常適合大規模的數據
    • colmap 比較方便生成深度圖
    • openMvs 筆者沒有跑過這個工程, 目測不太好跑, 很多人跑的過程中遇到了問題。
  • SR && TM

    • Default 一般visual sfm, colmap都自帶了SR, TM的工具, 可以用默認的工具

    • meshlab 提供了mesh simplify, smooth, SR等mesh相關的功能, 對於triangular mesh有很好的結果。 建議初學者下載meshlab安裝包使用, 如果想deep dive細節, 可以下載vcglib(mesh lab基於這個lib開發的), 編譯源碼, vcglib用了很多元編程的理念, 還是很好玩的, 不過流程比較復雜, 慎入。

colmap教程

在這個章節中, 筆者介紹colmap的使用教程。

installation

colmap建議下載pre built binary, 是十分穩定的, 如果想要用dense reconstruction, 請自行安裝cuda。

mac系統請點擊 macos

windows系統請點擊 windows

點完后直接運行, 安裝完成。

structure from motion

colmap的流程如下圖

第一步是sfm, 需要把所有輸入的圖片放到一個文件夾下, 然后點擊

進行特征提取和匹配, 提取后的結果可以在database management中進行可視化。

之后點擊start reconstruction和bundle adjustment進行稀疏重建。

值得一提的是, 在extras->model statistic里有重投影誤差等評判相機參數好壞的參數, 一般比較好的結果在0.5一下。

export model and rectify

在進行稀疏重建后, 可以把model導出到txt文件里。

包括了

  • 相機參數
  • 特征點
  • 3d點雲信息

可以通過scripts 里提供的腳本讀取相應參數。

如果需要進一步rectify, 可以把參數輸入opencv的stereoRectify()函數, 之后initUndistortRecifyMap(), 最后使用remap() 進行rectify。

dense reconstruction and depth map

在下面的界面中按照undistoriont, stereo, fusion ,poisson的流程進行重建

![image-20200229173820634](/Users/edward/Library/Application Support/typora-user-images/image-20200229173820634.png)

![image-20200229172613454](/Users/edward/Library/Application Support/typora-user-images/image-20200229172613454.png)

dense reconstruction的深度圖由上圖所示, 對於texture不是很豐富的圖片, 建議增加 windows_radius和降低filter_min_ncc來提升深度圖的准確度。

PMVS教程

PMVS可以參考這篇博客安裝https://blog.csdn.net/moneyhoney123/article/details/78454837

需要注意的一個坑點是, 如果圖片太少, 會報pmvs2 crash not enough memory需要修改PMVS的配置文件nv.ini, 把minImageNum改為2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM