视觉SLAM前端——对极约束、本质矩阵与单应矩阵

如果我们已知多组匹配特征点对的2D/2D像素坐标,那么此时可以使用对极几何或者单应性求出相机的相对运动,其典型的应用场景就是在单目视觉SLAM的初始化的时候。但对极几何要求相机必须是移动的,单应性要求特征点必须在同一平面上,正是由于这些局限性,单目SLAM的初始化是一件非常困难的事情,一旦我们初始化完成之后,由于此时相机的运动已知,我们就可以三角化出特征点的3D坐标,当新的一帧进来之后,我们可以匹配出多对2D/3D特征点对,此时就可以使用PnP来求解相机运动。

对极约束

在这里插入图片描述

如图所示(图片取自视觉SLAM十四讲), I 1 I_1 I1 I 2 I_2 I2为两帧图像, O 1 O_1 O1 O 2 O_2 O2为相机中心位置。 p 1 p_1 p1为图像 I 1 I_1 I1中的某个特征点, p 2 p_2 p2为图像 I 2 I_2 I2中与 p 1 p_1 p1匹配的特征点。射线 O 1 p 1 O_1p_1 O1p1上的点都会投影到像素点 p 1 p_1 p1,射线 O 2 p 2 O_2p_2 O2p2同理。在匹配正确的情况下,由于 p 1 p_1 p1 p 2 p_2 p2对应的是空间中的同一点,所以射线 O 1 p 1 O_1p_1 O1p1 O 2 p 2 O_2p_2 O2p2必相交于点P。面 O 1 O 2 P O_1O_2P O1O2P称为极平面; O 1 O 2 O_1O_2 O1O2称为基线;基线与两个成像平面 I 1 I_1 I1 I 2 I_2 I2分别相交于点 e 1 e_1 e1 e 2 e_2 e2,称为极点;极平面与两个成像平面 I 1 I_1 I1 I 2 I_2 I2分别相交于线段 l 1 l_1 l1 l 2 l_2 l2,称为极线。
由相机模型有 s 1 p 1 = K P s_1p_1=KP s1p1=KP s 2 p 2 = K ( R P + t ) s_2p_2=K(RP+t) s2p2=K(RP+t) K K K为相机内参, p 1 p_1 p1 p 2 p_2 p2为齐次像素坐标。如果用 x 1 x_1 x1 x 2 x_2 x2分别表示 P P P点在两个相机下的归一化坐标,那么 x 1 = K − 1 p 1 , x 2 = K − 1 p 2 x_1=K^{-1}p_1, x_2=K^{-1}p_2 x1=K1p1,x2=K1p2,因此 s 2 x 2 = R s 1 x 1 + t s_2x_2=Rs_1x_1+t s2x2=Rs1x1+t等式两边对 t t t做外积并左乘 x 2 T x_2^T x2T s 2 x 2 T t ∧ x 2 = s 1 x 2 T t ∧ R x 1 + x 2 T t ∧ t s_2x_2^Tt^{\land}x_2=s_1x_2^Tt^{\land}Rx_1+x_2^Tt^{\land}t s2x2Ttx2=s1x2TtRx1+x2Ttt因为正交向量内积为零,同方向向量外积为零,因为一三项等于零,可得对极约束公式:
x 2 T t ∧ R x 1 = 0 x_2^Tt^{\land}Rx_1=0 x2TtRx1=0 p 2 T K − T t ∧ R K − 1 p 1 = 0 p_2^TK^{-T}t^\land RK^{-1}p_1=0 p2TKTtRK1p1=0
E = t ∧ R E=t^{\land}R E=tR , , F = K − T t ∧ R K − 1 F=K^{-T}t^\land RK^{-1} F=KTtRK1,那么 E E E F F F分别称为本质矩阵和基础矩阵。

本质矩阵

本质矩阵具有以下三个特点:任意系数倍的 E E E依然满足对极约束,所以 E E E在不同尺度下是等价的; E E E的奇异值满足 [ σ , σ , 0 ] [\sigma,\sigma,0] [σ,σ,0]的形式,称为本质矩阵的内在性质; E E E的自由度为5(旋转3+平移3-尺度等价约束1)。如果我们只考虑尺度等价的约束,那么 E E E的自由度为8,可以使用8对点来求解 E E E
( 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 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 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 ) ( e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ) = 0 \begin{array}{c} \begin{array}{c} \end{array}\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}{l} e_{1} \\ e_{2} \\ e_{3} \\ e_{4} \\ e_{5} \\ e_{6} \\ e_{7} \\ e_{8} \\ e_{9} \end{array}\right) = 0 \end{array} u21u11u22u12u28u18u21v11u22v12u28v18u21u22u28v21u11v22u12v28u18v21v11v22v12v28v18v21v22v28u11u12u18v11v12v18111 e1e2e3e4e5e6e7e8e9 =0
如果8对点的归一化坐标 u i u_i ui v i v_i vi构成的矩阵满秩,即可求出 E E E。求出 E E E之后,可以使用SVD分解,求出 R R R t t t。设 E = U Σ V T E=U\Sigma V^T E=UΣVT,其中 U U U V V V为正交矩阵, Σ = d i a g ( σ 1 , σ 2 , σ 3 ) \Sigma=diag(\sigma_1,\sigma_2,\sigma_3) Σ=diag(σ1,σ2,σ3)。由于八点法没有考虑 E E E的内在性质,所以 Σ \Sigma Σ不满足 E E E的奇异值形式。假设 σ 1 > σ 2 > σ 2 \sigma_1>\sigma_2>\sigma_2 σ1>σ2>σ2,我们可以构造一个新的 E = U d i a g ( ( σ 1 + σ 2 ) / 2 , ( σ 1 + σ 2 ) / 2 , 0 ) V T E=Udiag((\sigma_1+\sigma_2)/2,(\sigma_1+\sigma_2)/2,0) V^T E=Udiag((σ1+σ2)/2,(σ1+σ2)/2,0)VT,然后可以分解出两个 R R R t t t分别为:
t 1 ∧ = U R Z ( π 2 ) Σ U T , R 1 = U R Z T ( π 2 ) V T t 2 ∧ = U R Z ( − π 2 ) Σ U T , R 2 = U R Z T ( − π 2 ) V T \begin{array}{ll} \boldsymbol{t}_{1}^{\wedge}=\boldsymbol{U} \boldsymbol{R}_{Z}\left(\frac{\pi}{2}\right) \boldsymbol{\Sigma} \boldsymbol{U}^{\mathrm{T}}, \quad \boldsymbol{R}_{1}=\boldsymbol{U} \boldsymbol{R}_{Z}^{\mathrm{T}}\left(\frac{\pi}{2}\right) \boldsymbol{V}^{\mathrm{T}} \\ \boldsymbol{t}_{2}^{\wedge}=\boldsymbol{U} \boldsymbol{R}_{Z}\left(-\frac{\pi}{2}\right) \boldsymbol{\Sigma} \boldsymbol{U}^{\mathrm{T}}, \quad \boldsymbol{R}_{2}=\boldsymbol{U} \boldsymbol{R}_{Z}^{\mathrm{T}}\left(-\frac{\pi}{2}\right) \boldsymbol{V}^{\mathrm{T}} \end{array} t1=URZ(2π)ΣUT,R1=URZT(2π)VTt2=URZ(2π)ΣUT,R2=URZT(2π)VT
由于尺度等价性, − E -E E也是满足对极约束的一个解。可分解得到两个 R R R t t t,其中 R R R E E E分解的相同, t t t E E E分解的相反。所以可以得到共4个结果。我们把4个结果分别代入三角化可以求得 P P P点在两个相机坐标系下的深度,满足深度为正的条件的解才是最终的解。

单应矩阵

如果所有的特征点都处于现实世界的同一平面之内,那么此时需要使用单应性来估计相机的运动。假设平面方程为 n T P + d = 0 n^TP+d=0 nTP+d=0,其中 n n n为平面法向量, d d d为平面到相机原点的距离。
s 2 p 2 = K ( R P + t ) = K ( R P − n T P t d ) = K ( R − n T t d ) P = s 1 K ( R − n T t d ) K − 1 p 1 s_2p_2=K(RP+t)=K(RP-\frac {n^TPt} d)=K(R- \frac {n^Tt} d )P=s_1K(R- \frac {n^Tt} d )K^{-1}p_1 s2p2=K(RP+t)=K(RPdnTPt)=K(RdnTt)P=s1K(RdnTt)K1p1
H = K ( R − n T t d ) K − 1 H=K(R- \frac {n^Tt} d )K^{-1} H=K(RdnTt)K1,则矩阵 H H H称为单应矩阵,其描述了处于同一平面上的空间点在两幅图像间的变换关系,那么 p 2 ≃ H p 1 p_2\simeq Hp_1 p2Hp1。考虑尺度等价性,那么单应矩阵的自由度为8,每一对点可以提供两个约束方程,那么使用4对不共线的点即可求出 H H H,如果设 h 9 = 1 h_9=1 h9=1那么可得到如下展开式:
( u 1 1 v 1 1 1 0 0 0 − u 1 1 u 2 1 − v 1 1 u 2 1 0 0 0 u 1 1 v 1 1 1 − u 1 1 v 2 1 − v 1 1 v 2 1 u 1 2 v 1 2 1 0 0 0 − u 1 2 u 2 2 − v 1 2 u 2 2 0 0 0 u 1 2 v 1 2 1 − u 1 2 v 2 2 − v 1 2 v 2 2 u 1 3 v 1 3 1 0 0 0 − u 1 3 u 2 3 − v 1 3 u 2 3 0 0 0 u 1 3 v 1 3 1 − u 1 3 v 2 3 − v 1 3 v 2 3 u 1 4 v 1 4 1 0 0 0 − u 1 4 u 2 4 − v 1 4 u 2 4 0 0 0 u 1 4 v 1 4 1 − u 1 4 v 2 4 − v 1 4 v 2 4 ) ( h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 ) = ( u 2 1 v 2 1 u 2 2 v 2 2 u 2 3 v 2 3 u 2 4 v 2 4 ) \left(\begin{array}{cccccccc} u_{1}^{1} & v_{1}^{1} & 1 & 0 & 0 & 0 & -u_{1}^{1} u_{2}^{1} & -v_{1}^{1} u_{2}^{1} \\ 0 & 0 & 0 & u_{1}^{1} & v_{1}^{1} & 1 & -u_{1}^{1} v_{2}^{1} & -v_{1}^{1} v_{2}^{1} \\ u_{1}^{2} & v_{1}^{2} & 1 & 0 & 0 & 0 & -u_{1}^{2} u_{2}^{2} & -v_{1}^{2} u_{2}^{2} \\ 0 & 0 & 0 & u_{1}^{2} & v_{1}^{2} & 1 & -u_{1}^{2} v_{2}^{2} & -v_{1}^{2} v_{2}^{2} \\ u_{1}^{3} & v_{1}^{3} & 1 & 0 & 0 & 0 & -u_{1}^{3} u_{2}^{3} & -v_{1}^{3} u_{2}^{3} \\ 0 & 0 & 0 & u_{1}^{3} & v_{1}^{3} & 1 & -u_{1}^{3} v_{2}^{3} & -v_{1}^{3} v_{2}^{3} \\ u_{1}^{4} & v_{1}^{4} & 1 & 0 & 0 & 0 & -u_{1}^{4} u_{2}^{4} & -v_{1}^{4} u_{2}^{4} \\ 0 & 0 & 0 & u_{1}^{4} & v_{1}^{4} & 1 & -u_{1}^{4} v_{2}^{4} & -v_{1}^{4} v_{2}^{4} \end{array}\right)\left(\begin{array}{l} h_{1} \\ h_{2} \\ h_{3} \\ h_{4} \\ h_{5} \\ h_{6} \\ h_{7} \\ h_{8} \end{array}\right)=\left(\begin{array}{c} u_{2}^{1} \\ v_{2}^{1} \\ u_{2}^{2} \\ v_{2}^{2} \\ u_{2}^{3} \\ v_{2}^{3} \\ u_{2}^{4} \\ v_{2}^{4} \end{array}\right) u110u120u130u140v110v120v130v140101010100u110u120u130u140v110v120v130v1401010101u11u21u11v21u12u22u12v22u13u23u13v23u14u24u14v24v11u21v11v21v12u22v12v22v13u23v13v23v14u24v14v24 h1h2h3h4h5h6h7h8 = u21v21u22v22u23v23u24v24
求出单应矩阵后通过分解同样可以得到四组 R R R t t t,通过验证深度为正可以过滤两组解,然后通过假设场景平面与相机平面平行等先验假设来获得最终解。在单目相机初始化的时候,我们通常会同时计算单应矩阵和基础矩阵,来估计相机运动,选择重投影误差小的估计作为最终的运动估计。由于尺度等价的存在,分解出来的 R R R t t t也是尺度等价的,所以我们通常归一化 t t t或者令初始化时所有特征点平均深度为1来固定尺度。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

考拉AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值