记录一下本质矩阵的一些知识点。
对极几何
x
2
T
t
∧
R
x
1
=
0.
x_2^Tt^\wedge Rx_1=0.
x2Tt∧Rx1=0.
p
2
T
K
−
T
t
∧
R
K
−
1
p
1
=
0.
p_2^TK^{-T}t^\wedge RK^{-1}p_1=0.
p2TK−Tt∧RK−1p1=0.
对极几何的几何意义是
O
1
,
P
,
O
2
O_1,P,O_2
O1,P,O2三者共面。对极约束中同时包含了平移和旋转。记:
E
=
t
∧
R
E=t^\wedge R
E=t∧R,
F
=
K
−
T
t
∧
R
K
−
1
F=K^{-T}t^\wedge RK^{-1}
F=K−Tt∧RK−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.
E
E
E被称为本质矩阵,
F
F
F被称为基础矩阵。
本质矩阵
本质矩阵定义:
E
=
t
∧
R
E=t^\wedge R
E=t∧R是一个
3
×
3
3\times 3
3×3的矩阵,有
9
9
9个未知数。
从
E
E
E的构造方式上来看,有以下值得注意的地方:
- 本质矩阵是由对极约束定义的。由于对极约束是等式为零的约束,所以对 E E E乘以任意非零常数后,对极约束依然满足。这被称为 E E E在不同尺度下是等价的。
- 根据 E = t ∧ R E=t^\wedge R E=t∧R,可以证明本质矩阵 E E E的奇异值必定是 [ σ , σ , 0 ] T [\sigma,\sigma,0]^T [σ,σ,0]T的形式。这被称为本质矩阵的内在性质。
- 另外,由于平移和旋转各有 3 3 3个自由度,故 E = t ∧ R E=t^\wedge R E=t∧R共有 6 6 6个自由度。但由于尺度等价性,故 E E E实际上有 5 5 5个自由度。
八点法
E
E
E具有5个自由度的事实,表明我们最少可以用5对点来求解
E
E
E。但
E
E
E的内在性质是一种非线性性质,在估计时会带来麻烦。因此也可以只考虑它的尺度等价性,使用
8
8
8对点来估计
E
E
E——八点法。
八点法只利用了
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
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
\begin{pmatrix}u_2,v_2,1\end{pmatrix}\begin{pmatrix} e_1 & e_2 & e_3 \\ e_4 & e_5 & e_6 \\ e_7 & e_8 & e_9 \\ \end{pmatrix}\begin{pmatrix}u1\\v1\\1\end{pmatrix}=0
(u2,v2,1)⎝⎛e1e4e7e2e5e8e3e6e9⎠⎞⎝⎛u1v11⎠⎞=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
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_2,v_1,v_2,u_1,v_1,1]\cdot e=0
[u2u1,u2v1,u2,v2u1,v2,v1,v2,u1,v1,1]⋅e=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
\begin{pmatrix}u_2^1u_1^1&u_2^1v_1^1&u_2^1&v_2^1u_1^1&v_2^1v_1^1&v_2^1&u_1^1&v_1^1&1\\ u_2^2u_1^2&u_2^2v_1^2&u_2^2&v_2^2u_1^2&v_2^2v_1^2&v_2^2&u_1^2&v_1^2&1\\ \vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots\\ u_2^8u_1^8&u_2^8v_1^8&u_2^8&v_2^8u_1^8&v_2^8v_1^8&v_2^8&u_1^8&v_1^8&1 \end{pmatrix}\begin{pmatrix}e_1\\e_2\\e_3\\e_4\\e_5\\e_6\\e_7\\e_8\\e_9\end{pmatrix}=0
⎝⎜⎜⎜⎛u21u11u22u12⋮u28u18u21v11u22v12⋮u28v18u21u22⋮u28v21u11v22u12⋮v28u18v21v11v22v12⋮v28v18v21v22⋮v28u11u12⋮u18v11v12⋮v1811⋮1⎠⎟⎟⎟⎞⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛e1e2e3e4e5e6e7e8e9⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞=0
该线性方程组的系数矩阵是由特征点位置构成的,大小为
8
×
9
8\times9
8×9。
e
e
e位于该矩阵的零空间中。如果系数矩阵满秩,则零空间维数为
1
1
1,也就是
e
e
e构成一条线。这与
e
e
e的尺度等价性是一致的,而
E
E
E的各元素就可由上述方程解得。
求解R,t
R
和
t
R和t
R和t分别由
E
E
E的奇异值分解(
S
V
D
SVD
SVD)得到。
设
E
E
E的
S
V
D
SVD
SVD为:
E
=
U
Σ
V
T
E=U\Sigma V^T
E=UΣVT
其中
U
,
V
U,V
U,V为正交矩阵,
Σ
\Sigma
Σ为奇异值矩阵。根据
E
E
E的内在性质可知
Σ
=
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^\wedge_1=UR_Z(\frac{\pi}{2})\Sigma U^T,R_1=UR^T_Z(\frac{\pi}{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^\wedge_2=UR_Z(-\frac{\pi}{2})\Sigma U^T,R_2=UR^T_Z(-\frac{\pi}{2})V^T
t2∧=URZ(−2π)ΣUT,R2=URZT(−2π)VT
其中
R
Z
(
π
2
)
表
示
沿
Z
轴
旋
转
90
°
R_Z(\frac{\pi}{2})表示沿Z轴旋转90°
RZ(2π)表示沿Z轴旋转90°得到旋转矩阵。同时,由于
−
E
和
E
-E和E
−E和E等价,所以对任意一个
t
t
t取负号,也会得到同样的结果。因此,从
E
E
E分解到
t
,
R
t,R
t,R时,一共存在
4
4
4个可能的解。将任意一点代入这
4
4
4个解中,检测该点在两个相机下的深度,就可以确定哪个解是正确的了。
讨论
根据线性方程解出的
E
E
E可能不满足
E
E
E的内在性质——它的奇异值不一定为
σ
,
σ
,
0
\sigma,\sigma,0
σ,σ,0的形式。这时需要把
Σ
\Sigma
Σ调整成上面的样子。通常的做法是,对八点法求得的
E
E
E进行
S
V
D
SVD
SVD,会得到奇异值矩阵
Σ
=
d
i
a
g
(
σ
1
,
σ
2
,
σ
3
)
\Sigma=diag(\sigma_1,\sigma_2,\sigma_3)
Σ=diag(σ1,σ2,σ3),不妨设
σ
1
≥
σ
2
≥
σ
3
\sigma_1\geq\sigma_2\geq\sigma_3
σ1≥σ2≥σ3。取:
E
=
U
d
i
a
g
(
σ
1
+
σ
2
2
,
σ
1
+
σ
2
2
,
0
)
V
T
E=Udiag(\frac{\sigma_1+\sigma_2}{2},\frac{\sigma_1+\sigma_2}{2},0)V^T
E=Udiag(2σ1+σ2,2σ1+σ2,0)VT这相当于是把求出来的矩阵投影到了
E
E
E所在的流形上 。
更简单的做法是将奇异值矩阵取成
d
i
a
g
(
1
,
1
,
0
)
diag(1,1,0)
diag(1,1,0),因为
E
E
E具有尺度等价性 ,所以这样做也是合理的。