本质矩阵E求解及运动状态恢复
为了获取本质矩阵,首先计算基础矩阵F。根据本质矩阵E,即可恢复得到运动的状态R和T。
由可以根据匹配点得到F,然后根据
和相机内参,即可得到本质矩阵E。进而根据:
注意:根据摄像机模型t=-RT,恢复运动状态,就是要计算t和R。
8点法
8点算法是计算基本矩阵的最简单的方法,它涉及构造并(最小二乘)解一个线性方程组。给定足够多的匹配点(至少7对),可解得基础矩阵F。
记和
,每一组点匹配提供关于
的未知元素的一个线性方程。对应于一对点
和
的方程是:
写成矩阵(矢量)的形式:
其中:
从而根据n对匹配的点集,我们可以得到线性方程组:
计算最小二乘解,的最小二乘解是对应于
的最小奇异矩阵的奇异矢量,即是
的SVD分解
中矩阵
的最后一列矢量。用这种方法得到的解矢量
在条件
下取
的最小值。
该方法步骤简单,易于实现,但由于其计算结果对输入数据异常敏感,从而直接影响它在实际中的应用。
1997年,Hartley对原始8点算法进行改进,在构造解的方程之前对输入的数据进行适当的归一化。即在形成8点算法的线性方程组之前,图像点的一个简单变换(平移或变尺度)将使这个问题的条件极大地改善,从而提高结果的稳定性。而且进行这种变换所增加的计算复杂性并不显著。算法具体过程具体如下:
- 对原始图象坐标做一个平移变换,使原来以左上角为原点的图象坐标变成以所有图像点的重心为原点的图像坐标;
- 再对图象坐标做一个尺度变换,使得点到原点的平均距离为
。
分别对两幅图像进行以上两步变换,然后将变换后的图像坐标作为输入数据计算基础矩阵。
计算过程如下:
- 设两个独立的图像坐标变换分别为T、
,则变换后的图像坐标为
和
;
- 基于转换后的匹配点对
,利用八点算法计算基础矩阵
;
- 解除归一化,令
,矩阵F是对应于原始数据
的基本矩阵。
注意:此时求得的F阵的秩并不保证严格为2。而且,由于噪声影响计算得到的F一般都是满秩的。
进而,根据相机的内参信息得到本质矩阵E。
运动恢复
在二视图中,第一个相机的投影矩阵为:,而第二个相机的投影矩阵为:
,投影矩阵的旋转矩阵R和平移矩阵t是要被计算出来的,计算的过程称为运动恢复。这里的“运动”就是第二帧相机相对于第一帧相机的运动变化。
1992年,Hartley提出了从本质矩阵在相差一个尺度因子的情况下恢复出摄像机投影矩阵的四个可能解,然后从四个解中选择一个正确解的方法。证明过程可见“计算机视觉中的多视图几何”中文本174页。
定理1:一个3*3的矩阵是本质矩阵的充要条件是它的奇异值中有两个相等而第三个是0。
定理2:设本质矩阵的SVD分解是:
,不考虑本质矩阵的符号,则存在两种可能的解:
,
,
其中:
推论:已知本质矩阵和第一和摄像机矩阵
,那么第二个摄像机矩阵有下列四种可能的选择:
是
的最后一列。
t的具体空间长度是不能恢复出来的,只能在相差一个尺度因子的情况下恢复平移单位向量。
4个解的几何解释
显然前面两个解的差别就是第一个摄像机到第二个摄像机的平移矢量是反向的。
上下两行的差别在于摄像机绕基线旋转了180度,上图中只有(a)时,重构点同时出现在两个摄像机的前面。
从匹配点对中随机选择n对特征点,采用视图重建的方法,分别基于四种可能的摄像机矩阵重建出对应的三维点,满足景深为正的点数最多的解就是对应的,同时也可以确定相机的外参R和t。
本质矩阵E求解及运动状态恢复的更多相关文章
- 2D-2D:对极几何 基础矩阵F 本质矩阵E 单应矩阵H
对极约束 \[ \boldsymbol{x}_{2}^{T} \boldsymbol{F} \boldsymbol{x}_{1}=\boldsymbol{0} \quad \hat{\boldsymb ...
- 【poj3734】矩阵乘法求解
[题意] 给N个方块排成一列.现在要用红.蓝.绿.黄四种颜色的油漆给这些方块染色.求染成红色方块和染成绿色方块的个数同时为偶数的染色方案的个数,输出对10007取余后的答案.(1<=n<= ...
- 【学习笔记】Vins-Mono论文阅读笔记(二)
估计器初始化简述 单目紧耦合VIO是一个高度非线性的系统,需要在一开始就进行准确的初始化估计.通过将IMU预积分与纯视觉结构进行松耦合对齐,我们得到了必要的初始值. 理解:这里初始化是指通过之前imu ...
- SLAM入门之视觉里程计(5):单应矩阵
在之前的博文OpenCV,计算两幅图像的单应矩阵,介绍调用OpenCV中的函数,通过4对对应的点的坐标计算两个图像之间单应矩阵\(H\),然后调用射影变换函数,将一幅图像变换到另一幅图像的视角中.当时 ...
- 多视几何——三角化求解3D空间点坐标
VINS-Mono / VINS-Fusion中triangulatePoint()函数通过三角化求解空间点坐标,代码所体现的数学描述不是很直观,查找资料,发现参考文献[1]对这个问题进行详细解释,记 ...
- CH Round #30 摆花[矩阵乘法]
摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
- 学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67
本文来自:http://www.matrix67.com/blog/archives/tag/poj大牛的博文学习学习 节选如下部分:矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律:二,矩阵乘法满足 ...
- Android自己定义控件——3D画廊和图像矩阵
转载请注明出处:http://blog.csdn.net/allen315410/article/details/39932689 1.3D画廊的实现 我们知道android系统已经为我们提供好了一个 ...
- 【转】Matrix67:十个利用矩阵乘法解决的经典题目
好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质. 不要以为数学中的矩阵也是黑色屏幕上不断变化的 ...
随机推荐
- iOS 修改UITabBar的默认点击行为
项目截图 当我接到如上图这个需求的时候,评估了一下.感觉如上图的效果用自定义UITabBar的方式就可以实现了(做法类似新浪微博的自定义UITabBar中的不规则按钮),没错,就是干.一番折腾之后,我 ...
- 下载远程(第三方服务器)文件、图片,保存到本地(服务器)的方法、保存抓取远程文件、图片 将图片的二进制字节字符串在HTML页面以图片形式输出 asp.net 文件 操作方法
下载远程(第三方服务器)文件.图片,保存到本地(服务器)的方法.保存抓取远程文件.图片 将一台服务器的文件.图片,保存(下载)到另外一台服务器进行保存的方法: 1 #region 图片下载 2 3 ...
- Android Studio 遇到 No Debuggable Applications 的解决方案
一.在菜单的Tools -> Android -> 勾选 Enable ADB Integration 二.在工程的build.gradle(Module:app)里加上一行代码
- 12C -- 配置EM Express的端口
EM Express是基于web接口的图形化数据库管理工具. 内嵌到数据库中,可以用来监控.管理数据的性能和完成大多数管理工作. EM Express是轻量级的管理工具,减少了数据库服务器的开销.没有 ...
- API设计原则
译序 Qt的设计水准在业界很有口碑,一致.易于掌握和强大的API是Qt最著名的优点之一.此文既是Qt官网上的API设计指导准则,也是Qt在API设计上的实践总结.虽然Qt用的是C++,但其中设计原则和 ...
- HDU 2602 Bone Collector 0/1背包
题目链接:pid=2602">HDU 2602 Bone Collector Bone Collector Time Limit: 2000/1000 MS (Java/Others) ...
- VMware Workstation 11
VMware Workstation 11开始只支持Windows7以上的64位系统,VMware Workstation 10.0.6为最后支持32位和XP的系统. 下载地址: VMware Wor ...
- logstash 如何处理 mongodb 导出来的 _id value数据。 how to custom fields of logstash by mongo mapreduce exported data.(example format: {_id:"xxx"} , value:{})
input { file { path => "c:\aa.json" start_position => "beginning" #sincedb ...
- JDK1.5新特性,基础类库篇,浅谈并发工具包(Concurrency Utilities)
java.util.concurrent, java.util.concurrent.atomic, 和 java.util.concurrent.locks 包提供了高性能的.可扩展的框架,保证开发 ...
- Datatable转实体 实体转换辅助类
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...