1 OpenMVG 簡介
全稱 Open Multiple View Geometry,是法國人 Pierre Moulon 讀博期間開源的一個 C++ 庫
最早版本 OpenMVG 0.1 是 2013年 2月 發布的,目前最新版本是 2020年 5月 發布的 OpenMVG 1.6
LinkedIn 顯示,此前一直在 Zillow Group 的 Pierre,于 2020年 11月 跳槽到 Facebook Reality Labs 擔任 Research Scientist
Reality Labs 聚焦的是 AR/VR 技術,和 Pierre 的研究方向契合,希望 Pierre 大神作業順利,閑暇時繼續完善 OpenMVG

2 功能模塊
OpenMVG 奉行“簡單、易維護”的原則,代碼具有很強的可讀性,非常方便二次開發
整個功能模塊由若干核心庫組成,主要圍繞兩大類問題:1是多視圖幾何的基本問題;2是運動結構恢復 sfm
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
- 依賴項,下載 glw,osi_clp 和 cereal,解壓后放在 openMVG\src\dependencies 中,此目錄內已有對應檔案夾,但里面的內容是空的
glw,地址:https://github.com/elmindreda/glfw/releases
osi_clp,地址:https://github.com/openMVG-thirdparty/osi_clp/releases
cereal,地址:https://github.com/USCiLab/cereal/releases
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 打開其中一個稀疏點云 robust_colorized.ply,顯示如下:

4.3 RMSE
在 reconstruction_global 檔案夾下,還有 SfMReconstruction_Report.html 的重建精度報告

參考資料
OpenMVG 編譯安裝指南
OpenMVG libraries
openMVG: "open Multiple View Geometry"
OpenMVG 原始碼閱讀小記
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/288987.html
標籤:其他
