OpenMVG 系列 (1):入門簡介


 1  OpenMVG 簡介

     全稱 Open Multiple View Geometry,是法國人 Pierre Moulon 讀博期間開源的一個 C++ 庫

    最早版本 OpenMVG 0.1 是 2013年 2月 發布的,目前最新版本是 2021年 10月 發布的 OpenMVG 2.0                

    LinkedIn 顯示,此前一直在 Zillow Group 的 Pierre,於 2020年 11月 跳槽到 Facebook Reality Labs 擔任 Research Scientist

    Reality Labs 聚焦的是 AR/VR 技術,和 Pierre 的研究方向契合,希望 Pierre 工作順利,閑暇時繼續完善 OpenMVG  

        

 

2  功能模塊

    OpenMVG 奉行“簡單、易維護”的原則,代碼具有很強的可讀性,非常方便二次開發

    整個功能模塊由若干核心庫組成,主要圍繞兩大類問題:1) 多視圖幾何的基本問題;2) 運動恢復結構

2.1  多視圖幾何

    Multiple View Geometry 簡稱 MVG,包含三個關鍵矩陣:一個是單應矩陣 $x_{i}^{'}=Hx_{i} $,參見博文 OpenCV 之 平面單應性

             

     另兩個是基礎矩陣 $x_{i}^{'T}F x_{i}=0$,本質矩陣 $E=R[t]x=K^{'T}FK$

                         

    例如,已知四組對應特征點坐標,用 DLT 算法求解單應矩陣 H,代碼如下:

// Setup left, right corresponding points and solve for H
openMVG::Mat xLeft(2, 4), xRight(2, 4);

// Instantiation of homography solver
using H_Solver = openMVG::homography::kernel::FourPointSolver;

// Perform model solving
std::vector<openMVG::Mat3> Hs;
H_Solver::Solve(xLeft, xRight, &Hs);  

2.2  運動恢復結構

    Structure From Motion 簡稱 SFM,是從一系列圖像序列中恢復相機位姿,構建三維場景模型 (稀疏點雲) 的過程

                                            

                 圖像序列                                                Structure from motion                                              三維場景 (稀疏點雲)

    OpenMVG 中實現了 SFM 的兩種算法:增量式和全局式。一次完整的 SFM 實現流程,如下所示:

        

2.3  第三方庫

    對於一些基礎功能,OpenMVG 沒有重復造輪子,直接集成了許多好用的第三方庫,如下:

     - Eigen:線性代數,矩陣、向量運算

     - Ceres Solver:非線性最小二乘問題

     - Lemon:圖和圖運算    

 

3  編譯配置

3.1  環境和工具

      - Win10  64bit

      - VS 2019 社區版 (地址: https://www.visualstudio.com/downloads/)

      - CMake 解壓版 (地址: https://cmake.org/download/)

3.2  文件准備

      - OpenMVG,地址:https://github.com/openMVG/openMVG/releases

         注意:上述地址下載的壓縮包,最終編譯有時會報錯,不如在 PowerShell 中 Git 下載的穩定                                  

$  git clone --recursive https://github.com/openMVG/openMVG.git  

      - 依賴項,下載 glfw,osi_clp 和 cereal,解壓后放在 openMVG\src\dependencies 中,此目錄內已有對應文件夾,但里面的內容是空的

          glfw 下載地址

          cereal 下載地址

          osi_clp,可直接下載 OpenMVG 提供的地址:https://github.com/openMVG-thirdparty/osi_clp/tags

                        或者利用上述鏈接下載的 CMakeLists.txt 文件,再單獨下載文件 Osi/Clp/CoinUtils,放在 osi_clp 文件夾中

                         https://github.com/coin-or/Osi/tagshttps://github.com/coin-or/Clp/tags;  https://github.com/coin-or/CoinUtils/tags

 3.3  CMake 配置

     使用 cmake-gui,source 選擇解壓后的 src,build 選擇自建的文件夾

     先 Configure 再 Generate,然后點擊 "Open Project” 在 VS 中打開工程

     注:第一次 Configure 可能有紅色報錯,找到原因后更改 CMake 配置,再點擊 Configure 即可 

              

3.4  編譯

    打開 openMVG.sln 后,在 VS 2019 中分別編譯 Debug 和 Release 模式,生成相應的 lib 文件    

  

4  SFM 例程

    下面以 Sceaux 城堡圖片集為例,執行 OpenMVG 中的 SFM 算法,輸出重建的稀疏點雲

      

4.1  准備

     -  城堡圖片集,地址:https://github.com/openMVG/ImageDataset_SceauxCastle

     -  Python 安裝,地址:https://www.python.org/downloads/

     -  Meshlab 安裝,地址:https://www.meshlab.net/

 4.2  執行腳本

    將下載的 Sceaux 城堡圖片集 images,放置於編譯后的 openMVG_Build/software/SfM 路徑下,在 PowerShell 中分別執行如下腳本:

    增量式 SFM:

$ py ./SfM_SequentialPipeline.py   images  matches_sequential  

    全局式 SFM:

$ py ./SfM_GlobalPipeline.py   images matches_global  

    以后者為例,可看到在 matches_global 中生成了兩個文件夾:matches 存儲的是特征點和匹配信息;reconstruction_global 保存的是重建后的點雲 (后綴為 .ply)

      

    用 Meshlab 打開其中一個稀疏點雲 colorized.ply,顯示如下:

      

4.3  RMSE

    在 reconstruction_global 文件夾下,還有 SfMReconstruction_Report.html 的重建精度報告

   

     

參考資料

    OpenMVG 編譯安裝指南

    OpenMVG libraries

    openMVG: "open Multiple View Geometry"

    OpenMVG 源碼閱讀小記    

 

后記

    2021年10月21日,OpenMVG 2.0 發布

 


免責聲明!

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



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