zl程序教程

您现在的位置是:首页 >  其他

当前栏目

史上最简SLAM零基础解读(5) - Homography,Fundamental,Essential深入浅出→了解适用场景:共面、非共面、仅旋转

基础 了解 场景 解读 深入浅出 旋转 史上 适用
2023-09-14 09:13:06 时间

本人讲解关于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(RbadatbanaT)Ka1=KbRba(E+da1tabnaT)Ka1(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=tbaRba=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=(KbTEbaKa1)                 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=KbRbaKa1(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×x2H21x1(v×x2)TH21x1=0x2Tv×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矩阵 的使用场景。所以在工程中,四需要根据实际情况选取所需的公式。不然有可能会造成未知的误差

 
 
 
在这里插入图片描述