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=Hxixi′=Hxi,参见博文 OpenCV 之 平面单应性
另两个是基础矩阵 x′TiFxi=0xi′TFxi=0,本质矩阵 E=R[t]x=K′TFKE=R[t]x=K′TFK
例如,已知四组对应特征点坐标,用 DLT 算法求解单应矩阵 H,代码如下:
1 2 3 4 5 6 7 8 9 |
|
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 社区版 (地址: Download Visual Studio Tools - Install Free for Windows, Mac, Linux)
- CMake 解压版 (地址: Download CMake)
3.2 文件准备
- OpenMVG,地址:https://github.com/openMVG/openMVG/releases
注意:上述地址下载的压缩包,最终编译有时会报错,不如在 PowerShell 中 Git 下载的稳定
1 |
|
- 依赖项,下载 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/tags;https://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 安装,地址:Download Python | Python.org
- Meshlab 安装,地址:MeshLab
4.2 执行脚本
将下载的 Sceaux 城堡图片集 images,放置于编译后的 openMVG_Build/software/SfM 路径下,在 PowerShell 中分别执行如下脚本:
增量式 SFM:
1 |
|
全局式 SFM:
1 |
|
以后者为例,可看到在 matches_global 中生成了两个文件夹:matches 存储的是特征点和匹配信息;reconstruction_global 保存的是重建后的点云 (后缀为 .ply)
用 Meshlab 打开其中一个稀疏点云 colorized.ply,显示如下:
4.3 RMSE
在 reconstruction_global 文件夹下,还有 SfMReconstruction_Report.html 的重建精度报告