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 发布

 

posted on 2021-07-07 22:16  飞鸢逐浪  阅读(9124)  评论(0编辑  收藏  举报