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 源码阅读小记

OpenMVG 系列 (1):入门简介的更多相关文章

  1. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

  2. 掌握 Ajax,第 1 部分: Ajax 入门简介

    转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...

  3. Spring 系列: Spring 框架简介(转载)

    Spring 系列: Spring 框架简介 http://www.ibm.com/developerworks/cn/java/wa-spring1/ Spring AOP 和 IOC 容器入门 在 ...

  4. Pandas系列之入门篇

    Pandas系列之入门篇 简介 pandas 是 python用来数据清洗.分析的包,可以使用类sql的语法方便的进行数据关联.查询,属于内存计算范畴, 效率远远高于硬盘计算的数据库存储.另外pand ...

  5. Pandas系列之入门篇——HDF5

    Pandas系列之入门篇--HDF5 简介 HDF5(层次性数据格式)作用于大数据存储,其高效的压缩方式节约了不少硬盘空间,同时也给查询效率带来了一定的影响, 压缩效率越高,查询效率越低.pandas ...

  6. Python系列之入门篇——HDFS

    Python系列之入门篇--HDFS 简介 HDFS (Hadoop Distributed File System) Hadoop分布式文件系统,具有高容错性,适合部署在廉价的机器上.Python ...

  7. Python系列之入门篇——MYSQL

    Python系列之入门篇--MYSQL 简介 python提供了两种mysql api, 一是MySQL-python(不支持python3),二是PyMYSQL(支持python2和python3) ...

  8. Python 入门简介(一)

    Why Python? 我个人认为去学习一门新的语言其实是不需要理由的,当然如果你硬要我编个理由的话还是很容易的. 容易学 容易用 有人真的在用Python么? 这个问题谁用谁知道. 选择什么开发工具 ...

  9. MongoDB入门简介

    MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...

  10. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

随机推荐

  1. centos 7 启动和关闭zabbix 服务

    systemctl start zabbix-server  启动服务端 systemctl stop zabbix-server  停止服务端 systemctl start zabbix-agen ...

  2. Linux_yum仓库管理

    一.yum配置本地仓库 1.挂载光盘 [root@localhost ~]# mount /dev/sr0 /mnt/ [root@localhost ~]# df -hT 文件系统 类型 容量 已用 ...

  3. SpringMVC Jackson 库解析 json 串属性名大小写自动转换问题

    问题描述 在项目开发中,当实体类和表中定义的某个字段为 RMBPrice,首字母是大写的,sql 查询出来的列名也是大写的 RMBPrice,但是使用 jquery 的 ajax 返回请求响应时却出错 ...

  4. 校准仪的开发 ---等下整理 迪文屏的ICO文件 和输出配置问题

    要有ICO文件才能

  5. 10.19 dig:域名查询工具

    dig命令 是常用的域名查询工具,可以用于测试域名系统的工作是否正常.  dig命令的参数选项及说明 @<DNS服务器地址>    指定进行城名解析的域名服务器.当不希望使用本机默认的DN ...

  6. 治理对象ing

    计算治理项包括产出表未被读.暴力扫描.数据膨胀.数据倾斜.出错节点.导入为空和输入为空. 存储的治理项包括生命周期过长.未管理表.废弃表.空表.逻辑未管理表.逻辑废弃表.逻辑空表和黑盒物化空表.

  7. Spring Boot自定义属性配置文件开启提示

    前言:有时候在Sping Boot项目中需要自定义属性.又想在配置文件(*.properties)中显示提示时. 测试环境:Sping Boot2x + Maven + Lombok 准备测试的配置类 ...

  8. GStreamer 1.18.4稳定的错误修复版本

    GStreamer 1.18.4稳定的错误修复版本GStreamer团队宣布最喜欢的跨平台多媒体框架的稳定的1.18版本系列中的另一个错误修复版本!此版本仅包含错误修复和重要的安全修复程序,并且从1. ...

  9. 字符识别OCR原理及应用实现

    字符识别OCR原理及应用实现 文本是人类最重要的信息来源之一,自然场景中充满了形形色色的文字符号.光学字符识别(OCR)相信大家都不陌生,就是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过 ...

  10. 用java实现一个ATM机系统(2.0版)

    用java实现一个ATM机系统(2.0版) java实现银行ATM自助取款机,实现功能:用户登录.余额查询.存钱.取钱.转账.修改密码.退出系统. 文章目录 用java实现一个ATM机系统(2.0版) ...