因为在剖析单目初始化的过程中,需要用到基础矩阵F和单应矩阵H,所以想从基础上推导一下,但是发现几何推导自己没太理解,而且比较抽象,不方便从理论出发落实到实际代码,但是又不想浪费这一过程的总结,于是自己另外开了个篇章来记录自己的思考和理解。

这里是继承了ORB-SLAM3 学习笔记 单目初始化过程剖析3 TrackMonocular->GrabImageMonocular->Track的《2-2-1 对极约束》部分的,有了极限约束,我们尝试用数学公式描述极点、极线和极平面之间的关系。

T是平移矩阵部分,是从点OlO_lOl​到OrO_rOr​的距离。PlP_lPl​是点OlO_lOl​到点PPP的向量,也记作P⃗l\vec P_lPl​。PrP_rPr​是点OrO_rOr​到点PPP的向量,也记作P⃗r\vec P_rPr​。R是旋转矩阵部分。可得下面的关系式:

根据向量的减法,可得:
P⃗r′=P⃗l−T⃗(1)\vec P_r'=\vec P_l - \vec T \tag{1} Pr′​=Pl​−T(1)
把向量P⃗r′\vec P_r'Pr′​进行旋转,可得
P⃗r=RP⃗r′=R(P⃗l−T⃗)(2)\vec P_r= R\vec P_r'=R(\vec P_l - \vec T)\tag{2}Pr​=RPr′​=R(Pl​−T)(2)
∵\because∵ R是正交矩阵,则R可逆:
R−1P⃗r=P⃗r′=(P⃗l−T⃗)=RTP⃗r(3)R^{-1}\vec P_r= \vec P_r'=(\vec P_l - \vec T)=R^T\vec P_r\tag{3}R−1Pr​=Pr′​=(Pl​−T)=RTPr​(3)

三向量P⃗r,P⃗r′,P⃗l−T⃗\vec P_r ,\vec P_r',\vec P_l - \vec T Pr​,Pr′​,Pl​−T共面,由
定理:三个向量 a , b , c 共面的充分必要条件是 (a,b,c)=0
可知它们的混合积为零(混合积对应于有向体积),参考下图:

为了便于理解混合积,用图说话。可以看到,混合积的结果可以表示为底面积S乘以高h,很容易理解:混合积就是有方向的体积。

所以结合定理,因为三向量P⃗r,P⃗r′,P⃗l−T⃗\vec P_r ,\vec P_r',\vec P_l - \vec TPr​,Pr′​,Pl​−T共面
∴\therefore∴ (P⃗l−T⃗)T⋅T×P⃗l=0(4)(\vec P_l - \vec T)^T \cdot T\times\vec P_l=0\tag{4}(Pl​−T)T⋅T×Pl​=0(4)(RTPr)T⋅T×P⃗l=0(5)(R^TP_r)^T \cdot T\times\vec P_l=0\tag{5}(RTPr​)T⋅T×Pl​=0(5)PrTR⋅T×P⃗l=0(6)P_r^TR \cdot T\times\vec P_l=0\tag{6}PrT​R⋅T×Pl​=0(6)PrTR⋅SP⃗l=0(7)P_r^TR \cdot S\vec P_l=0\tag{7}PrT​R⋅SPl​=0(7)PrTRSP⃗l=0(8)P_r^TR S\vec P_l=0\tag{8}PrT​RSPl​=0(8)E=RS(9)E=RS\tag{9}E=RS(9)

其实这里(P⃗l−T⃗)T(\vec P_l - \vec T)^T(Pl​−T)T看的有点不太明白,后来翻了下资料,感觉这里就是用列向量的转置矩阵表示行向量,至于对不对希望大家可以一起讨论下。

其中 ,S 的含义见下图:

总结来说,Essential矩阵的几何推导是基于三向量共面推导出来:

Fundamental 和 Essential 的关系

由上面的式子可以看到,本质矩阵E只能描述摄像机坐标系下两个视图间的约束关系(描述的是ppp和p′p'p′之间的关系),所以它只依赖摄像机的外部参数(R & T)。
如果需要描述像素坐标系下两个图像间的约束关系,它必须在基本矩阵的基础上再进行仿射变换,即依赖内部参数和外部参数。

可以说,F是E的推广,把假设"校准的摄像机"去掉了。本质矩阵(E)+基本矩阵(F):用于描述2个视图间的对极几何关系。
本质矩阵(E)表示的是(1)透视变换:world→\rightarrow→camera
基本矩阵(F)表示的是(2)射影变换:image→\rightarrow→image

其相互关系是:
F=K−TEK−1(10)F=K^{-T}EK^{-1}\tag{10}F=K−TEK−1(10)

总结来说,Fundamental 矩阵带入的是像素点坐标,所以需要内参转换成相机坐标,这也描述了F和E之间的关系:

Fundamental 矩阵代数推导

看了好几篇文章,感觉还是视觉十四讲里面的代数推导比较明晰,我就直接参考过来,当做记录了。
设以第一个相机作为坐标系三维空间的点:

根据针孔相机模型,我们知道两个像素点p1,p2p_1,p_2p1​,p2​的像素位置为

这里 K 为相机内参矩阵,R, t 为两个坐标系的相机运动(如果我们愿意,也可以写成李代数形式)。如果使用齐次坐标,我们也可以把上式写成在乘以非零常数下成立的(up to a scale)等式

现在,取:

这里的 x1,x2x_1,x_2x1​,x2​ 是两个像素点的归一化平面上的坐标。代入上式,得:





Homography 几何推导

由于是假设特征点处于同一平面,因此首先设平面在第一个相机系下的法向量为 N,深度为 d。

则平面方程为:



X1,X2分别为点在两个相机系下的坐标,因此

将上面两式子结合可得

因此单应矩阵为

可以看到其同样含有旋转和平移信息。

对极约束和单应性的区别和联系

  • 两幅图像之间的对极约束和场景的结构无关,即对于任意场景结构的图像都是成立的,他不能给出两幅图像上的点的一一对应关系,只能将点映射到线。而单应矩阵可以将点对应到点。
  • 单应矩阵,不像对极约束那样完全不限制场景的结构,单应矩阵要求场景中的点都在同一平面上。
  • 当相机只有旋转没有平移时,可使用单应矩阵估计运动,因为此时平移为0,计算得到的本质矩阵也为0,进而旋转也为0,得到了错误的解,而使用单应性依然能够正确计算。

SLAM 学习笔记 本质矩阵E、基础矩阵F、单应矩阵H的推导相关推荐

  1. linux vim编辑矩阵乘,LM算法计算单应矩阵

    LM算法计算单应矩阵 slam 单应矩阵 单应矩阵的定义 什么是单应矩阵呢?其实简单来说,就是两个图像之间的变换矩阵.什么意思呢,可以考虑这样一个情形: 你有一个相机,拍摄一个建筑物,首先在某一个视角 ...

  2. 多视图几何总结——基础矩阵、本质矩阵和单应矩阵的求解过程

    多视图几何总结--基础矩阵.本质矩阵和单应矩阵的求解过程 多视图几何总结--基础矩阵.本质矩阵和单应矩阵的求解过程 1. 说明--其实求解过程大同小异 2. 单应矩阵求解过程 2.1 基于代数误差的线 ...

  3. 什么是单应矩阵和本质矩阵

    知乎上面的大牛还是很多,直接搜Homography或者单应矩阵就能得到很多大神的回答,可能回答中的一句话或者一个链接就够自己学习很久. 其实在之前研究双目视觉的时候就接触了对极几何,通过视觉就可以得到 ...

  4. 多视图几何总结——单应矩阵和基础矩阵的兼容关系

    多视图几何总结--单应矩阵和基础矩阵的兼容关系 多视图几何总结--单应矩阵和基础矩阵的兼容关系 (1)单应矩阵和基础矩阵的兼容性 (2)基础矩阵 -> 单应矩阵 (3)单应矩阵 -> 基础 ...

  5. MVG读书笔记——单应矩阵估计这件小事(一)

    参数估计是计算机视觉中经常遇到的一个问题,为较好的估计参数,人们发明了各种各样的算法.这里我们就以单应矩阵H的估计为例,一个个介绍这些常用算法. DLT算法 DLT(direct linear tra ...

  6. 基本矩阵、本质矩阵和单应矩阵

    两幅视图存在两个关系:第一种,通过对极几何一幅图像上的点可以确定另外一幅图像上的一条直线:另外一种,通过上一种映射,一幅图像上的点可以确定另外一幅图像上的一个点,这个点是第一幅图像通过光心和图像点的射 ...

  7. 09_对极约束与单应矩阵

    前言 根据上一节的介绍,我们已经有了匹配好的点对,然后我们就可以根据点对估计相机的运动.这里由于相机的原理不同,我们要分情况讨论: 如果是单目相机,此时我们仅知道2D的像素坐标,要根据两组2D点估计相 ...

  8. 视觉SLAM 第7讲 本质矩阵 基础矩阵 单应矩阵 知识点/证明/理解/秩/自由度

    视觉SLAM 第7讲 本质矩阵 基础矩阵 单应矩阵 证明/理解/秩/自由度 1. 基础知识 2. 本质矩阵E 2.1 本质矩阵的秩为什么是2 2.2 本质矩阵的自由度为什么是5 3. 基础矩阵F 3. ...

  9. SLAM笔记(四)运动恢复结构的几何数学(本征矩阵、单应矩阵、基础矩阵)

    1. 间接法进行运动恢复的前提假设 对于结构与运动或视觉三维重建中,通常假设已经通过特征匹配等方法获取了匹配好的点对. 先求出匹配点对再获取结构和运动信息的方法称作间接法. 间接法最重要的三个假设是: ...

  10. Opencv学习(3)——基础矩阵F、本质矩阵E、单应矩阵H 函数解析

    官网:https://docs.opencv.org/3.4.0/d9/d0c/group__calib3d.html#ga4abc2ece9fab9398f2e560d53c8c9780 基础矩阵F ...

最新文章

  1. http://blog.csdn.net/u011001723/article/details/456210272222
  2. 深入浅出学习Struts框架(八):分析Struts框架实例3
  3. vant显示日期格式_Vue+Vant ui实现日期时间选择
  4. 分布式版本控制系统之Git
  5. 与kylin_什么是Kylin,Kylin的学习
  6. MS SQL Server 常用操作
  7. matlab设置固定的窗宽窗位,python实现CT窗宽窗位的调整(即指定HU值保存图像)...
  8. 新加用户被保护的解决办法
  9. 进程间通信 --- 命名管道 有名管道存在与内存中,无名管道存在与文件系统中 换种角度看问题
  10. 上班划水,给男朋友做个数字炸弹游戏
  11. SQL 计算月同比、月环比
  12. 悉尼大学计算机一年制硕士,悉尼大学一年制硕士
  13. 6、编写应用程序,计算两个非零正整数的最大公约数和最小公倍数,要求两个非零正整数从键盘输入。
  14. 基于产生式表示的动物识别系统
  15. python输入自己的出生年月日命运_出生年月日五行查询表 免费五行缺失查询表...
  16. 豆瓣电台WP7客户端 开发记录5
  17. 信创操作系统--统信UOS桌面版(玩游戏:安装Steam、Linux游戏、Windows游戏)
  18. 特征工程——二手车交易预测
  19. Vue项目中实现sm4 CBC、ECB加密传输
  20. JavaScript恶意代码

热门文章

  1. 四大行业晋身今秋求贤大户 游戏人才缺口奇大
  2. 数据清洗_缺失值处理
  3. java ppt转图片 失真_Apache POI将PPT转换成图片实例代码
  4. 《达芬奇密码》读后感
  5. 核心单词Word List 3
  6. 25.HTTP协议和WEB服务器APACHE
  7. 自我觉察的心理测试软件,看见自己|自我觉察的11个妙招
  8. Excel如何快速删除图片背景?
  9. 圆周运动的古中医学摘抄
  10. informatica joiner组件学习