根据定义,本质矩阵 E=t∧R\boldsymbol{E}=\boldsymbol{t}^{\wedge} \boldsymbol{R}E=t∧R。它是一个 3×33 × 33×3 的矩阵,内有 999 个未知数。那么,是不是任意一个 3×33 × 33×3 的矩阵都可以被当成本质矩阵呢?从 E\boldsymbol{E}E 的构造方式上看,有以下值得注意的地方:

• 本质矩阵是由对极约束定义的。由于对极约束是等式为0的约束,所以对 EEE 乘以任意非零常数后, 对极约束依然满足。我们把这件事情称为 EEE 在不同尺度下是等价的。

• 根据 E=t∧R\boldsymbol{E}=\boldsymbol{t}^{\wedge} \boldsymbol{R}E=t∧R,可以证明,本质矩阵 EEE 的奇异值必定是 [σ,σ,0]T[\sigma, \sigma, 0]^{T}[σ,σ,0]T 的形式。这称为本质矩阵的内在性质。

• 另一方面,由于平移和旋转各有三个自由度,故E=t∧R\boldsymbol{E}=\boldsymbol{t}^{\wedge} \boldsymbol{R}E=t∧R共有 666 个自由度。但由于尺度等价性,故 E\boldsymbol{E}E 实际上有 555 个自由度。

EEE 具有五个自由度的事实,表明我们最少可以用五对点来求解 EEE。但是, EEE 的内在性质是一种非线性性质,在求解线性方程时会带来麻烦,因此,也可以只考虑它的尺度等价性,使用八对点来估计 EEE——这就是经典的八点法Eight-point-algorithm)。八点法只利用了 EEE 的线性性质,因此可以在线性代数框架下求解。下面我们来看八点法是如何工作的。

考虑一对匹配点,它们的归一化坐标为:x1=[u1,v1,1]T,x2=[u2,v2,1]T\boldsymbol{x}_{1}=\left[u_{1}, v_{1}, 1\right]^{T}, \boldsymbol{x}_{2}=\left[u_{2}, v_{2}, 1\right]^{T}x1​=[u1​,v1​,1]T,x2​=[u2​,v2​,1]T。根据对极约束,有:

(u2,v2,1)(e1e2e3e4e5e6e7e8e9)(u1v11)=0\left(u_{2}, v_{2}, 1\right)\left(\begin{array}{ccc}e_{1} & e_{2} & e_{3} \\ e_{4} & e_{5} & e_{6} \\ e_{7} & e_{8} & e_{9}\end{array}\right)\left(\begin{array}{c}u_{1} \\ v_{1} \\ 1\end{array}\right)=0(u2​,v2​,1)⎝⎛​e1​e4​e7​​e2​e5​e8​​e3​e6​e9​​⎠⎞​⎝⎛​u1​v1​1​⎠⎞​=0

我们把矩阵 EEE 展开,写成向量的形式:

e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]T\boldsymbol{e}=\left[e_{1}, e_{2}, e_{3}, e_{4}, e_{5}, e_{6}, e_{7}, e_{8}, e_{9}\right]^{T}e=[e1​,e2​,e3​,e4​,e5​,e6​,e7​,e8​,e9​]T

那么对极约束可以写成与 eee 有关的线性形式:

[u2u1,u2v1,u2,v2u1,v2v1,v2,u1,v1,1]⋅e=0\left[u_{2} u_{1}, u_{2} v_{1}, u_{2}, v_{2} u_{1}, v_{2} v_{1}, v_{2}, u_{1}, v_{1}, 1\right] \cdot e=0[u2​u1​,u2​v1​,u2​,v2​u1​,v2​v1​,v2​,u1​,v1​,1]⋅e=0

同理,对于其它点对也有相同的表示。我们把所有点都放到一个方程中,变成线性方
程组 (ui,viu^{i}, v^{i}ui,vi表示第 i 个特征点,以此类推):

(u21u11u21v11u21v21u11v21v11v21u11v111u22u12u22v12u22v22u12v22v12v22u12v121⋮⋮⋮⋮⋮⋮⋮⋮u28u18u28v18u28v28u18v28v18v28u18v181)(e1e2e3e4e5e6e7e8e9)=0\left(\begin{array}{ccccccccc}u_{2}^{1} u_{1}^{1} & u_{2}^{1} v_{1}^{1} & u_{2}^{1} & v_{2}^{1} u_{1}^{1} & v_{2}^{1} v_{1}^{1} & v_{2}^{1} & u_{1}^{1} & v_{1}^{1} & 1 \\ u_{2}^{2} u_{1}^{2} & u_{2}^{2} v_{1}^{2} & u_{2}^{2} & v_{2}^{2} u_{1}^{2} & v_{2}^{2} v_{1}^{2} & v_{2}^{2} & u_{1}^{2} & v_{1}^{2} & 1 \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \\ u_{2}^{8} u_{1}^{8} & u_{2}^{8} v_{1}^{8} & u_{2}^{8} & v_{2}^{8} u_{1}^{8} & v_{2}^{8} v_{1}^{8} & v_{2}^{8} & u_{1}^{8} & v_{1}^{8} & 1\end{array}\right)\left(\begin{array}{c}e_{1} \\ e_{2} \\ e_{3} \\ e_{4} \\ e_{5} \\ e_{6} \\ e_{7} \\ e_{8} \\ e_{9}\end{array}\right)=0⎝⎜⎜⎜⎛​u21​u11​u22​u12​⋮u28​u18​​u21​v11​u22​v12​⋮u28​v18​​u21​u22​⋮u28​​v21​u11​v22​u12​⋮v28​u18​​v21​v11​v22​v12​⋮v28​v18​​v21​v22​⋮v28​​u11​u12​⋮u18​​v11​v12​⋮v18​​111​⎠⎟⎟⎟⎞​⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛​e1​e2​e3​e4​e5​e6​e7​e8​e9​​⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞​=0

这八个方程构成了一个线性方程组。它的系数矩阵由特征点位置构成,大小为 8×98 × 98×9。eee 位于该矩阵的零空间中。如果系数矩阵是满秩的(即秩为 888),那么它的零空间维数为 111,也就是 eee 构成一条线。这与 eee 的尺度等价性是一致的。如果八对匹配点组成的矩阵满足秩为 888 的条件,那么 EEE 的各元素就可由上述方程解得。

接下来的问题是如何根据已经估得的本质矩阵 EEE ,恢复出相机的运动 R,tR, tR,t。这个过程是由奇异值分解(SVDSVDSVD)得到的。设 EEE 的 SVDSVDSVD 分解为:

E=UΣVT\boldsymbol{E}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T}E=UΣVT

其中 U,VU, VU,V 为正交阵, ΣΣΣ 为奇异值矩阵。根据 EEE 的内在性质,我们知道 Σ=diag(σ,σ,0)Σ = diag(σ, σ, 0)Σ=diag(σ,σ,0)。
在 SVDSVDSVD 分解中,对于任意一个 EEE,存在两个可能的 t,Rt, Rt,R 与它对应:

t1∧=URZ(π2)ΣUT,R1=URZT(π2)VTt2∧=URZ(−π2)ΣUT,R2=URZT(−π2)VT\begin{aligned} \boldsymbol{t}_{1}^{\wedge} &=\boldsymbol{U} \boldsymbol{R}_{Z}\left(\frac{\pi}{2}\right) \boldsymbol{\Sigma} \boldsymbol{U}^{T}, \quad \boldsymbol{R}_{1}=\boldsymbol{U} \boldsymbol{R}_{Z}^{T}\left(\frac{\pi}{2}\right) \boldsymbol{V}^{T} \\ \boldsymbol{t}_{2}^{\wedge} &=\boldsymbol{U} \boldsymbol{R}_{Z}\left(-\frac{\pi}{2}\right) \boldsymbol{\Sigma} \boldsymbol{U}^{T}, \quad \boldsymbol{R}_{2}=\boldsymbol{U} \boldsymbol{R}_{Z}^{T}\left(-\frac{\pi}{2}\right) \boldsymbol{V}^{T} \end{aligned}t1∧​t2∧​​=URZ​(2π​)ΣUT,R1​=URZT​(2π​)VT=URZ​(−2π​)ΣUT,R2​=URZT​(−2π​)VT​

其中 RZ(π2)\boldsymbol{R}_{Z}\left(\frac{\pi}{2}\right)RZ​(2π​) 表示沿 ZZZ 轴旋转 909090 度得到的旋转矩阵。同时,由于 −E−E−E 和 EEE 等价,所以对任意一个 ttt 取负号,也会得到同样的结果。因此,从 EEE 分解到 t,Rt, Rt,R 时,一共存在四个可能的解(恢复出摄像机投影矩阵的四个可能解)。


分解本质矩阵得到的四个解。在保持投影点(红点)不变的情况下,两个相机以及空间点一共有四种可能的情况。

上图形象地显示了分解本质矩阵得到的四个解。我们已知空间点在相机(蓝色线)上的投影(红点),想要求解相机的运动。在保持红点不变的情况下,可以画出四种可能的情况,不过幸运的是,只有第一种解中, PPP 在两个相机中都具有正的深度。因此,只要把任意一点代入四种解中,检测该点在两个相机下的深度,就可以确定哪个解是正确的了。

如果利用 EEE 的内在性质,那么它只有五个自由度。所以最小可以通过五对点来求解相机运动。然而这种做法形式复杂,从工程实现角度考虑,由于平时通常会有几十对乃至上百对的匹配点,从八对减至五对意义并不明显。为保持简单,我们这里就只介绍基本的八点法了。

剩下的问题还有一个:根据线性方程解出的 EEE,可能不满足 EEE 的内在性质——它的奇异值不一定为 σ,σ,0σ, σ, 0σ,σ,0 的形式。这时,在做 SVDSVDSVD 时,我们会刻意地把 ΣΣΣ 矩阵调整成上面的样子。通常的做法是,对八点法求得的 EEE 进行 SVDSVDSVD 分解后,会得到奇异值矩阵 Σ=diag(σ1,σ2,σ3)Σ = diag(σ1, σ2, σ3)Σ=diag(σ1,σ2,σ3),不妨设 σ1≥σ2≥σ3σ1 ≥ σ2 ≥ σ3σ1≥σ2≥σ3。取:

E=Udiag⁡(σ1+σ22,σ1+σ22,0)VT\boldsymbol{E}=\boldsymbol{U} \operatorname{diag}\left(\frac{\sigma_{1}+\sigma_{2}}{2}, \frac{\sigma_{1}+\sigma_{2}}{2}, 0\right) \boldsymbol{V}^{T}E=Udiag(2σ1​+σ2​​,2σ1​+σ2​​,0)VT

这相当于是把求出来的矩阵投影到了 EEE 所在的流形上。当然,更简单的做法是将奇异值矩阵取成 diag(1,1,0)diag(1, 1, 0)diag(1,1,0),因为 EEE 具有尺度等价性,这样做也是合理的。

分解本质矩阵
https://zhuanlan.zhihu.com/p/349741190

https://gutsgwh1997.github.io/2020/05/26/%E5%8F%8D%E5%AF%B9%E7%A7%B0%E7%9F%A9%E9%98%B5%E7%9A%84%E6%80%A7%E8%B4%A8/

(U[00a])∧=U[0−a0a00000]UT\left(U\left[\begin{array}{l}0 \\ 0 \\ a\end{array}\right]\right)^{\wedge}=U\left[\begin{array}{ccc}0 & -a & 0 \\ a & 0 & 0 \\ 0 & 0 & 0\end{array}\right] U^{T}⎝⎛​U⎣⎡​00a​⎦⎤​⎠⎞​∧=U⎣⎡​0a0​−a00​000​⎦⎤​UT

(Ub)∧=Ub∧UT(U b)^{\wedge}=U b^{\wedge} U^{T}(Ub)∧=Ub∧UT
⇔(Ub)∧U=Ub∧UTU=Ub∧\Leftrightarrow(U b)^{\wedge} U=U b^{\wedge} U^{T} U=U b^{\wedge}⇔(Ub)∧U=Ub∧UTU=Ub∧
⇔∀a∈R3,(Ub)∧Ua=Ub∧a\Leftrightarrow \forall a \in R^{3}, \quad(U b)^{\wedge} U a=U b^{\wedge} a⇔∀a∈R3,(Ub)∧Ua=Ub∧a
⇔∀a∈R3,(Ub)×(Ua)=U(b×a)\Leftrightarrow \forall a \in R^{3}, \quad(U b) \times(U a)=U(b \times a)⇔∀a∈R3,(Ub)×(Ua)=U(b×a)

本质矩阵 基础矩阵 单应矩阵 (2)相关推荐

  1. Colmap学习三:后端Initialization部分(基础矩阵F、本质矩阵E和单应矩阵H)

    算矩阵的基础知识 解析本质.基础.单应矩阵的自由度 1 寻找初始像对 1.1手动选择ID 1.2自动筛选 ①prior focal length存在情况下,开始筛选 匹配点数由小到大排序 第二张候选影 ...

  2. SLAM基础- 题目:基础矩阵F、本质矩阵E和单应矩阵H的自由度和秩

    主要分析:基础矩阵F.本质矩阵E和单应矩阵H的自由度和秩,首先两个问题,尺度归一化和秩 尺度归一化: 以本质矩阵为例,表达两帧的相机归一化坐标之间的对应关系 将矩阵写成向量,转化为下式: 由于等式右侧 ...

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

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

  4. 计算机视觉三维重建的几何基础:坐标系与关键矩阵(基础矩阵、本质矩阵、单应矩阵)...

    作者丨李迎松@知乎 来源丨https://zhuanlan.zhihu.com/p/159194599 编辑丨3D视觉工坊 你站在桥上看风景, 看风景人在楼上看你. 明月装饰了你的窗子, 你装饰了别人 ...

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

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

  6. 单应矩阵,基本矩阵,本质矩阵

    1.归一化图像坐标 2.本质矩阵 essential matrix 2.1 本质矩阵的推导 2.2特点 3.相机内参 4.基本矩阵 fundamental matrix 4.2基本矩阵推导 4.1特点 ...

  7. 内参矩阵、外参矩阵、旋转矩阵、平移矩阵、单应矩阵、本征矩阵、基础矩阵

    自己在单目结构光系统.双单目结构光系统及双目相机系统学习的过程中接触到如标题所列的各种矩阵,总感觉理解不到位,现在特总结下,方便日后查阅及修正自己的理解. 自己已经总结了单目相机各坐标系的变换,链接如 ...

  8. 单应矩阵(Homography)基本概念和代码测试

    简 介: 应用棋盘格图片或者相机图片中与标准棋盘格之间的单应矩阵.其中应用到opencv中的findChessboardCorners, findHomographys等函数. 这位利用单应矩阵进行下 ...

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

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

  10. 多视图几何总结——基础矩阵、本质矩阵和单应矩阵的自由度分析

    多视图几何总结--基础矩阵.本质矩阵和单应矩阵的自由度分析 多视图几何总结--基础矩阵.本质矩阵和单应矩阵的自由度分析 总结 基础矩阵自由度 (1)几何推导 (2)代数推导 (3)直观理解 本质矩阵自 ...

最新文章

  1. “输入字符不是 MATLAB 语句或表达式中的有效字符”的解决办法
  2. XV6源代码阅读-中断与系统调用
  3. 牛客网-剑指Offer-复杂链表的复制
  4. std string与线程安全_这才是现代C++单例模式简单又安全的实现
  5. 利用Matlab求解线性规划问题
  6. lightswitch 添加 TreeView 控件
  7. 一步一步跟我学习hadoop(5)----hadoop Map/Reduce教程(2)
  8. Quartz 2 定时任务(一):基本使用指南
  9. 10个大数据领域的杰出公司
  10. ❤️《分布式 Dubbo+Zookenper+SpringBoot》(建议收藏)❤️
  11. 自加载宏让你的Excel支持正则处理函数
  12. 天气 android 源码,android 天气预报app源码
  13. windows 7 旗舰版下,安装vs2010旗舰版终于成功!
  14. JAVA利用jsoup爬取百度热点信息
  15. 云加数支撑商业地产转型——无止境的商业想象力测试
  16. 祝新年快乐html小程序,小程序网页开发真诚的祝福大家2018...
  17. 国内TCP单边 加速 的 正确 做法
  18. 安装和卸载 MS SQL Server 2012数据库
  19. centos7安装otrs
  20. 【通信原理】#19 基于matlab的交织与解交织

热门文章

  1. qwidget设置背景颜色_Python+PyQt编程示例:设置窗口背景色及分割条颜色
  2. 论文笔记:Semantic Relation Reasoning for Shot-Stable Few-Shot Object Detection
  3. 系统类配置(六) ubuntu16.04命令行安装Nvidia显卡驱动(操作指令详细注释版)
  4. autotools工具介绍
  5. hulu往届笔试题及解题思路
  6. 第三十八篇 pandas模块
  7. 微信小程序生成海报分享:canvas绘制文字溢出如何换行
  8. 几校联考——day1题解
  9. Python 字典(Dictionary) 基本操作
  10. 关于mysql使用命令行时出现Data too long for column的解决方案: