本质矩阵 基础矩阵 单应矩阵 (2)

根据定义,本质矩阵 E = t ∧ R \boldsymbol{E}=\boldsymbol{t}^{\wedge} \boldsymbol{R} E=tR。它是一个 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=tR,可以证明,本质矩阵 E E E 的奇异值必定是 [ σ , σ , 0 ] T [\sigma, \sigma, 0]^{T} [σ,σ,0]T 的形式。这称为本质矩阵的内在性质。

• 另一方面,由于平移和旋转各有三个自由度,故 E = t ∧ R \boldsymbol{E}=\boldsymbol{t}^{\wedge} \boldsymbol{R} E=tR共有 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)e1e4e7e2e5e8e3e6e9u1v11=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 u21u11u22u12u28u18u21v11u22v12u28v18u21u22u28v21u11v22u12v28u18v21v11v22v12v28v18v21v22v28u11u12u18v11v12v18111e1e2e3e4e5e6e7e8e9=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} t1t2=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/349741190

https://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} U00a=U0a0a00000UT

( U b ) ∧ = U b ∧ U T (U b)^{\wedge}=U b^{\wedge} U^{T} (Ub)=UbUT
⇔ ( 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=UbUTU=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 aR3,(Ub)Ua=Uba
⇔ ∀ 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) aR3,(Ub)×(Ua)=U(b×a)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gone_float

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值