高博14讲--第七讲 视觉里程计-7.3 2D-2D:对极几何
基本问题
当相机为单目时,只知道2D的像素坐标,根据两组2D点估计相机的运动,用对极几何来解决。
对极约束
两个相机之间的变换为
T
12
\ T_{12}
T12:
p
1
=
T
12
⋅
p
2
\ p_1=T_{12}·p_2
p1=T12⋅p2,即:通过
P
2
\ P_2
P2的坐标乘以
T
12
\ T_{12}
T12,即可求得
P
1
\ P_1
P1的坐标 。
在实践中:
- 已知:匹配点对 p 1 \ p_1 p1, p 2 \ p_2 p2的像素坐标。
- 给定:两张二维图像,二维图像上特征点的匹配关系。
- 未知:P的三维空间坐标,
I
1
\ I_1
I1到
I
2
\ I_2
I2的变换矩阵(
T
12
\ T_{12}
T12, 即
R
,
T
\ {R,T}
R,T)。
- 一般是用于单目SLAM的初始化,用对极几何可求出位姿,在用三角测量估计三维空间点的位置后,就能用其他更准确的方法继续求解了。
对极约束推导过程
设P在图1的相机坐标系下,坐标为:
P
=
[
X
,
Y
,
Z
]
T
P=[X,Y,Z]^T
P=[X,Y,Z]T
p
1
\ p_1
p1,
p
2
\ p_2
p2的像素坐标(单位像素):
s
1
p
1
=
K
P
,
s
2
p
2
=
K
(
R
P
+
t
)
s_1p_1=KP,s_2p_2=K(RP+t)
s1p1=KP,s2p2=K(RP+t)
K
\ K
K为相机的内参矩阵,
R
,
t
\ R,t
R,t为两个坐标系的相机运动。
使用齐次坐标,上式乘以非零常数都成立:
p
1
=
K
P
,
p
2
=
K
(
R
P
+
t
)
p_1=KP,p_2=K(RP+t)
p1=KP,p2=K(RP+t)
其归一化平面坐标(单位米):
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=K−1p1,x2=K−1p2
得到:
x
2
=
R
x
1
+
t
x_2=Rx_1+t
x2=Rx1+t
这里的
x
1
,
x
2
\ x_1,x_2
x1,x2是齐次坐标,等式表达了一个齐次关系。
两边同时左乘
t
\ t
t^,即:两侧同时与
t
\ t
t做外积,即,与
t
\ t
t作叉乘:
t
×
x
2
=
t
×
R
x
1
+
t
×
t
t×x_2=t×Rx_1+t×t
t×x2=t×Rx1+t×t
t
\ t
t与
t
\ t
t作叉乘,夹角为0,则结果为0,即:
t
×
t
=
0
\ t×t=0
t×t=0,上式化简为:
t
×
x
2
=
t
×
R
x
1
t×x_2=t×Rx_1
t×x2=t×Rx1
两侧同时左乘
x
2
T
\ x_2^T
x2T:
x
2
T
t
×
x
2
=
x
2
T
t
×
R
x
1
x_2^Tt×x_2=x_2^Tt×Rx_1
x2Tt×x2=x2Tt×Rx1
左式中,
t
×
x
2
\ t×x_2
t×x2是一个与
t
\ t
t 和
x
2
\ x_2
x2都垂直的向量,把它再和
x
2
\ x_2
x2做内积时,将得到0。
所以得到对极约束,
x
1
,
x
2
为
归
一
化
坐
标
\ x_1,x_2为归一化坐标
x1,x2为归一化坐标:
x
2
T
t
×
R
x
1
=
0
x_2^Tt×Rx_1=0
x2Tt×Rx1=0
重新带入
p
1
,
p
2
\ p_1,p_2
p1,p2,
p
1
,
p
2
为
像
素
坐
标
\ p_1,p_2为像素坐标
p1,p2为像素坐标:
p
2
T
K
−
T
t
×
R
K
−
1
p
1
=
0
p_2^TK^{-T}t×RK^{-1}p_1=0
p2TK−Tt×RK−1p1=0
上面两式子为对极约束,几何意义是:
O
1
,
P
,
O
2
\ O_1,P,O_2
O1,P,O2三者共面。
定义本质矩阵
E
\ E
E(Essential Matrix)和基础矩阵
F
\ F
F(Fundamental Matrix):
E
=
t
×
R
,
F
=
K
−
T
E
K
−
1
E=t×R,F=K^{-T}EK{-1}
E=t×R,F=K−TEK−1
所以对极约束简写为:
x
2
T
E
x
1
=
p
2
T
F
p
1
=
0
x_2^TEx_1=p_2^TFp_1=0
x2TEx1=p2TFp1=0
根据对极约束,相机位姿估计问题变为以下两步,即估计
R
,
t
\ R,t
R,t的方法为:
1.根据匹配点的位置,求出
E
\ E
E或者
F
\ F
F。
2.根据
E
\ E
E或者
F
\ F
F,求出
R
,
t
\ R,t
R,t。
本质矩阵
本质矩阵长什么样子:
·
E
=
t
×
R
\ E=t×R
E=t×R,
E
\ E
E是一个3×3的矩阵,内有9个未知数。
·
E
\ E
E在不同尺度下是等价的(
E
\ E
E具有尺度等价性):由于对极约束是等式为零的约束,所以对
E
\ E
E乘以任意非零常数后,对极约束依然满足。
· 平移和旋转各有3个自由度,所以
t
×
R
\ t×R
t×R共6个自由度。由于
E
\ E
E具有尺度等价性,这是由于对极约束 的性质,其乘任意非零向量依然满足,即增加一个约束条件,所以6个自由度中可以去掉一个, 所以
E
\ E
E实际有5个自由度。
八点法
·
E
\ E
E具有5个自由度,最少使用5对点来求解
E
\ E
E。但是,
E
\ E
E具有一种非线性性质,在求解线性方程时会很麻烦。
· 把
E
\ E
E当成一个3×3的普通矩阵,共9个自由度,由于
E
\ E
E的尺度等价性,
E
\ E
E具有8个自由度,使用8对点来估计
E
\ E
E,这就是“八点法”。
八点法推导过程
一对匹配点,它们的归一化坐标为
x
1
=
[
u
1
,
v
1
,
1
]
T
,
x
2
=
[
u
2
,
v
2
,
1
]
T
\ x_1=[u_1,v_1,1] ^ T,x_2=[u_2,v_2,1]^T
x1=[u1,v1,1]T,x2=[u2,v2,1]T,根据对极约束,有:
[
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
[u_1,v_1,1] \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
[u1,v1,1]⎣⎡e1e4e7e2e5e8e3e6e9⎦⎤⎣⎡u2v21⎦⎤=0
把
E
\ E
E展开,写成向量的形式:
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
把对极约束写成与
e
\ e
e有关的线性形式:
[
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
同理,对于其他店对也有相同的表示。把所有点都放在一个方程中,变成线性方程组(
u
i
,
v
i
\ u^i,v^i
ui,vi表示第
i
\ i
i个特征点):
[
u
1
1
u
2
1
u
1
1
v
2
1
u
1
1
v
1
1
u
2
1
v
1
1
v
2
1
v
1
1
u
2
1
v
2
1
1
u
1
2
u
2
2
u
1
2
v
2
2
u
1
2
v
1
2
u
2
2
v
1
2
v
2
2
v
1
2
u
2
2
v
2
2
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
u
1
8
u
2
8
u
1
8
v
2
8
u
1
8
v
1
8
u
2
8
v
1
8
v
2
8
v
1
8
u
2
8
v
2
8
1
]
[
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
e
9
]
=
0
\left[ \begin{matrix} {u_1}^1{u_2}^1&{u_1}^1{v_2}^1&{u_1}^1&{v_1}^1{u_2}^1&{v_1}^1{v_2}^1&{v_1}^1&{u_2}^1&{v_2}^1&1\\ {u_1}^2{u_2}^2&{u_1}^2{v_2}^2&{u_1}^2&{v_1}^2{u_2}^2&{v_1}^2{v_2}^2&{v_1}^2&{u_2}^2&{v_2}^2&1 \\ ...&...&...&...&...&...&...&...&...\\ {u_1}^8{u_2}^8&{u_1}^8{v_2}^8&{u_1}^8&{v_1}^8{u_2}^8&{v_1}^8{v_2}^8&{v_1}^8&{u_2}^8&{v_2}^8&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]=0
⎣⎢⎢⎡u11u21u12u22...u18u28u11v21u12v22...u18v28u11u12...u18v11u21v12u22...v18u28v11v21v12v22...v18v28v11v12...v18u21u22...u28v21v22...v2811...1⎦⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡e1e2e3e4e5e6e7e8e9⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=0
由上式可以求得
E
\ E
E,根据
E
\ E
E求取相机的运动
R
,
t
\ R,t
R,t。
本质矩阵 E \ E E的SVD分解
根据
E
\ E
E求取相机的运动
R
,
t
\ R,t
R,t,对
E
\ E
E进行奇异值分解(
S
V
D
\ SVD
SVD):
设
E
\ E
E的SVD分解为:
E
=
U
Σ
V
T
E=U\Sigma{V^T}
E=UΣVT
其中
U
,
V
\ U,V
U,V为正交阵,
Σ
\ \Sigma
Σ为奇异值矩阵。根据本质矩阵
E
\ E
E的内在性质,
E
\ E
E的奇异值必定为
[
σ
,
σ
,
0
]
T
\ [\sigma,\sigma,0]^T
[σ,σ,0]T, 所以
Σ
=
d
i
a
g
[
σ
,
σ
,
0
]
\ \Sigma=diag[\sigma,\sigma,0]
Σ=diag[σ,σ,0]
在
S
V
D
\ SVD
SVD分解中,对于任意一个
E
\ E
E,存在两个可能的
t
,
R
\ t,R
t,R与它对应:
t
1
Λ
=
U
R
Z
(
π
2
)
Σ
U
T
,
R
1
=
U
R
Z
T
(
π
2
)
V
T
t_1^{\Lambda}=UR_Z(\frac{π}{2}){\Sigma}U^T,R_1=UR_Z^T(\frac{π}{2})V^T
t1Λ=URZ(2π)ΣUT,R1=URZT(2π)VT
t
2
Λ
=
U
R
Z
(
−
π
2
)
Σ
U
T
,
R
2
=
U
R
Z
T
(
−
π
2
)
V
T
t_2^{\Lambda}=UR_Z(-\frac{π}{2}){\Sigma}U^T,R_2=UR_Z^T(-\frac{π}{2})V^T
t2Λ=URZ(−2π)ΣUT,R2=URZT(−2π)VT
其中
R
Z
T
(
π
2
)
\ R_Z^T(\frac{π}{2})
RZT(2π)表示沿
Z
\ Z
Z轴旋转
9
0
∘
\ 90^\circ
90∘得到的旋转矩阵。
由于
−
E
\ -E
−E和
E
\ E
E等价,所以任意一个
t
\ t
t取负号,也会得到相同的结果。因此,从
E
\ E
E分解到
t
,
R
\ t,R
t,R时,一共存在4个可能的解。
(1)
P
\ P
P在
O
1
,
O
2
\ O_1,O_2
O1,O2两个相机的前面,深度都为正。
(2)
P
\ P
P在
O
1
,
O
2
\ O_1,O_2
O1,O2两个相机的后面,深度都为负。
(3)
P
\ P
P在
O
1
\ O_1
O1相机的后面,深度为负;在
O
2
\ O_2
O2相机的前面,深度为正。
(4)
P
\ P
P在
O
1
\ O_1
O1相机的前面,深度为正;在
O
2
\ O_2
O2相机的后面,深度为负。
单目SLAM的一些问题
尺度不确定性
t的尺度不确定性。t是平移向量,对t乘任意倍数,对极约束依然成立。
这说明把地图和轨迹同时缩放任意倍,得到的观测值仍然是一样的。图7-7中,
P
,
O
1
,
O
2
\ P,O_1,O_2
P,O1,O2点同时缩放任意倍,
p
1
,
p
2
\ p_1,p_2
p1,p2点不变。
纯旋转问题
若是纯旋转,t为0,而
E
=
t
×
R
\ E=t×R
E=t×R,则E为0,无法求解R。
单目初始化不能只有旋转,必须要有平移。