根据定义,本质矩阵 E = t ∧ R \boldsymbol{E}=\boldsymbol{t}^{\wedge} \boldsymbol{R} E=t∧R。它是一个 3 × 3 3 × 3 3×3 的矩阵,内有 9 9 9 个未知数。那么,是不是任意一个 3 × 3 3 × 3 3×3 的矩阵都可以被当成本质矩阵呢?从 E \boldsymbol{E} E 的构造方式上看,有以下值得注意的地方:
• 本质矩阵是由对极约束定义的。由于对极约束是等式为0的约束,所以对 E E E 乘以任意非零常数后, 对极约束依然满足。我们把这件事情称为 E E E 在不同尺度下是等价的。
• 根据 E = t ∧ R \boldsymbol{E}=\boldsymbol{t}^{\wedge} \boldsymbol{R} E=t∧R,可以证明,本质矩阵 E E E 的奇异值必定是 [ σ , σ , 0 ] T [\sigma, \sigma, 0]^{T} [σ,σ,0]T 的形式。这称为本质矩阵的内在性质。
• 另一方面,由于平移和旋转各有三个自由度,故 E = t ∧ R \boldsymbol{E}=\boldsymbol{t}^{\wedge} \boldsymbol{R} E=t∧R共有 6 6 6 个自由度。但由于尺度等价性,故 E \boldsymbol{E} E 实际上有 5 5 5 个自由度。
E E E 具有五个自由度的事实,表明我们最少可以用五对点来求解 E E E。但是, E E E 的内在性质是一种非线性性质,在求解线性方程时会带来麻烦,因此,也可以只考虑它的尺度等价性,使用八对点来估计 E E E——这就是经典的八点法(Eight-point-algorithm)。八点法只利用了 E E E 的线性性质,因此可以在线性代数框架下求解。下面我们来看八点法是如何工作的。
考虑一对匹配点,它们的归一化坐标为: x 1 = [ u 1 , v 1 , 1 ] T , x 2 = [ u 2 , v 2 , 1 ] T \boldsymbol{x}_{1}=\left[u_{1}, v_{1}, 1\right]^{T}, \boldsymbol{x}_{2}=\left[u_{2}, v_{2}, 1\right]^{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 展开,写成向量的形式:
e = [ e 1 , e 2 , e 3 , e 4 , e 5 , e 6 , e 7 , e 8 , e 9 ] T \boldsymbol{e}=\left[e_{1}, e_{2}, e_{3}, e_{4}, e_{5}, e_{6}, e_{7}, e_{8}, e_{9}\right]^{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 \left[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\right] \cdot e=0 [u2u1,u2v1,u2,v2u1,v2v1,v2,u1,v1,1]⋅e=0
同理,对于其它点对也有相同的表示。我们把所有点都放到一个方程中,变成线性方
程组 (
u
i
,
v
i
u^{i}, v^{i}
ui,vi表示第 i 个特征点,以此类推):
( 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}{c}e_{1} \\ e_{2} \\ e_{3} \\ e_{4} \\ e_{5} \\ e_{6} \\ e_{7} \\ e_{8} \\ e_{9}\end{array}\right)=0 ⎝⎜⎜⎜⎛u21u11u22u12⋮u28u18u21v11u22v12⋮u28v18u21u22⋮u28v21u11v22u12⋮v28u18v21v11v22v12⋮v28v18v21v22⋮v28u11u12⋮u18v11v12⋮v18111⎠⎟⎟⎟⎞⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛e1e2e3e4e5e6e7e8e9⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞=0
这八个方程构成了一个线性方程组。它的系数矩阵由特征点位置构成,大小为 8 × 9 8 × 9 8×9。 e e e 位于该矩阵的零空间中。如果系数矩阵是满秩的(即秩为 8 8 8),那么它的零空间维数为 1 1 1,也就是 e e e 构成一条线。这与 e e e 的尺度等价性是一致的。如果八对匹配点组成的矩阵满足秩为 8 8 8 的条件,那么 E E E 的各元素就可由上述方程解得。
接下来的问题是如何根据已经估得的本质矩阵 E E E ,恢复出相机的运动 R , t R, t R,t。这个过程是由奇异值分解( S V D SVD SVD)得到的。设 E E E 的 S V D SVD SVD 分解为:
E = U Σ V T \boldsymbol{E}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} E=UΣVT
其中
U
,
V
U, V
U,V 为正交阵,
Σ
Σ
Σ 为奇异值矩阵。根据
E
E
E 的内在性质,我们知道
Σ
=
d
i
a
g
(
σ
,
σ
,
0
)
Σ = diag(σ, σ, 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 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}^{T}, \quad \boldsymbol{R}_{1}=\boldsymbol{U} \boldsymbol{R}_{Z}^{T}\left(\frac{\pi}{2}\right) \boldsymbol{V}^{T} \\ \boldsymbol{t}_{2}^{\wedge} &=\boldsymbol{U} \boldsymbol{R}_{Z}\left(-\frac{\pi}{2}\right) \boldsymbol{\Sigma} \boldsymbol{U}^{T}, \quad \boldsymbol{R}_{2}=\boldsymbol{U} \boldsymbol{R}_{Z}^{T}\left(-\frac{\pi}{2}\right) \boldsymbol{V}^{T} \end{aligned} t1∧t2∧=URZ(2π)ΣUT,R1=URZT(2π)VT=URZ(−2π)ΣUT,R2=URZT(−2π)VT
其中 R Z ( π 2 ) \boldsymbol{R}_{Z}\left(\frac{\pi}{2}\right) RZ(2π) 表示沿 Z Z Z 轴旋转 90 90 90 度得到的旋转矩阵。同时,由于 − E −E −E 和 E E E 等价,所以对任意一个 t t t 取负号,也会得到同样的结果。因此,从 E E E 分解到 t , R t, R t,R 时,一共存在四个可能的解(恢复出摄像机投影矩阵的四个可能解)。
分解本质矩阵得到的四个解。在保持投影点(红点)不变的情况下,两个相机以及空间点一共有四种可能的情况。
上图形象地显示了分解本质矩阵得到的四个解。我们已知空间点在相机(蓝色线)上的投影(红点),想要求解相机的运动。在保持红点不变的情况下,可以画出四种可能的情况,不过幸运的是,只有第一种解中, P P P 在两个相机中都具有正的深度。因此,只要把任意一点代入四种解中,检测该点在两个相机下的深度,就可以确定哪个解是正确的了。
如果利用 E E E 的内在性质,那么它只有五个自由度。所以最小可以通过五对点来求解相机运动。然而这种做法形式复杂,从工程实现角度考虑,由于平时通常会有几十对乃至上百对的匹配点,从八对减至五对意义并不明显。为保持简单,我们这里就只介绍基本的八点法了。
剩下的问题还有一个:根据线性方程解出的 E E E,可能不满足 E E E 的内在性质——它的奇异值不一定为 σ , σ , 0 σ, σ, 0 σ,σ,0 的形式。这时,在做 S V D SVD SVD 时,我们会刻意地把 Σ Σ Σ 矩阵调整成上面的样子。通常的做法是,对八点法求得的 E E E 进行 S V D SVD SVD 分解后,会得到奇异值矩阵 Σ = d i a g ( σ 1 , σ 2 , σ 3 ) Σ = diag(σ1, σ2, σ3) Σ=diag(σ1,σ2,σ3),不妨设 σ 1 ≥ σ 2 ≥ σ 3 σ1 ≥ σ2 ≥ σ3 σ1≥σ2≥σ3。取:
E = U diag ( σ 1 + σ 2 2 , σ 1 + σ 2 2 , 0 ) V T \boldsymbol{E}=\boldsymbol{U} \operatorname{diag}\left(\frac{\sigma_{1}+\sigma_{2}}{2}, \frac{\sigma_{1}+\sigma_{2}}{2}, 0\right) \boldsymbol{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 具有尺度等价性,这样做也是合理的。
分解本质矩阵
https://zhuanlan.zhihu.com/p/349741190https://gutsgwh1997.github.io/2020/05/26/%E5%8F%8D%E5%AF%B9%E7%A7%B0%E7%9F%A9%E9%98%B5%E7%9A%84%E6%80%A7%E8%B4%A8/
( U [ 0 0 a ] ) ∧ = U [ 0 − a 0 a 0 0 0 0 0 ] U T \left(U\left[\begin{array}{l}0 \\ 0 \\ a\end{array}\right]\right)^{\wedge}=U\left[\begin{array}{ccc}0 & -a & 0 \\ a & 0 & 0 \\ 0 & 0 & 0\end{array}\right] U^{T} ⎝⎛U⎣⎡00a⎦⎤⎠⎞∧=U⎣⎡0a0−a00000⎦⎤UT
(
U
b
)
∧
=
U
b
∧
U
T
(U b)^{\wedge}=U b^{\wedge} U^{T}
(Ub)∧=Ub∧UT
⇔
(
U
b
)
∧
U
=
U
b
∧
U
T
U
=
U
b
∧
\Leftrightarrow(U b)^{\wedge} U=U b^{\wedge} U^{T} U=U b^{\wedge}
⇔(Ub)∧U=Ub∧UTU=Ub∧
⇔
∀
a
∈
R
3
,
(
U
b
)
∧
U
a
=
U
b
∧
a
\Leftrightarrow \forall a \in R^{3}, \quad(U b)^{\wedge} U a=U b^{\wedge} a
⇔∀a∈R3,(Ub)∧Ua=Ub∧a
⇔
∀
a
∈
R
3
,
(
U
b
)
×
(
U
a
)
=
U
(
b
×
a
)
\Leftrightarrow \forall a \in R^{3}, \quad(U b) \times(U a)=U(b \times a)
⇔∀a∈R3,(Ub)×(Ua)=U(b×a)