OpenMVG 系列 (1):入門簡介
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 沒有重複造輪子,直接集成了許多好用的第三方庫,如下:
3 編譯配置
3.1 環境和工具
– Win10 64bit
– VS 2019 社區版 (地址: //www.visualstudio.com/downloads/)
– CMake 解壓版 (地址: //cmake.org/download/)
3.2 文件準備
– OpenMVG,地址://github.com/openMVG/openMVG/releases
注意:上述地址下載的壓縮包,最終編譯有時會報錯,不如在 PowerShell 中 Git 下載的穩定
$ git clone –recursive //github.com/openMVG/openMVG.git
– 依賴項,下載 glw,osi_clp 和 cereal,解壓後放在 openMVG\src\dependencies 中,此目錄內已有對應文件夾,但裡面的內容是空的
glw,地址://github.com/elmindreda/glfw/releases
osi_clp,地址://github.com/openMVG-thirdparty/osi_clp/releases
cereal,地址://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 準備
– 城堡圖片集,地址://github.com/openMVG/ImageDataset_SceauxCastle
– Python 安裝,地址://www.python.org/downloads/
– Meshlab 安裝,地址://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: “open Multiple View Geometry”