对极约束
对极几何的地位:对极几何(Epipolar Geometry)是Structure from Motion问题中,相机在不同位置拍摄场景,所成两幅图像中对应坐标点存在的几何关系,是SFM中2D-2D求解两帧图像间相机位姿的基本模型。
匹配的特征点
p
1
p_1
p1,
p
2
p_2
p2。
两幅图像
I
1
I_1
I1,
I
2
I_2
I2。第一帧到第二帧图像的运动R,t。两个相机的中心分别为
O
1
O_1
O1,
O
2
O_2
O2。
I
1
I_1
I1中特征点
p
1
p_1
p1,在
I
2
I_2
I2上对应的特征点
p
2
p_2
p2。如果二者匹配正确,则两点对应同一空间点在两个成像平面上的投影。
p
1
p_1
p1,在
I
2
I_2
I2,
O
1
p
1
→
\overrightarrow{O_1p_1}
O1p1与
O
2
p
2
→
\overrightarrow{O_2p_2}
O2p2在三维空间中相交于点P。
O
1
,
O
2
,
P
{O_1,O_2,P}
O1,O2,P三点可以确定一个平面,称为极平面(Epipolar plane)。
O
1
O
2
{O_1O_2}
O1O2称为基线(Baseline)。称极平面与两个像平面
I
1
I_1
I1,
I
2
I_2
I2的交线
l
1
l_1
l1,
l
2
l_2
l2,称为极线。
几何关系,从代数的角度描述
在第一帧的坐标系下,P的空间位置
[
X
Y
Z
]
T
\left[\begin{matrix}X&Y&Z \end{matrix}\right]^T
[XYZ]T,根据针孔相机模型,相机成像平面一点的像素坐标
p
p
p和该点在世界坐标系下的3D坐标
P
P
P存在
p
=
K
P
p=KP
p=KP的关系,其中
K
K
K为相机内参。采用齐次坐标表示为:
d
p
=
K
P
dp=KP
dp=KP其中d是空间点深度(为了将
p
p
p的齐次项变为1),
p
p
p和
P
P
P都是齐次坐标。以第一个相机坐标系作为参照,两个像素点的像素位置(up to scale)为
(1)
d
1
p
1
=
K
P
d_1p_1=KP\tag{1}
d1p1=KP(1)
(2)
d
2
p
2
=
K
(
R
P
+
t
)
d_2p_2=K(RP+t)\tag{2}
d2p2=K(RP+t)(2)其中K为相机内参矩阵,R为从第一个相机坐标系到第二个相机坐标系的旋转矩阵(Rotation),t为从第一个相机坐标系到第二个相机坐标系的平移向量(Translation)。如果写成齐次坐标的形式,上式可写成非零常数下成立的等式:
(3)
p
1
=
K
P
p_1=KP\tag{3}
p1=KP(3)
(4)
p
2
=
K
(
R
P
+
t
)
p_2=K(RP+t)\tag{4}
p2=K(RP+t)(4)现在取:
(5)
x
1
=
K
−
1
p
1
x_1=K^{-1}p_1\tag{5}
x1=K−1p1(5)
(6)
x
2
=
K
−
1
p
2
x_2=K^{-1}p_2\tag{6}
x2=K−1p2(6)点
x
1
,
x
2
x_1,x_2
x1,x2是两个像素点的归一化平面(相机坐标系?)上的坐标,带入上式得:
(7)
x
2
=
R
x
1
+
t
x_2=Rx_1+t\tag{7}
x2=Rx1+t(7)两边同时左乘
t
∧
t^\wedge
t∧,相当于两侧同时与t做外积:
(8)
t
∧
x
2
=
t
∧
R
x
1
t^\wedge x_2=t^\wedge Rx_1\tag{8}
t∧x2=t∧Rx1(8)两边同时左乘
x
2
T
x_2^T
x2T:
(9)
x
2
T
t
∧
x
2
=
x
2
T
t
∧
R
x
1
x_2^Tt^\wedge x_2=x_2^Tt^\wedge Rx_1\tag{9}
x2Tt∧x2=x2Tt∧Rx1(9)观察等式左侧,
t
∧
x
2
t^\wedge x_2
t∧x2是一个与t和
x
2
x_2
x2都垂直的向量。把它再和
x
2
x_2
x2做内积时,将得到0。因此
(10)
x
2
T
t
∧
R
x
1
=
0
x_2^Tt^\wedge Rx_1=0\tag{10}
x2Tt∧Rx1=0(10),重新带入
p
1
,
p
2
p_1,p_2
p1,p2,有:
(11)
p
2
T
K
−
T
t
∧
R
K
−
1
p
1
=
0
p_2^TK^{-T}t^\wedge R K^{-1}p_1=0\tag{11}
p2TK−Tt∧RK−1p1=0(11)(10),(11)式都称为对极约束。
将中间部分记作两个矩阵:
E
=
t
∧
R
,
F
=
K
−
T
E
K
−
1
,
x
2
T
E
x
1
=
p
2
T
F
p
1
E=t^\wedge R,F=K^{-T}EK^{-1},x^T_2Ex_1=p^T_2Fp_1
E=t∧R,F=K−TEK−1,x2TEx1=p2TFp1
对极约束描述了匹配点
x
2
x_2
x2在
E
x
1
Ex_1
Ex1这条直线上这样的几何关系。相机位姿求解:
- 通过匹配点对求解E或F。
- 分解E或F求出R,t。
- 备注:E和F只相差相机内参,SLAM通常已知内参,实践中采用形式更简洁的E。
几何关系,从几何的角度描述
对极约束,几何解释1
如图,对极平面
O
1
O
2
P
O_1O_2P
O1O2P,物点P在左像平面上的像点
p
l
p_l
pl,在左像平面上的像点
p
r
p_r
pr,左相机光心
O
1
O_1
O1在右像平面成像点
e
r
e_r
er,右相机光心
O
2
O_2
O2在左像平面成像点
e
l
e_l
el,其中
e
l
,
e
r
e_l,e_r
el,er称为极点,
p
l
e
l
,
p
r
e
r
p_le_l,p_re_r
plel,prer称为极线。对极约束描述的是物点在左相机平面上所成像点
p
l
p_l
pl,在右相机平面一定在极线
p
r
e
r
p_re_r
prer上。
两个相机的坐标系存在如下关系:
x
2
x_2
x2
对极约束几何解释2
对极约束中很常见的图。它表示的是一个运动的相机在两个不同位置的成像,左右两个平行四边形分别是相机在不同位置的成像平面,
C
0
,
C
1
C_0, C_1
C0,C1分别是两个位置中相机的光心,也就是针孔相机模型中的针孔
P
P
P是空间中的一个三维点,
p
0
p
1
p_0p_1
p0p1分别是P点在不同成像平面上对应的像素点。
C
0
C
1
P
p
0
p
1
C_0C_1Pp_0p_1
C0C1Pp0p1组成的平面叫极平面。
极平面与成像平面的交线叫极线,两个光心和成像平面的交点叫极点。
三个向量共面,即
(2-1)
C
0
P
0
→
⋅
(
C
0
P
0
→
×
C
1
P
1
→
\overrightarrow{C_0P_0}\cdot(\overrightarrow{C_0P_0} \times \overrightarrow{C_1P_1} \tag{2-1}
C0P0⋅(C0P0×C1P1(2-1)
p
0
,
p
1
p_0,p_1
p0,p1都是图像上的二维点。把它们变成三维的方向向量来考虑,即只考虑方向,不考虑起点或终点。假设一个归一化的图像平面,该平面上焦距f=1,因此,在以
C
0
C_0
C0为原点的坐标系下,
p
0
=
(
x
0
y
0
1
)
C
0
p_0=\left(\begin{matrix}x_0&y_0&1 \end{matrix}\right)_{C_0}
p0=(x0y01)C0,以
C
1
C_1
C1为坐标系
p
1
=
(
x
1
y
1
1
)
C
1
p_1=\left(\begin{matrix}x_1&y_1&1 \end{matrix}\right)_{C_1}
p1=(x1y11)C1,在
C
0
C
1
p
0
p
1
C_0C_1p_0p_1
C0C1p0p1组成的极平面上,保证
C
0
P
0
→
\overrightarrow{C_0P_0}
C0P0的方向不变,在极平面上移动时,结论仍然成立。
p
0
,
p
1
p_0,p_1
p0,p1不在同一个坐标系里,将所有点的坐标都转换到以
p
0
p_0
p0为原点的坐标系,方向向量仅与方向有关,而与起始位置无关,因此只考虑旋转。从
C
1
C_1
C1坐标系到
C
0
C_0
C0坐标系的旋转矩阵R,那么
R
p
1
Rp_1
Rp1就是
p
1
p_1
p1在以
C
0
C_0
C0为原点的坐标系中的坐标了。
对
(2-1)
C
0
P
0
→
⋅
(
C
0
P
0
→
×
C
1
P
1
→
\overrightarrow{C_0P_0}\cdot(\overrightarrow{C_0P_0} \times \overrightarrow{C_1P_1} \tag{2-1}
C0P0⋅(C0P0×C1P1(2-1)最左边向量
C
0
p
0
C_0p_0
C0p0可以用
p
0
p_0
p0表示,向量
C
0
C
1
C_0C_1
C0C1就是光心
C
1
C_1
C1相对于
C
0
C_0
C0的平移,记为t,向量
C
1
p
1
C_1p_1
C1p1根据前面的结论,可以用
R
p
1
Rp_1
Rp1表示,因此上式可表达为:
p
0
⋅
(
t
×
R
p
1
)
p_0\cdot(t\times Rp_1)
p0⋅(t×Rp1)
这个式子是根据对极几何得到的,因此称为对极约束。
其中
(
t
×
R
)
=
t
∧
R
=
E
(t\times R)=t^{\wedge }R=E
(t×R)=t∧R=E称为本质矩阵或本征矩阵。因此:
p
0
E
p
1
=
0
p_0Ep_1=0
p0Ep1=0根据此式,可求出极线方程。
根据理论:点
p
p
p在直线
l
l
l上的充分必要条件是直线
l
l
l的系数与
p
p
p的齐次坐标
p
′
p'
p′的内积为0。即
l
T
⋅
p
′
=
0
l^T\cdot p'=0
lT⋅p′=0
将
E
p
1
Ep_1
Ep1看作是直线的方程,
p
0
p_0
p0看作是直线上的点,即
E
p
1
Ep_1
Ep1是以
C
0
C_0
C0为原点坐标系中的极线了。如图中红线所示:
题目:现有一个运动着的相机拍摄的连续两张图片,其中特征点匹配部分已经完成。请根据两帧图像对应的匹配点计算基础矩阵,并利用该矩阵绘制出前10个特征点对应的极线。
注释
叉乘与矩阵和向量相乘的变换推导
向量
a
=
[
a
1
a
2
a
3
]
a=\left[\begin{matrix}a_1&a_2&a_3 \end{matrix}\right]
a=[a1a2a3],
b
=
[
b
1
b
2
b
3
]
b=\left[\begin{matrix}b_1&b_2&b_3 \end{matrix}\right]
b=[b1b2b3],内积描述向量间的投影关系,
a
⋅
b
=
a
T
b
=
∑
i
=
1
3
a
i
b
i
=
∣
a
∣
∣
b
∣
c
o
s
⟨
a
,
b
⟩
a\cdot b=a^Tb= \sum_{i=1}^3a_ib_i=| a | | b | cos\left \langle a,b\right \rangle
a⋅b=aTb=i=1∑3aibi=∣a∣∣b∣cos⟨a,b⟩
外积描述两个向量张成的四边形的有向面积:
a
×
b
=
[
i
j
k
a
1
a
2
a
3
b
1
b
2
b
3
]
=
[
a
2
b
3
−
a
3
b
2
a
3
b
1
−
a
1
b
3
a
1
b
2
−
a
2
b
1
]
b
=
△
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
b
=
a
∧
b
a \times b= \left[ \begin{matrix} i &j &k\\ a_1&a_2&a_3\\b_1&b_2&b_3\\ \end{matrix} \right]=\left[\begin{matrix}a_2b_3-a_3b_2\\a_3b_1-a_1b_3\\a_1b_2-a_2b_1 \end{matrix}\right]b\overset{\bigtriangleup}{=}\left[\begin{matrix}0&-a_3&a_2\\a_3&0&-a_1\\-a_2&a_1&0\end{matrix}\right]b=a^\wedge b
a×b=⎣⎡ia1b1ja2b2ka3b3⎦⎤=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤b=△⎣⎡0a3−a2−a30a1a2−a10⎦⎤b=a∧b。引入
∧
^\wedge
∧符号(反对称符号),把a写成一个反对称矩阵,可以把
a
×
b
a \times b
a×b写成矩阵与向量的乘法
a
∧
b
a^\wedge b
a∧b,把外积变成了线性运算。外积只对三维向量存在定义。外积还可以表示向量的旋转。a到b的旋转可以通过右手定则来确定方向,用a,b之间的夹角确定大小,用3个实数来描述,即向量
ω
\omega
ω。
叉乘与点乘的关系
两个向量的叉乘结果是一个同时垂直于这两个向量的向量。
叉乘只在三维空间中有定义,比如两个向量 a和b 的叉乘写作 a x b,它是与向量 a, b都垂直的向量,其方向通过右手定则决定。
除了叉乘,还有点乘,a点乘b的定义是
a
⋅
b
=
∣
a
∣
∣
b
∣
c
o
s
(
θ
)
a\cdot b=| a | | b | cos(θ)
a⋅b=∣a∣∣b∣cos(θ)
因此如果两个互相垂直的向量点乘,cos(θ) = 0,点乘结果也为0。
点p在直线上的充分必要条件是直线l的系数与p的齐次坐标 p ′ p' p′的内积为0
l T p ˙ ′ = 0 l^T\dot p'=0 lTp˙′=0
初次整理笔记,理解还不是特别深刻,先到这吧,以后有了新理解再来补充。
参考文献
《视觉SLAM十四讲:从理论到实践》第7讲7.3.1
从零开始一起学习SLAM | 不推公式,如何真正理解对极约束? https://zhuanlan.zhihu.com/p/48666442
https://www.cnblogs.com/clarenceliang/p/6704970.html
https://www.jianshu.com/p/032e61a23cc0