对极几何系列篇:
对极几何的基础矩阵和本质矩阵1
对极几何的基础矩阵和本质矩阵2
前面介绍了对极几何的原理和基础矩阵F的求解,接下来介绍如何求解E矩阵和根据E矩阵分解相机的姿态 R和t。
世界坐标点P,在两个相机上的投影分别为p1,p2, 内参矩阵为k1, K2, 外参为[R1 T1], [R2 T2]
计算E矩阵
根据基础矩阵F
F
=
K
2
−
T
E
K
1
−
T
F = K^{-T}_2EK^{-T}_1
F=K2−TEK1−T
K1,K2是已知的,因而可以根据F矩阵计算E,E矩阵是奇异矩阵,det(E)=0, 并且有两个相等的特征值。这样解出来的E矩阵不一定满足该性质,需要SVD分解。
由于本质矩阵的尺度等价性,S也可以设置为 diag([1 1 0])
从E矩阵中分解相机姿态R和t
分解的结果是两个相机之间的旋转和平移。假设左相机的外参[I 0], 右相机的为[R t]。
这里推导R和t.
p
1
=
R
1
P
+
T
1
p
2
=
R
2
P
+
T
2
p_1 = R_1P+T_1 \\ p_2 = R_2P+T_2
p1=R1P+T1p2=R2P+T2
那么
p
2
=
R
2
R
1
−
1
p
1
+
T
2
−
R
2
R
1
−
1
T
1
p_2=R_2R^{-1}_1p_1+T_2-R_2R^{-1}_1T_1
p2=R2R1−1p1+T2−R2R1−1T1
所以
{
R
=
R
2
R
1
−
1
t
=
T
2
−
R
T
1
\left\{ \begin{matrix} R = R_2R^{-1}_1 \\ t = T_2-RT_1 \end{matrix} \right.
{R=R2R1−1t=T2−RT1
如果已知两个相机的外参,比如同时拍摄同一张棋盘格,那么R和t ,其实就可以解出来了。
E
=
[
t
×
]
R
E = [t_{\times}]R
E=[t×]R
但在只知道特征点匹配的情况下,只能通过矩阵分解的方式。
矩阵E分解步骤:
-
对E进行分解, E = U S V T E=USV^T E=USVT, 并且 d e t ( U V T ) = 1 det(UV^T)=1 det(UVT)=1.
-
对任意一个E,存在两种可能的t,R与它对应:
t 1 × = U R z ( π 2 ) S U T t 2 × = U R z ( − π 2 ) S U T R 1 = U R z T ( π 2 ) S V T R 2 = U R z T ( − π 2 ) S V T t_{1\times} = UR_z(\frac\pi{2})SU^{T} \\ t_{2\times} = UR_z(-\frac\pi{2})SU^{T} \\ R_1 = UR^{T}_z(\frac\pi{2})SV^{T} \\ R_2 = UR^{T}_z(-\frac\pi{2})SV^{T} \\ t1×=URz(2π)SUTt2×=URz(−2π)SUTR1=URzT(2π)SVTR2=URzT(−2π)SVT
其中 R z ( π 2 ) R_z(\frac{\pi}2) Rz(2π) 是沿z轴旋转90度,也就是
R z T ( π 2 ) = [ 0 − 1 0 1 0 0 0 0 1 ] R z T ( − π 2 ) = [ 0 1 0 − 1 0 0 0 0 1 ] R^{T}_z(\frac\pi{2})=\left[\begin{matrix} 0 & -1 & 0 \\ 1 & 0 & 0\\ 0 & 0 & 1 \end{matrix}\right] \\ R^{T}_z(-\frac\pi{2})=\left[\begin{matrix} 0 & 1 & 0 \\ -1 & 0 & 0\\ 0 & 0 & 1 \end{matrix}\right] RzT(2π)=⎣⎡010−100001⎦⎤RzT(−2π)=⎣⎡0−10100001⎦⎤ -
这样子就会有4种解,如何确定一种解呢,根据已知的世界坐标点,应该在两个相机的前方,也就是坐标的z值是大于0的,那么代入就可以确定R和t。