admin管理员组文章数量:1612824
本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始
有兴趣的朋友可以加微信 17575010159 相互讨论技术 - 文末公众号也可关注
一、前言
通过文首的一系列博客,相信大家对于 Homography,Fundamental,Essential 矩阵已经有了一一定认知,比如 单应性Homography 矩阵如下所示(前面的博文有推导,这里的
E
\mathbf E
E)为单位矩阵
H
b
a
=
K
b
(
R
b
a
−
t
b
a
n
a
T
d
a
)
K
a
−
1
=
K
b
R
b
a
(
E
+
1
d
a
⋅
t
a
b
n
a
T
)
K
a
−
1
(01)
\tag{01} \color{blue} \mathbf{H}_{b a}=\mathbf{K}_{b}\left(\mathbf{R}_{b a}-\frac{\mathbf{t}_{b a} \mathbf{n}_{a}^{T}}{d_{a}}\right) \mathbf{K}_{a}^{-1}=\mathbf{K}_{b} \mathbf{R}_{b a}\left(\mathbf{E}+\frac{1}{d_{a}} \cdot \mathbf{t}_{a b} \mathbf{n}_{a}^{T}\right) \mathbf{K}_{a}^{-1}
Hba=Kb(Rba−datbanaT)Ka−1=KbRba(E+da1⋅tabnaT)Ka−1(01)
其上的
K
a
,
K
b
\mathbf{K}_{a},\mathbf{K}_{b}
Ka,Kb 是两个相机的内参,
d
a
d_a
da 是相机坐标系 a 到特征点平面的距离,
n
\mathbf{n}
n是特征点平面法向量,
R
b
a
t
b
a
\mathbf{R_{ba}} \mathbf{t_{ba}}
Rbatba 是 相机坐标系a 到 相机坐标系b 的旋转矩阵与平移矩阵。另外再来看看本质矩阵Essential,以及基本矩阵Fundamental:
E
b
a
=
t
b
a
∧
R
b
a
=
t
b
a
×
R
b
a
p
a
T
E
b
a
p
b
=
0
(02)
\tag{02} \color{blue} \mathbf E_{ba}=\mathbf t_{ba} ^{\wedge} \mathbf R_{ba}=\mathbf t_{ba}\times \mathbf R_{ba}~~~~~~~~~\color{blue} p_a^T \mathbf E_{ba}p_b=0
Eba=tba∧Rba=tba×Rba paTEbapb=0(02)
F
b
a
=
(
K
b
−
T
E
b
a
K
a
−
1
)
v
a
T
F
b
a
v
b
=
0
(03)
\tag{03} \color{blue} \mathbf F_{ba}=(\mathbf K_b^{-T} \mathbf E_{ba}\mathbf K_a^{-1}) ~~~~~~~~~~~~~~~~~ \color{blue} v_a^T\mathbf F_{ba}v_b=0
Fba=(Kb−TEbaKa−1) vaTFbavb=0(03)需要注意上面的
p
a
p_a
pa,
p
b
p_b
pb 是归一化之后的图像坐标,
v
a
v_a
va,
v
b
v_b
vb 为像素坐标。从上面的式子中,可以很明显的看到,在已知 a,b 摄像头内参的情况下,可以把
F
\mathbf F
F 转换成
E
\mathbf E
E 矩阵,然后再进行处理,一般在工程也是这样做的。那么下面就来细致的讨论一下 单应性Homography以及本质 矩阵Essential。
二、Homography
我们首先来看一下单应性Homography矩阵,根据前面的博客,已经知道 Homography矩阵 是由特征点所在平面推导而来,其平面参数就是 (02)式 中的 d a d_a da, n \mathbf n n。竟然是由特征点共面推导而来,那么他的适用场景肯定是特征点共面。
但是这里也存在一个问题,比如: 在三维空间中,有四个特征点共面。并且已知其分别在相机 a,b 的投影(归一化图像坐标)。这样根据两个相机的投影图像,可以获得4对匹配特征点的图像坐标,就可以求解出 H \mathbf H H 矩阵。那么此时,在投影图像a中选取了一个非共面图像坐标(该坐标对应的三维点,与之前的4个三维点不在同一平面)。使用 H \mathbf H H 矩阵,求解出投影图像b中对应的坐标。
简单的说,就是由共面的4对匹配点计算出来的 H \mathbf H H 矩阵,应用在不共面的图像坐标上,这个时候,会造成什么样的后果?或者说什么样的误差?这个误差是否可以求解? 求解出来之后我们是否能够纠正呢?
纯旋转
首先从公式入手,观察(01)式,
d
a
d_a
da 表示相机坐标系原点a,到共面特征点平面的距离。当
t
b
a
=
0
\mathbf t_{ba}=0
tba=0, 可以发现公式变成如下
H
b
a
=
K
b
R
b
a
K
a
−
1
(04)
\tag{04} \color{blue} \mathbf{H}_{b a}=\mathbf{K}_{b}\mathbf{R}_{ba}\mathbf{K}_{a}^{-1}
Hba=KbRbaKa−1(04)也就是说,单两个相机坐标系原点相同,或者说同一相机在仅旋转的情况,
H
b
a
\mathbf H_{ba}
Hba 与深度是没有关系的,也就是说,无论你选取的是那个那个点,无论选取三维空间中的那个点,使用
H
b
a
\mathbf H_{ba}
Hba 矩阵,都能完美的从图像坐标系a转换到图像坐标系b中。但是从另外一个角度来说,如果位移
t
b
a
=
0
\mathbf t_{ba}=0
tba=0(或者为无穷趋近于0时候) ,则无法计算出深度
d
a
d_a
da,在后面会进行讲解。所以在做全景拼接的时候,要尽量只用纯旋转。
非纯旋转
上面讲解的是纯旋转的情况,如果其为非共面点,也非纯旋转,那么会造成什么样的影响呢?如下图所示:
假其上的
p
′
p'
p′ 为非共面的点,首先连接其相机坐标系
O
1
O_1
O1 的原点,其与投影平面相交于
x
1
x_1
x1。这个时候可以这样理解,
x
1
x_1
x1 代表的是三维空间中的
p
p
p 点。根据前面来的推导,我们知道齐次坐标是具备尺度不变性的,那么点
x
1
x_1
x1 与 点
p
′
p'
p′ 他们的意义是一样的,都可以认为其是
p
p
p 点在不同平面的投影(主要跟坐标
z
z
z 相关)。如果已知
x
1
x_1
x1坐标,然后通过齐次坐标,利用共面点求解出来的
H
21
\mathbf{H}_{21}
H21 计算出在图像2中的投影为
x
2
x_2
x2。
因为
H
21
\mathbf{H}_{21}
H21 会强制
p
′
p'
p′ 落到三维平面上,也就是当作
p
p
p 点来对待,这样投影到图像2中,就成了点
x
2
x_2
x2。但是根据对极几何的原理,其应该是
x
2
′
x'_2
x2′, 如果再已知
R
21
\mathbf R_{21}
R21 与
t
21
\mathbf t_{21}
t21 的情况下,通过如下公式,是可以计算出点
x
2
′
x'_2
x2′:
x
2
′
=
R
21
x
1
+
t
21
(05)
\tag{05} \color{blue} x'_{2}=\mathbf R_{21}x_1+\mathbf t_{21}
x2′=R21x1+t21(05)另外:
x
2
=
H
21
x
1
(06)
\tag{06} \color{blue} x_2=\mathbf H_{21}x_1
x2=H21x1(06)
求得
x
2
′
x'_{2}
x2′ 与
x
2
x_2
x2 之后,当然就可以计算他的误差呢。所以通过上面的分析,Homography矩阵不适用于共面且非纯旋转的情况。
三、Essential
通过上图,我们可以看到,
x
2
x_2
x2,
x
2
′
x'_2
x2′ 是位于极线上的,他们的坐标如果都知道,就能够得到极线方程,其上一个
p
′
p'
p′确定一条直线,如果还有另外一个非共面的点,那么就能够再确定一条极线。新的图示如下:
如果能够确定联调极线,那么极点
e
2
e_2
e2 也就被确定了,极点确定了,
H
21
\mathbf{H}_{21}
H21 也知道,那么不使用本质矩阵,也可以构建极线几何了。则就是所谓的六点法。四个共面的点确定
H
\mathbf{H}
H,再由两个非共面的点确定极点。
但是八点法计算求解本征矩阵不能应用于共面的情形,利用向量叉乘自己结果为
0
\mathbf 0
0 这条性质即可推导:
x
2
=
H
21
x
1
⇒
x
2
H
21
x
1
=
0
(07)
\tag{07} \color{blue} x_2=\mathbf H_{21}x_1~~~~\Rightarrow~~~~x_2 \mathbf H_{21}x_1=\mathbf 0
x2=H21x1 ⇒ x2H21x1=0(07)
其上,我们可以
另外,任意三维向量
v
v
v 和
x
2
x_{2}
x2 的叉乘肯定垂直于向量
x
2
x_{2}
x2 ,且由于共面,所以有:
v
×
x
2
⊥
H
21
x
1
⇒
(
v
×
x
2
)
T
H
21
x
1
=
0
⇒
−
x
2
T
v
×
H
21
x
1
=
0
⇒
x
2
T
v
×
H
21
x
1
=
0
(08)
\tag{08} \color{blue} \begin{aligned} & {v{\times} x_{2} \perp H_{21} x_{1} } \\ \Rightarrow &\left(v{\times} x_{2}\right)^{T} H_{21} x_{1}=0 \\ \Rightarrow &-x_{2}^{T}v{\times} H_{21} x_{1}=0 \\ \Rightarrow & x_{2}^{T}v{\times} H_{21} x_{1}=0 \end{aligned}
⇒⇒⇒v×x2⊥H21x1(v×x2)TH21x1=0−x2Tv×H21x1=0x2Tv×H21x1=0(08)根据上面的推导可以得到本质矩阵
E
=
v
×
H
21
\mathbf E=v \times \mathbf H_{21}
E=v×H21, 很明显的可以知道,任意一个向量叉乘
H
21
\mathbf H_{21}
H21 之后,其都可以作为一个本质矩阵。 这说明
E
\mathbf E
E 在这种情况下有无穷多解都能满足
x
2
T
E
x
1
=
0
x_2^TEx_1=0
x2TEx1=0, 所以说这种情况下是不适合使用八点发的。
四、结语
通过该篇博客主要分析了 Homography矩阵 以及 Essential矩阵 的使用场景。所以在工程中,四需要根据实际情况选取所需的公式。不然有可能会造成未知的误差
本文标签: 深入浅出史上场景基础fundamental
版权声明:本文标题:史上最简SLAM零基础解读(5) - Homography,Fundamental,Essential深入浅出→了解适用场景:共面、非共面、仅旋转 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728642821a1167333.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论