视觉SLAM十四讲阅读笔记三-单目相机中的对极几何


这篇文章是视觉SLAM十四讲第7讲对极几何部分阅读过程中总结和记录的学习内容,属于单目SLAM的基础理论内容。

概述

在特征提取和匹配任务完成后,我们希望根据匹配的点对估计相机的运动。但是由于相机原理的不同需要采取不同的方法:

  • 对于单目相机,只知道2D的像素坐标,所以问题是根据两组2D点估计相机运动。该问题用对极几何解决。
  • 对于双目、RGB-D相机,或经某种方法得到了距离信息,问题就可以根据两组3D点估计运动。该问题用ICP解决。
  • 如果有3D点及其在相机的投影位置,也能估计相机的运动。该问题用PnP求解。

在ORB_SLAM2系统中,单目初始化过程会使用专门的初始化器完成由两帧图像完成的初始化,该过程使用先后两帧满足关键点数条件的图像帧,使用对极几何约束方法进行求解,得到基础矩阵和单应矩阵,估计出相机的位姿;接着会使用三角测量,计算图像帧中特征点的空间位置。再往后的处理过程,在LocalMapping线程也会使用对极约束、三角测量生成新的地图点。因此,对极约束和三角测量在ORB_SLAM2系统中有着举足轻重的地位,有必要深入学习一下。

对极约束

假设得到了一堆匹配好的特征点,如下图所示。如果由若干对(具体多少呢?)这样的匹配点,就可以通过这些二维图像点的对应关系,恢复出在两帧之间相机的运动(位姿)。

在第一帧(左)图像的坐标系下,设$P$的空间位置为:

$P=[X,Y,Z]^T$

根据针孔相机模型可以得到两个像素点(特征点)$p_1$,$p_2$的像素位置为:

$s_1p_1=KP$,$s_2p_2=K(RP+t)$

其中$K$为相机内参矩阵,$R$,$t$为两个坐标系的相机运动,$s1$和$s2$分别表示两个像素点的深度。使用齐次坐标,可以把上式写成在乘以非零常数下成立的等式:

$p_1=KP$,$p_2=K(RP+t)$

在2D-2D问题中,我们只有像素坐标$p_1$和$p_2$,$P$是未知的,那该怎么办? 此时可以引入一个归一化坐标的概念。取:

$x_1=K^{-1}p_1$,$x_2=K^{-1}p_2$

其中$x_1$,$x_2$是两个像素点的归一化平面上的坐标。带入上式,得:

$x_2=Rx_1+t$

两边同时左乘$t^\wedge$,根据$^\wedge$的定义,相当于两侧同时与$t$做外积:

$t^\wedge x_2=t^\wedge Rx_1$

两侧同时左乘$x^T_2$:

$x^T_2t^\wedge x_2=x^T_2t^\wedge Rx_1$

等式左侧$t^\wedge x_2$是一个与$t$和$x_2$都垂直的向量,再和$x_2$做内积时,将得到0。因此,有如下简洁的式子:

$x^T_2t^\wedge Rx_1=0$

重新代入$p_1$,$p_2$,有:

$p^T_2K^{-T}t^\wedge RK^{-1}p_1=0$

上述两个式子都称为对极约束,其几何意义是$O_1$,$P_1$,$O_2$三者共面。对极约束中同时包含了平移和旋转。把中间部分分别记作两个矩阵:基础矩阵(Fundamental Matrix)$F$本质矩阵(Essential Matrix)$E$

$E=t^\wedge R$,$F=K^{-T}EK^{-1}$

化简得到简化的对极约束:

$x^T_2Ex_1=p^T_2Fp_1=0$

对极约束简洁地给出了两个匹配点的空间位置关系。于是,相机位姿估计问题变为以下两步:

  1. 根据配对点的像素位置求出$E$或者$F$;
  2. 根据$E$或者$F$求出$R$,$t$。

由于$E$和$F$相差了相机内参,而内参在SLAM中通常是已知的,所以实践中往往使用形式更加简单的$E$,当然了ORB_SLAM2中使用的是基础矩阵和单应矩阵。

本质矩阵$E$求解

本质矩阵$E=t^\wedge R$,它是一个$3×3$的矩阵,内有9个未知数。从$E$的构造方式看,它由几个重要的特性:

  1. 本质矩阵是由对极约束定义的。由于对极约束是等式为0的约束,所以对$E$乘以任何非零常数后,对极约束依然满足。这一点被称为E在不同尺度下是等价的
  2. 根据$E=t^\wedge R$,可以证明,本质矩阵$E$的奇异值必定式$[\sigma, \sigma,0]^T$。这称为本质矩阵的内在性质。可以理解为:一个$3×3$的矩阵是本征矩阵的充要条件是对它奇异值分解后,它有两个相等的奇异值,并且第三个奇异值为0。
  3. 由于平移和旋转各有3个自由度,所以$t^\wedge R$共有6个自由度。但由于尺度等价性,故$E$实际上只有5个自由度。

现在,考虑一对匹配点的像素坐标$x_1$为$[u_1,v_1,1]$,$x_2$为$[u_2,v_2,1]$,则根据对极约束有:

$\left[ \begin{matrix}u_1,v_1,1\end{matrix} \right]\left[ \begin{matrix}e_1 & e_2 &e_3\ e_4 & e_5 & e_6 \e_7&e_8&e_9 \end{matrix} \right]\left [\begin{matrix}u_2,v_2,1\\end{matrix} \right]=0$

另把矩阵$E$展开,写成向量的形式:

$e=\left[ \begin{matrix}e_1,e_2,…,e_9\end{matrix} \right]^T$

对极约束可以写成与$e$有关的线性形式:

$\left[ \begin{matrix}u_1u_2,u_1v_2,u_1,v_1u_2,v_1v_2,v_1,u_2,v_2,1\end{matrix} \right]·e=0$

对于这个线性方程,存在尺度等价性,即对$e$乘以任何常数,等式仍然成立。因此即使$e$有9个未知变量,只需要8个方程,构成线程方程组即可对$e$进行求解。这就是求解本质矩阵最经典的八点法。至此,我们求得了本质矩阵$E$。接下来的问题是如何根据已知估得的本质矩阵,恢复出相机的运动$R$,$t$。这个过程由奇异值分解(SVD)完成。设$E$的SVD分解为:

$E=UΣV^T$

根据$U$,$V$为正交阵,$Σ$为奇异值矩阵,即$Σ=diag(\sigma, \sigma,0)$。在SVD分解中,对于任意一个$E$,存在两个可能的$t$,$R$与它对应:

$t^\wedge_1=UR_Z(\frac{\pi}2)ΣU^T,R_1=UR^T_Z(\frac{\pi}2)V^T$

$t^\wedge_2=UR_Z(-\frac{\pi}2)ΣU^T,R_2=UR^T_Z(-\frac{\pi}2)V^T$

其中$R_Z(\frac{\pi}2)$表示绕$Z$轴旋转90度得到的旋转矩阵。由于$-E$,$E$等价,所以对任意一个$t$取负号,也会得到同样的结果。因此,从$E$分解到$t$,$R$时,一共存在4个可能的解。如下图所示。

幸运的是,只有一种解中$P$在两个相机中都具有正的深度。因此,只要把任意一点代入四种解中,检测该点在两个相机下的深度,就可以确定哪个解是正确的。用用

利用本质矩阵的内在性质,它只有5个自由度,所以最小可以通过5对点来求解相机运动。然而这种做法形式复杂,从工程实现角度考虑,平时通常会有几十对甚至上百对匹配点,从8对减到5对意义并不明显。

因为一些误差的存在,通过8点法计算得到的本质矩阵$E$可能不会严格满足本质矩阵的特性2,因此通常会对奇异值矩阵$Σ$做调整。通常的做法是,对八点法求得的$E$进行SVD分解后,会得到奇异值矩阵$Σ=diag(σ1,σ2,σ3)$。不妨设$σ1≥σ2≥σ3$,取:

$ E=Udiag(\frac{σ1+σ2}2,\frac{σ1+σ2}2,0)V^T $

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

单应矩阵$H$

除了基本矩阵和本质矩阵T,还有一种单应矩阵$H$(Homography),它描述了两个平面之间的映射关系。若场景中的特征点都落同一个平面上(比如墙,地面等),则可以通过单应性来进行运动估计。

单应矩阵通常描述处于共同平面上的一些点(3D点共面)在两张图像之间的变换关系。

考虑两帧图像上匹配到的特征点$p_1$,$p_2$,这些特征点落在平面$P$上,设这个平面满足方程:

$n^TP+d=0$

则:

$-\frac{n^TP}d=1$

推理可得:

$p_2=K(R−\frac{tn^T}d)K^{−1}p_1$

这里就得到了一个直接描述图像坐标$p_1$,$p_2$之间的变换,把中间这部分记作$H$(3×3矩阵),则有:

$p_2=Hp_1$

单应矩阵的定义与旋转、平移以及平面的参数有关。对上式展开可得:

$\left[ \begin{matrix}u_2\v_2\1\end{matrix} \right]=\left[ \begin{matrix}h_1 & h_2 &h_3\ h_4 & h_5 & h_6 \h_7&h_8&h_9 \end{matrix} \right]\left [\begin{matrix}u_1\v_1\1\\end{matrix} \right]$

转换为:

$u_2=\frac{h_1v_1+h_2v_1+h_3}{h_7v_1+h_8v_1+h_9}$

$v_2=\frac{h_4v_1+h_5v_1+h_6}{h_7v_1+h_8v_1+h_9}$

这样一组匹配点就可以构造2个方程。因为像素坐标为齐次坐标,所以单应矩阵乘以任意常数项,等式仍然成立。因此即使单应矩阵的未知变量为9个,但其自由度为8。因此需要4组匹配点,构造8个方程,来对单应矩阵进行求解。与本质矩阵相似,求出单应矩阵后需要对其进行分解,才可以得到相应的旋转矩阵$R$和平移向量$t$。

单应性在SLAM中具有重要意义。当特征点共面时或相机发生纯旋转时,基础矩阵的自由度下降,这就出现了所谓的退化。这时候继续用8点法求解基础矩阵会导致受到噪声的影响增加。为了避免这种情况,通常会同时估计基础矩阵$F$和单应矩阵$H$,选择重投影误差比较小的那个作为最终的运动估计矩阵。

讨论—对极约束方法的局限性

尺度不确定性

首先由于E具有尺度等价性,因此它分解得到的$t$和$R$也有一个尺度等价性。而$R∈SO(3)$自身具有约束,因此可以认为$t$也具有尺度等价性。$t$的尺度等价性直接导致$t$的大小与现实世界中平移的大小并不是对应的。也就是说在单目SLAM中,每次都要确定$t$的尺度,通常的做法是对$t$进行归一化。这称为单目SLAM的初始化初始化之后就可以用3D-2D来计算相机运动,初始化之后的轨迹和地图的单位,就是初始化时固定的尺度。

  1. 如何理解上述最后一句话表达的过程?

    答:参见总结。

  2. 如何理解“$t$的尺度等价性”和“初始化时固定尺度”?

    答:参见参考资料3后面的内容。

初始化的纯旋转问题

即使可以用单应矩阵来处理纯旋转的情况,但是由于纯旋转缺少位移,因此无法对空间点进行三角化。也就是说对于单目SLAM来说,初始化必须要有位移。

多于8对点的情况

最后我们提到用8点法求解本质矩阵。但是实际中往往匹配点会远远多于8对,此时有两种求解思路。 当匹配正确率比较高的时候,可以构造最小二乘。当匹配错误率比较高的时候,可以用随机采样一致性(RANSAC)求解。

总结

由于对极几何方法需要使用8个或者8个以上的点对,并且存在上述需要初始化、纯旋转和尺度不确定性等问题。如果两帧图像中其中一帧图像特征点的3D位置已知,则最少可以使用3对点对(需要至少一个额外点验证结果)就可以估计相机运动。特征点的3D位置可以由三角化或者RGB-D相机的深度图确定。因此:

  1. 双目或RGB-D的视觉里程计中,可以直接使用PnP估计相机运动。
  2. 单目视觉里程计中,必须先进行初始化(这样就有了3D点),然后才能使用PnP。

参考资料

  1. 视觉SLAM十四讲第7讲
  2. 单目相机中的对极几何
  3. Monocular slam 的理论基础(1)
  4. 视觉slam十四讲学习笔记

本文标题:视觉SLAM十四讲阅读笔记三-单目相机中的对极几何

文章作者:阿翔

发布时间:2018年08月24日 - 23:08

最后更新:2019年05月28日 - 21:05

原始链接:http://ttshun.com/2018/08/24/视觉SLAM十四讲阅读笔记三-对极几何/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

点击给我一些鼓励叭!
-------------本文结束感谢您的阅读-------------
0%