Bootstrap

视觉SLAM——两视图对极几何 本质矩阵 基础矩阵 单应矩阵 三角测量

前言

本博客主要为学习《视觉SLAM十四讲》第7讲第3、4节、《多视图几何》第二篇双视图几何、《计算机视觉-算法与应用》第7章由运动到结构 等其他相关SLAM内容的总结与整理。这块内容比较重要所以写的比较详细。

本博客主要讨论一下内容:
1、对极几何的构建,F、E矩阵的推导、性质与求解;
2、由E恢复Rt,三角测量;
3、单应性,单应矩阵H的求解;
4、F、E、H矩阵的适用性讨论。

在特征匹配后,得到了特征点之间的关系,如果是两张图像匹配,可通过对极几何得到2D-2D之间的关系。

一、对极几何

对极几何是两幅视图之间内在的射影几何,它独立于景物结构,只依赖于摄像机的内部参数和相对姿态。对极几何约束了一幅图上的点在另一幅图上的对应位置应在对极线上。

1、问题描述

在这里插入图片描述
假设两帧的图像平面为I1、I2,其相机中心分别为O1、O2,这两帧之间的变换为T12=[R|t],现在3维空间中有一个点P,它在这两幅图上的投影分别为特征点p1和p2
显然点P、p1、p2、O1、O2是共面的,这便构成了对极几何。

几个概念:

  • 基线:连接两个相机中心的连线。图中直线O1O2
  • 对极平面:一张包含基线的平面。图中如平面PO1O2
  • 对极点:基线与像平面的交点,等价的,对极点是在一幅视图中另一个相机中心的像,也是基线方向的消影点。图中e1和e2
  • 对极线:对极平面与两个图像平面的交线。一个图像中所有对极线相交于对极点。图中p1e1和p2e2

在SLAM过程中,通过特征匹配得到了特征点坐标p1、p2,希望求得相机位姿T12和特征点三维坐标P。

2、本质矩阵和基础矩阵的推导

这里推导和视觉SLAM十四讲有点区别:并没有使用乘以非零常数下成立的(up to a scale)等式,看起来更容易理解;

推导1:

在世界坐标系下的点P,根据针孔模型,得到两个像素点p1、p2的位置为:

s 1 p 1 = K P ⇒ s 1 K − 1 p 1 = P s_1p_1=KP\Rightarrow s_1K^{-1}p_1=P s1p1=KPs1K1p1=P

s 2 p 2 = K ( R P + t ) ⇒ s 2 K − 1 p 2 = R P + t = s 1 R K − 1 p 1 + t s_2p_2=K(RP+t)\Rightarrow s_2K^{-1}p_2=RP+t=s_1RK^{-1}p_1+t s2p2=K(RP+t)s2K1p2=RP+t=s1RK1p1+t

取归一化图像坐标 x 1 = K − 1 p 1 x_1=K^{-1}p_1 x1=K1p1 x 2 = K − 1 p 2 x_2=K^{-1}p_2 x2=K1p2

s 2 x 2 = R P + t = s 1 R x 1 + t s_2x_2=RP+t=s_1Rx_1+t s2x2=RP+t=s1Rx1+t

左乘t^(即与t做外积): s 2 t ∧ x 2 = s 1 t ∧ R x 1 + t ∧ t s_2 t^\land x_2=s_1t^\land Rx_1+t^\land t s2tx2=s1tRx1+tt

再左乘 x 2 T x^T_2 x2T s 2 x 2 T t ∧ x 2 = s 1 x 2 T t ∧ R x 1 s_2x^T_2 t^\land x_2=s_1 x^T_2t^\land Rx_1 s2x2Ttx2=s1x2TtRx1

因为左侧为零,s1s2为标量,得到: x 2 T t ∧ R x 1 = 0 x^T_2t^\land Rx_1=0 x2TtRx1=0

重新带入p1、p2 p 2 T K − T t ∧ R K − 1 p 1 = 0 p^T_2K^{-T}t^\land RK^{-1}p_1=0 p2TKTtRK1p1=0

以上两式便称为对极约束。

基础矩阵F(Fudamental): F = K − T t ∧ R K − 1 F=K^{-T}t^\land RK^{-1} F=KTtRK1

本质矩阵E(Essential): E = t ∧ R E=t^\land R E=tR

对极约束: x 2 T E x 1 = p 2 T F p 1 = 0 x^T_2Ex_1=p^T_2Fp_1=0 x2TEx1=p2TFp1=0

推导2

相机中心O1、O2与点P共面,那么连接两个相机中心的向量 − R − 1 t -R^{-1}t R1t和与像素点p1、p2对应的射线 x 1 x_1 x1 R − 1 x 2 R^{-1}x_2 R1x2( x 1 、 x 2 为 x_1、x_2为 x1x2归一化图像坐标),肯定是共面的。
那么就要求混合积为0:
( x 1 , − R − 1 x 2 , R − 1 t ) = ( R x 1 , x 2 , − t ) = x 1 T ( t ∧ R ) x 2 = 0 (x_1,-R^{-1}x_2,R^{-1}t)=(Rx_1,x_2,-t)=x_1^T(t^\land R)x_2=0 (x1,R1x2,R1t)=(Rx1,x2,t)=x1T(tR)x2=0

3、本质矩阵的性质

  • 对E乘以任意非零常数后,对极约束仍然满足,即E在不同尺度下是等价的;
  • 本质矩阵E的充要条件为:3X3矩阵的奇异值为[σ,σ,0]T的形式
  • 本质矩阵共有5个自由度:平移和旋转各3个,尺度等价性减去一个。

4、基础矩阵的性质

  • F是一个秩为2,自由度为7的齐次矩阵:对于3X3的齐次矩阵拥有8个自由度,此外约束 d e t F = 0 detF=0 detF=0再减去一个自由度,奇异值为 [ σ 1 , σ 2 , 0 ] T [σ_1,σ_2,0]^T [σ1,σ2,0]T
  • 转置:如果F是对(O1,O2)的基本矩阵,则FT是对反序列(O2,O1)的基本矩阵。
  • 对极线:与第一幅图上任意一点p1对应的对极线是 l 2 = F p 1 l_2=Fp_1 l2=Fp1,反之同理 l 1 = F T p 2 l_1=F^Tp_2 l1=FTp2
  • 对极点:任何不同于e1的点p1的对极线 l 2 = F p 1 l_2=Fp_1 l2=Fp1包含对极点e2,因此对于所有p1,e2都满足 e 2 T ( F p 1 ) = ( e 2 T F ) p 1 = 0 e^T_2(Fp_1)=(e^T_2F)p_1=0 e2T(Fp1)=(e2TF)p1=0,从而推出 e 2 T F = 0 e^T_2F=0 e2TF=0 F e 1 = 0 Fe_1=0 Fe1=0

5、特殊运动的基础矩阵

  • 纯平移:假设相机的运动为没有旋转且内参不变的纯平移,即R=I,此时F是反对称矩阵且只有2个自由度。
    F = K − T t ∧ R K − 1 = t ∧ K R K − 1 = t ∧ F=K^{-T}t^\land RK^{-1}=t^\land KRK^{-1}=t^\land F=KTtRK1=tKRK1=t

  • 纯平面:旋转轴与平移方向正交,给运动增加了一个约束,此时F自由度为6.

6、基础矩阵的求解

一般使用8点法进行本质矩阵或基础矩阵的求解。这里以基础矩阵为例:

假设一对匹配点的齐次坐标为 p 1 = [ u 1 , v 1 , 1 ] p_1=[u_1,v_1,1] p1=[u1,v1,1] p 2 = [ u 2 , v 2 , 1 ] p_2=[u_2,v_2,1] p2=[u2,v2,1],根据对极约束有:

( u 1 v 1 1 ) ( e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ) ( u 2 v 2 1 ) = 0 \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 (u1v11)e1e4e7e2e5e8e3e6e9u2v21=0

将F矩阵展开到9维向量形式: e = [ e 1 , e 2 , e 3 , e 4 , e 5 , e 6 , e 7 , e 8 , e 9 ] T e=[e_1,e_2,e_3,e_4,e_5,e_6,e_7,e_8,e_9]^T e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]T

此时对极约束为: [ u 1 u 2 , u 1 v 2 , u 1 , v 1 u 2 , v 1 v 2 , v 1 , u 2 , v 2 , 1 ] e = 0 [u_1u_2,u_1v_2,u_1,v_1u_2,v_1v_2,v_1,u_2,v_2,1]e=0 [u1u2,u1v2,u1,v1u2,v1v2,v1,u2,v2,1]e=0

将8对匹配点构成一个线性方程组,其系数矩阵大小为8X9,如果系数矩阵满秩(8),那么它的零空间维数为1,即e构成一条线,以此得到E的各元素。

需要注意的是由于测量和计算存在误差,对基本矩阵直接线性变换无法保证基础矩阵的奇异值约束: [ σ 1 , σ 2 , 0 ] T [σ_1,σ_2,0]^T [σ1,σ2,0]T,需根据奇异值约束对矩阵进行重构:
对八点法得到的基础矩阵进行奇异值分解: F ^ = U d i a g ( σ 1 , σ 2 , σ 3 ) V T \hat F=Udiag(σ_1,σ_2,σ_3)V^T F^=Udiag(σ1,σ2,σ3)VT 其中 σ 1 ≥ σ 2 ≥ σ 3 σ_1\geσ_2\geσ_3 σ1σ2σ3
取: F = U d i a g ( σ 1 , σ 2 , 0 ) V T F=Udiag(σ_1,σ_2,0)V^T F=Udiag(σ1,σ2,0)VT

同理,从基础矩阵求得的本质矩阵 E ^ = K T F K \hat E=K^TFK E^=KTFK(或者直接由归一化坐标八点法得到),也需要满足E的奇异值为[σ,σ,0]T的形式。
对本质矩阵进行奇异值分解: E ^ = U d i a g ( σ 1 , σ 2 , σ 3 ) V T \hat E=Udiag(σ_1,σ_2,σ_3)V^T E^=Udiag(σ1,σ2,σ3)VT,其中 σ 1 ≥ σ 2 ≥ σ 3 σ_1\geσ_2\geσ_3 σ1σ2σ3
E = U d i a g ( σ 1 + σ 2 2 , σ 1 + σ 2 2 , 0 ) V T E=Udiag(\frac{σ_1+σ_2}{2},\frac{σ_1+σ_2}{2},0)V^T E=Udiag(2σ1+σ2,2σ1+σ2,0)VT

对八点法的一些讨论:

  • 2D-2D问题常常用于单目SLAM的初始化
  • 由于存在尺度不确定性:通常采用归一化t或特征点的平均深度
  • 纯旋转问题:当t=0时无法求解
  • 当多于八对点时:可以最小二乘法或随机抽样一致算法(RANSAC)
    在这里插入图片描述

7、恢复相机矩阵

即如何从已经估计出的本质矩阵E,恢复出相机的外参R和t。注意由于尺度等价性,这里的t只是估计其方向。

由于E的SVD分解为: E = U ∑ V T = U d i a g ( σ , σ , 0 ) V T E=U\sum V^T= Udiag(σ,σ,0)V^T E=UVT=Udiag(σ,σ,0)VT

可得对于任意一个E,存在2个可能的t,R与其对应:

t ∧ = U R z ( π 2 ) ∑ U T t^\land =UR_z(\frac{\pi}{2}) \sum U^T t=URz(2π)UT R 1 = U R z T ( π 2 ) V T R_1=UR^T_z(\frac{\pi}{2}) V^T R1=URzT(2π)VT

t ∧ = U R z ( − π 2 ) ∑ U T t^\land =UR_z(-\frac{\pi}{2}) \sum U^T t=URz(2π)UT R 2 = U R z T ( − π 2 ) V T R_2=UR^T_z(-\frac{\pi}{2}) V^T R2=URzT(2π)VT

其中 R z ( − π 2 ) R_z(-\frac{\pi}{2}) Rz(2π)表示沿Z轴旋转90°的得到的旋转矩阵。因此一共存在4个可能的解。
在这里插入图片描述
只有一种解中P在两个相机中都具有正的深度,因此只需将任意一点带入4种解中,检测该点在两个相机下的深度,就可以确定哪个是正确的。
(手性检验:所有的观测点必须在摄像机前面,即从摄像机发出的视线上距离为正。)

二、三角测量

双视图几何的一个重要结果是:仅由图像对应点,不需要其他的信息,就可以计算摄像机和景物结构的重构。
在这里插入图片描述

求解方法

1、十四讲中的双视图方法

在之前已经推出归一化图像坐标之间的几何关系:
s 1 x 1 = P , s 2 x 2 = R P + t = s 1 R x 1 + t s_1x_1=P,s_2x_2=RP+t=s_1Rx_1+t s1x1=Ps2x2=RP+t=s1Rx1+t

两侧左乘x2^: s 2 x 2 ∧ x 2 = 0 = s 1 x 2 t ∧ R x 1 + x 2 ∧ t s_2x_2^\land x_2=0=s_1x_2t^\land Rx_1+x_2^\land t s2x2x2=0=s1x2tRx1+x2t
即可得到s2,通过s2可得到s1

由于存在误差,一般采用最小二乘法求解: s 2 x 2 − s 1 R x 1 = t s_2x_2-s_1Rx_1=t s2x2s1Rx1=t

对于 A x = b Ax=b Ax=b的最小二乘法解为: x = ( A T A ) − 1 A T b x=(A^TA)^{-1}A^Tb x=(ATA)1ATb

2、SVD分解

同样,对于齐次坐标 P = [ X , Y , Z , 1 ] P=[X,Y,Z,1] P=[X,Y,Z,1],归一化图像坐标 x i = [ u i , v i , 1 ] x_i=[u_i,v_i,1] xi=[ui,vi,1]

存在关系: s i x i = T i P s_ix_i=T_iP sixi=TiP

其中从世界坐标系到相机坐标系的变换矩阵采用3x4的矩阵表示: T i = [ R ∣ t ] = [ T i 1 , T i 2 , T i 3 ] T T_i=[R|t]=[T^1_i,T^2_i,T^3_i]^T Ti=[Rt]=[Ti1,Ti2,Ti3]T

那么有: s i x i × T i P = x i ∧ T i P = 0 s_ix_i\times T_iP= x_i^\land T_iP=0 sixi×TiP=xiTiP=0

展开有:
x i ∧ T i P = [ 0 − 1 v 1 0 − u − v u 0 ] [ T i 1 T i 2 T i 3 ] P = [ − T i 2 + v i T i 3 T i 1 − u i T i 3 − v i T i 1 + u i T i 2 ] P x_i^\land T_iP=\left[\begin{matrix} 0 & -1 & v \\ 1 & 0 & -u \\ -v & u & 0 \end{matrix} \right] \left[\begin{matrix} T^1_i\\ T^2_i \\ T^3_i \end{matrix} \right]P=\left[\begin{matrix} -T^2_i+v_iT^3_i\\ T^1_i-u_iT^3_i\\ -v_iT^1_i+u_iT^2_i \end{matrix} \right]P xiTiP=01v10uvu0Ti1Ti2Ti3P=Ti2+viTi3Ti1uiTi3viTi1+uiTi2P

其中第三行与前两行线性相关,只需要保留前两行即可。
因此,已知一个归一化图像坐标x和变换矩阵T,可以构建两个关于P的线性方程组。有两个以上的图像观测,即可求出P:
[ − T 0 2 + v i T 0 3 T 0 1 − u i T 0 3 − T 1 2 + v i T 1 3 T 1 1 − u i T 1 3 . . . ] P = 0 \left[\begin{matrix} -T^2_0+v_iT^3_0\\ T^1_0-u_iT^3_0\\ -T^2_1+v_iT^3_1\\ T^1_1-u_iT^3_1\\ ... \end{matrix} \right]P=0 T02+viT03T01uiT03T12+viT13T11uiT13...P=0

上述方程没有非零解,使用SVD求最小二乘解,得到其最小奇异值对应的单位奇异向量(x,y,z,w)。
P = [ X Y Z 1 ] = [ x / w y / w z / w w / w ] P=\left[\begin{matrix} X\\ Y\\ Z\\ 1 \end{matrix} \right]=\left[\begin{matrix} x/w\\ y/w\\ z/w\\ w/w \end{matrix} \right] P=XYZ1=x/wy/wz/ww/w

3、基于RANSAC的计算过程

如果存在外点(匹配点或姿态求解时)的情况,如何得到准确的三维点坐标?
采用RANSAC算法:
1)计算采样次数
2)随机采样1对视角,计算三维点坐标
3)统计内点个数
4)重复2)3)直到满足采样次数,选择内点数最多的三维点坐标
5)利用所有内点重新计算三维点坐标

4、存在的问题

1、三角化的矛盾:解得深度的质量与平移相关,增大平移会使三角化更精确,但是平移大时特征匹配可能不成功
在这里插入图片描述
2、系数矩阵伪逆不可靠(行列式近零)
例如:相机前进时,虽然有位移,但位于图像中心的点无法三角化(没有视差)。

三、单应性

单应(Homography)是射影几何中的概念,又称为射影变换。它把一个射影平面上的点(三维齐次矢量)映射到另一个射影平面上,并且把直线映射为直线,具有保线性质。总的来说,单应是关于三维齐次矢量的一种线性变换,可以用一个3×3的非奇异矩阵H表示: x 2 = H x 1 x_2=Hx_1 x2=Hx1。H乘以一个非零的比例因子上述等式仍然成立,即H是一个3×3齐次矩阵,具有8个未知量。
单应性可用于图像的校正、对齐以及在SLAM中估计两个相机间的运动。

1、单应矩阵

单应矩阵H可用于描述处于共同平面的点在两张图像之间的变换关系。考虑在图像I1和I2有一对匹配好的特征点p1和p2。这些特征点落在平面P上,设平面满足方程:
n T P + d = 0 ⇒ − n T P d = 1 n^TP+d=0\Rightarrow -\frac{n^TP}{d}=1 nTP+d=0dnTP=1

p 1 = K P ⇒ K − 1 p 1 = P p_1=KP\Rightarrow K^{-1}p_1=P p1=KPK1p1=P

p 2 = K ( R P + t ) = K ( R P − t n T P d ) = K ( R − t n T d ) P = K ( R − t n T d ) K − 1 p 1 p_2=K(RP+t)=K(RP-\frac{tn^TP}{d})=K(R-\frac{tn^T}{d})P=K(R-\frac{tn^T}{d})K^{-1}p_1 p2=K(RP+t)=K(RPdtnTP)=K(RdtnT)P=K(RdtnT)K1p1

H = K ( R − t n T d ) K − 1 H=K(R-\frac{tn^T}{d})K^{-1} H=K(RdtnT)K1,得到 p 2 = H p 1 p_2=Hp_1 p2=Hp1

2、单应矩阵的求解

( u 2 v 2 1 ) = ( h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 h 9 ) ( u 1 v 1 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) u2v21=h1h4h7h2h5h8h3h6h9u1v11

在实际处理时通常乘以一个非零因子使得 h 9 = 1 h_9=1 h9=1,然后根据第三行去掉这个非零因子:
u 2 = h 1 u 1 + h 2 v 1 + h 3 h 7 u 1 + h 8 v 1 + h 9 , v 2 = h 4 u 1 + h 5 v 1 + h 6 h 7 u 1 + h 8 v 1 + h 9 u_2=\frac{h_1u_1+h_2v_1+h_3}{h_7u_1+h_8v_1+h_9},v_2=\frac{h_4u_1+h_5v_1+h_6}{h_7u_1+h_8v_1+h_9} u2=h7u1+h8v1+h9h1u1+h2v1+h3v2=h7u1+h8v1+h9h4u1+h5v1+h6

这样一组匹配点可以构造2个约束,自由度为8的单应矩阵至少需要通过4对匹配特征点求出(不能有三点共线)。匹配点大于4对时,可以通过最小二乘法和RANSAC方法进行估计。

四、基础矩阵与单应矩阵的一些讨论

1、相机做纯旋转时

假设相机只进行纯旋转运动: t = [ 0 , 0 , 0 ] T t=[0,0,0]^T t=[0,0,0]T
有: p 1 = K P p_1=KP p1=KP p 2 = K R P p_2=KRP p2=KRP
得到: p 2 = K R K − 1 p 1 p_2=KRK^{-1}p_1 p2=KRK1p1
又有两个像素的单应性: p 2 = H p 1 p_2=Hp_1 p2=Hp1,因此 H = K R K − 1 H=KRK^{-1} H=KRK1

从这里可以看出:
1)当相机进行纯旋转时, H = K ( R − t n T d ) K − 1 = K R K − 1 H=K(R-\frac{tn^T}{d})K^{-1}=KRK^{-1} H=K(RdtnT)K1=KRK1,与深度d没有关系,此时无论三维点是否在一个平面上,H矩阵都能完美的符合转换关系。
2)当 t = [ 0 , 0 , 0 ] T t=[0,0,0]^T t=[0,0,0]T时,按之前方法得到的本质矩阵和基础矩阵F为零矩阵(这是因为在推导的时候与t做了外积使等号两边都变成0)。因此此时两视图的对极约束就不再适用,这称之为退化现象。
3)此时无法使用三角法重构点在世界坐标系中的三维坐标

2、单应矩阵在非平面情形

在这里插入图片描述
当相机的平移向量t相对于场景深度而言足够小时,x′2和x2之间的误差是可被接受的,即这种情况下依然可以使用H矩阵来算坐标的一一对应,比如orbslam中提到的低视差情形。

3、为什么基础矩阵不能用于平面情形

在平面情形中,我们得到了p1和p2的对应关系: p 2 = H p 1 p_2=Hp_1 p2=Hp1
我们知道,任意一个向量u与p2进行外积一定垂直于p2
u ∧ p 2 ⊥ H p 1 ⇒ ( u ∧ p 2 ) T H p 1 = 0 ⇒ p 2 T u ∧ H p 1 = 0 u^\land p_2\perp Hp_1 \Rightarrow (u^\land p_2)^THp_1=0 \Rightarrow p^T_2u ^\land Hp_1=0 up2Hp1(up2)THp1=0p2TuHp1=0

所以我们可以得到 E = u ∧ H E=u^\land H E=uH,这说明在平面情况下,存在无穷多解满足 p 2 T E p 1 = 0 p^T_2Ep_1=0 p2TEp1=0。显然不正确。(换言之就是平面情形提供了匹配点更多的约束导致本质矩阵退化)

总结

  • 基础矩阵表示的是两视图的对极约束,独立于景物结构,只依赖于摄像机的内部参数和相对姿态;本质矩阵是基础矩阵在归一化图像坐标下的表示;单应矩阵表示点和点之间的映射,但要求场景点在同一个平面上或者是相机纯旋转。

  • 基础矩阵无法得到这个点对应点在另一幅图像上的确切位置(映射的是对极线);单应矩阵可以找到点在另一幅图像上对应点的确切位置。

  • 当相机进行纯旋转时,或者场景中的点在同一平面上或近平面上,必须使用单应矩阵H而不能使用基础矩阵F;当相机的平移距离相对于场景的深度较小的时候可以使用单应矩阵H。因此通常会同时估计基础矩阵F和单应矩阵H,选择重投影误差较小的作为运动估计矩阵(ORB-SLAM的初始化方法)。

;