为了获取本质矩阵,首先计算基础矩阵F。根据本质矩阵E,即可恢复得到运动的状态R和T。

可以根据匹配点得到F,然后根据和相机内参,即可得到本质矩阵E。进而根据:

注意:根据摄像机模型t=-RT,恢复运动状态,就是要计算t和R。

8点法

8点算法是计算基本矩阵的最简单的方法,它涉及构造并(最小二乘)解一个线性方程组。给定足够多的匹配点(至少7对),可解得基础矩阵F。

,每一组点匹配提供关于的未知元素的一个线性方程。对应于一对点的方程是:

写成矩阵(矢量)的形式:

其中:

从而根据n对匹配的点集,我们可以得到线性方程组:

计算最小二乘解,的最小二乘解是对应于的最小奇异矩阵的奇异矢量,即是的SVD分解中矩阵的最后一列矢量。用这种方法得到的解矢量在条件下取的最小值。

该方法步骤简单,易于实现,但由于其计算结果对输入数据异常敏感,从而直接影响它在实际中的应用。

1997年,Hartley对原始8点算法进行改进,在构造解的方程之前对输入的数据进行适当的归一化。即在形成8点算法的线性方程组之前,图像点的一个简单变换(平移或变尺度)将使这个问题的条件极大地改善,从而提高结果的稳定性。而且进行这种变换所增加的计算复杂性并不显著。算法具体过程具体如下:

  1. 对原始图象坐标做一个平移变换,使原来以左上角为原点的图象坐标变成以所有图像点的重心为原点的图像坐标;
  2. 再对图象坐标做一个尺度变换,使得点到原点的平均距离为

分别对两幅图像进行以上两步变换,然后将变换后的图像坐标作为输入数据计算基础矩阵。

计算过程如下:

  1. 设两个独立的图像坐标变换分别为T,则变换后的图像坐标为
  2. 基于转换后的匹配点对,利用八点算法计算基础矩阵
  3. 解除归一化,令,矩阵F是对应于原始数据的基本矩阵。

注意:此时求得的F阵的秩并不保证严格为2。而且,由于噪声影响计算得到的F一般都是满秩的。

进而,根据相机的内参信息得到本质矩阵E。

运动恢复

在二视图中,第一个相机的投影矩阵为:,而第二个相机的投影矩阵为:,投影矩阵的旋转矩阵R和平移矩阵t是要被计算出来的,计算的过程称为运动恢复。这里的“运动”就是第二帧相机相对于第一帧相机的运动变化。

1992年,Hartley提出了从本质矩阵在相差一个尺度因子的情况下恢复出摄像机投影矩阵的四个可能解,然后从四个解中选择一个正确解的方法。证明过程可见“计算机视觉中的多视图几何”中文本174页。

定理1:一个3*3的矩阵是本质矩阵的充要条件是它的奇异值中有两个相等而第三个是0。

定理2:设本质矩阵的SVD分解是:,不考虑本质矩阵的符号,则存在两种可能的解:

,

,

其中:

 

推论:已知本质矩阵和第一和摄像机矩阵,那么第二个摄像机矩阵有下列四种可能的选择:

的最后一列。

t的具体空间长度是不能恢复出来的,只能在相差一个尺度因子的情况下恢复平移单位向量。

4个解的几何解释

显然前面两个解的差别就是第一个摄像机到第二个摄像机的平移矢量是反向的。

上下两行的差别在于摄像机绕基线旋转了180度,上图中只有(a)时,重构点同时出现在两个摄像机的前面。

从匹配点对中随机选择n对特征点,采用视图重建的方法,分别基于四种可能的摄像机矩阵重建出对应的三维点,满足景深为正的点数最多的解就是对应的,同时也可以确定相机的外参R和t。

本质矩阵E求解及运动状态恢复的更多相关文章

  1. 2D-2D:对极几何 基础矩阵F 本质矩阵E 单应矩阵H

    对极约束 \[ \boldsymbol{x}_{2}^{T} \boldsymbol{F} \boldsymbol{x}_{1}=\boldsymbol{0} \quad \hat{\boldsymb ...

  2. 【poj3734】矩阵乘法求解

    [题意] 给N个方块排成一列.现在要用红.蓝.绿.黄四种颜色的油漆给这些方块染色.求染成红色方块和染成绿色方块的个数同时为偶数的染色方案的个数,输出对10007取余后的答案.(1<=n<= ...

  3. 【学习笔记】Vins-Mono论文阅读笔记(二)

    估计器初始化简述 单目紧耦合VIO是一个高度非线性的系统,需要在一开始就进行准确的初始化估计.通过将IMU预积分与纯视觉结构进行松耦合对齐,我们得到了必要的初始值. 理解:这里初始化是指通过之前imu ...

  4. SLAM入门之视觉里程计(5):单应矩阵

    在之前的博文OpenCV,计算两幅图像的单应矩阵,介绍调用OpenCV中的函数,通过4对对应的点的坐标计算两个图像之间单应矩阵\(H\),然后调用射影变换函数,将一幅图像变换到另一幅图像的视角中.当时 ...

  5. 多视几何——三角化求解3D空间点坐标

    VINS-Mono / VINS-Fusion中triangulatePoint()函数通过三角化求解空间点坐标,代码所体现的数学描述不是很直观,查找资料,发现参考文献[1]对这个问题进行详细解释,记 ...

  6. CH Round #30 摆花[矩阵乘法]

    摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...

  7. 学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67

    本文来自:http://www.matrix67.com/blog/archives/tag/poj大牛的博文学习学习 节选如下部分:矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律:二,矩阵乘法满足 ...

  8. Android自己定义控件——3D画廊和图像矩阵

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/39932689 1.3D画廊的实现 我们知道android系统已经为我们提供好了一个 ...

  9. 【转】Matrix67:十个利用矩阵乘法解决的经典题目

    好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质.    不要以为数学中的矩阵也是黑色屏幕上不断变化的 ...

随机推荐

  1. SpringBoot配置属性之Security

    SpringBoot配置属性系列 SpringBoot配置属性之MVC SpringBoot配置属性之Server SpringBoot配置属性之DataSource SpringBoot配置属性之N ...

  2. iscsi target 之LIO配置

    LIO 配置 现在主流Linux都可以设置iSCSI,如STGT/TGT.LIO Target等.Linux-IO(LIO)Target是当前Linux标准的iSCSI target的开源实现,包含在 ...

  3. FormsAuthentication.SetAuthCookie

    这两天在研究 Forms 进行用户验证, 它本身没有什么上msdn上查一下就知道怎么个搞法了! 不过我在测试的时候发现也会产生 了一些疑问! 1. 什么我在web.config 的 authentic ...

  4. 【Oracle】Oracle的内外连接

    目录结构: contents structure [+] Oracle的内外连接 内连接 等值连接 非等值连接 自连接 外连接 外连接的特点 如何实现外连接 SQL99的内外连接 SQL99的内连接 ...

  5. SQL 中 Arg的使用

    今天在写SQL脚本时用到了Arg这个函数,发现了一个问题就是如果取平均数的字段是int类型那么,无论你怎么平均都不会有小数位出来. 因为Arg默认将你取的平均值转换为了你的字段对应的类型int.那么如 ...

  6. @property的使用方法

    参看廖大神的博客 使用@property 有时间整理一下. python 没有私有成员变量的概念,通常在变量前面加单/双下划线来表示私有变量(非共有变量). 通常在python中,以单下划线开始的成员 ...

  7. OpenCV 学习笔记 02 处理文件、摄像头和图形用户界面

    在处理文件前需要引入OpenCV库,同时也引入unmpy库 import cv2 import numpy as np 1 基本的读写操作 1.1 图像文件的读写操作 1.1.1 图像文件的读取操作 ...

  8. unity, Collider2D.bounds的一个坑

    Note that this will be an empty bounding box if the collider is disabled or the game object is inact ...

  9. django admin 导出数据简单示例

    借鉴博客:https://www.lijinlong.cc/django/djxs/2101.html 具体代码实现: class TipReport(admin.ModelAdmin): actio ...

  10. android开发前奏曲之开发工具ADT

    原文:http://android.eoe.cn/topic/android_sdk Android开发工具(ADT)插件为Eclipse提供了一个专业级的开发环境,用于构建Android应用程序.这 ...