SLAM十四讲之第七讲:2D-2D对极几何与3D-2DPnP问题推导

本文围绕视觉里程计展开,介绍2D - 2D对极几何,包括对极约束、本质矩阵性质及求解方法、单应矩阵使用场景与推导等;还阐述3D - 2D PnP,如直接线性变化DLT、P3P及最小化重投影误差求解PnP的数学模型、导数推导等内容。

第七讲:视觉里程计2

2 2D-2D对极几何

​ 作者应该是基于ORB-SLAM写的后续内容。

2.1 对极约束

在这里插入图片描述

​ 在第一帧坐标系下,三维点P的坐标如下:

P = [ X , Y , Z ] T \boldsymbol{P}=[X, Y, Z]^{\mathrm{T}} P=[X,Y,Z]T

K是相机内参矩阵,把相机系得点转换为像素坐标系点。这里我们以第一帧坐标系为参考坐标系(世界系),把第1帧投影到第2帧当中。

s 1 p 1 = K P , s 2 p 2 = K ( R 21 P + t 21 ) s_1 \boldsymbol{p}_1=\boldsymbol{K} \boldsymbol{P}, \quad s_2 \boldsymbol{p}_2=\boldsymbol{K}(\boldsymbol{R}_{21} \boldsymbol{P}+\boldsymbol{t}_{21}) s1p1=KP,s2p2=K(R21P+t21)

​ 在相机模型中,s一般都是指三维点P得深度Z,也就是一个常数, s p 和 p sp和p spp形成了投影关系,它们在尺度意义下是相等的
s p ≃ p sp\simeq p spp

​ 把投影方程改为尺度意义下等式
p 1 ≃ K P , p 2 ≃ K ( R P + t ) p_1\simeq KP,\quad p_2\simeq K\left(RP+t\right) p1KP,p2K(RP+t)
p是像素点坐标,乘以 K − 1 K^{-1} K1后即为相机坐标系下得归一化坐标 x x x
x 1 = K − 1 p 1 , x 2 = K − 1 p 2 . \begin{aligned} &\boldsymbol{x}_1=\boldsymbol{K}^{-1} \boldsymbol{p}_1, \quad \boldsymbol{x}_2=\boldsymbol{K}^{-1} \boldsymbol{p}_2 . \end{aligned} x1=K1p1,x2=K1p2.

​ 把第1帧下得归一化坐标投影到第二帧下,得到尺度意义下等式(或利用上面得式子带入到尺度意义下投影方程)

x 2 ≃ R x 1 + t \boldsymbol{x}_2 \simeq \boldsymbol{R} \boldsymbol{x}_1+\boldsymbol{t} x2Rx1+t

​ 注意向量t反对称矩阵也即向量与向量得叉积,对上述式子左乘向量t,可得:

t ∧ x 2 ≃ t ∧ R x 1 \begin{aligned} &\boldsymbol{t}^{\wedge} \boldsymbol{x}_2 \simeq \boldsymbol{t}^{\wedge} \boldsymbol{R} \boldsymbol{x}_1 \end{aligned} tx2tRx1

​ 向量 t ∧ x {t}^{\wedge}x tx即叉积,得到得结果是一个垂直于tx得向量,所以在乘以x,那么向量得点击必然为0.
x 2 T t ∧ x 2 ≃ x 2 T t ∧ R x 1 = 0 \boldsymbol{x}_2^{\mathrm{T}} \boldsymbol{t}^{\wedge} \boldsymbol{x}_2 \simeq \boldsymbol{x}_2^{\mathrm{T}} \boldsymbol{t}^{\wedge} \boldsymbol{R} \boldsymbol{x}_1 =0 x2Ttx2x2TtRx1=0
​ 此时,得到得下面这两个式子就是对极约束,分别由本质矩阵E和基础矩阵F组成
x 2 T t ∧ R x 1 = 0 p 2 T K − T t ∧ R K − 1 p 1 = 0 \begin{aligned} &\boldsymbol{x}_2^{\mathrm{T}} \boldsymbol{t}^{\wedge} \boldsymbol{R} \boldsymbol{x}_1=0\\ &\boldsymbol{p}_2^{\mathrm{T}} \boldsymbol{K}^{-\mathrm{T}} \boldsymbol{t}^{\wedge} \boldsymbol{R} \boldsymbol{K}^{-1} \boldsymbol{p}_1=0 \end{aligned} x2TtRx1=0p2TKTtRK1p1=0

​ 也能够推断出,本质矩阵E和基础矩阵F之间相差一个内参矩阵K
E = t ∧ R , F = K − T E K − 1 , x 2 T E x 1 = p 2 T F p 1 = 0 \boldsymbol{E}=\boldsymbol{t}^{\wedge} \boldsymbol{R}, \quad \boldsymbol{F}=\boldsymbol{K}^{-\mathrm{T}} \boldsymbol{E} \boldsymbol{K}^{-1}, \quad \boldsymbol{x}_2^{\mathrm{T}} \boldsymbol{E} \boldsymbol{x}_1=\boldsymbol{p}_2^{\mathrm{T}} \boldsymbol{F} \boldsymbol{p}_1=0 E=tR,F=KTEK1,x2TEx1=p2TFp1=0

2.2 本质矩阵

2.2.1 本质矩阵性质

E = t ∧ R \boldsymbol{E}=\boldsymbol{t}^{\wedge} \boldsymbol{R} E=tR是一个3*3矩阵

  1. 对极约束得条件是 0 0 0,所以该等式乘以任意得常数后仍然为 0 0 0,也即对E乘以任意的常数后,对极约束依然成立。即 E E E在不同尺度下是等价的。
  2. 本质矩阵 E E E经过 S V D SVD SVD分解后的奇异值必然是 [ σ , σ , 0 ] T [\sigma,\sigma,0]^\mathrm{T} [σ,σ,0]T.
  3. 本质矩阵实际只有5个自由端(旋转3+偏移3-尺度1)

2.2.2 八点法求解本质矩阵

​ 考虑一对匹配点,它们的归一化坐标为 x 1 = [ u 1 , v 1 , 1 ] T , x 2 = [ u 2 , v 2 , 1 ] T \boldsymbol{x}_1=[u_1,v_1,1]^\mathrm{T},\boldsymbol{x}_2=[u_2,v_2,1]^\mathrm{T} x1=[u1,v1,1]T,x2=[u2,v2,1]T。根据对极约束,有

( u 2 , v 2 , 1 ) ( e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ) ( u 1 v 1 1 ) = 0. \left(u_2, v_2, 1\right)\left(\begin{array}{ccc} e_1 & e_2 & e_3 \\ e_4 & e_5 & e_6 \\ e_7 & e_8 & e_9 \end{array}\right)\left(\begin{array}{c} u_1 \\ v_1 \\ 1 \end{array}\right)=0 . (u2,v2,1) e1e4e7e2e5e8e3e6e9 u1v11 =0.

​ 把本质矩阵E写成一个向量的形式

e = [ e 1 , e 2 , e 3 , e 4 , e 5 , e 6 , e 7 , e 8 , e 9 ] T \boldsymbol{e}=[e_1,e_2,e_3,e_4,e_5,e_6,e_7,e_8,e_9]^\mathrm{T} e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]T
​ 则对极约束可以写成于e有关的线性形式:
[ u 2 u 1 , u 2 v 1 , u 2 , v 2 u 1 , v 2 v 1 , v 2 , u 1 , v 1 , 1 ] ⋅ e = 0 [u_2u_1,u_2v_1,u_2,v_2u_1,v_2v_1,v_2,u_1,v_1,1]\cdot\boldsymbol{e}=0 [u2u1,u2v1,u2,v2u1,v2v1,v2,u1,v1,1]e=0
​ 就是说,一对点可以得到一个上面的式子,我们利用八对点就可得到下面的方程。这个方程可以看成9*9的矩阵,最后一行为0,就是这个矩阵不满秩,那么它一定有非0解且唯一!
( 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. \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 . u21u11u22u12u28u18u21v11u22v12u28v18u21u22u28v21u11v22u12v28u18v21v11v22v12v28v18v21v22v28u11u12u18v11v12v18111 e1e2e3e4e5e6e7e8e9 =0.

2.2.3 怎么利用E来求解位姿

​ 我们最关系的是利用 E E E来估计相机运动 R , t R,t Rt,通过奇异值分解计算
E = U Σ V T E=U\Sigma V^{\mathrm{T}} E=UΣVT
参考计算机视觉中的多视图几何200页结论
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{aligned} \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{\boldsymbol{\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{aligned} t1t2=URZ(2π)ΣUT,R1=URZT(2π)V

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值