多视图几何总结——单应矩阵和基础矩阵的兼容关系
多视图几何总结——单应矩阵和基础矩阵的兼容关系
这应该是多视图几何里面最后一篇总结了吧,在书中用一整章的篇幅介绍了平面单应(单应矩阵)和对极几何(基础矩阵)之间的关系,相对是比较复杂的,好几次绕晕我了…如下图
图中
x
x
x和
x
′
x'
x′的关系可以有两种描述方式
第一种:通过对极几何一幅视图中的一点
x
x
x可以确定另一幅视图中的一条直线,它是通过
x
′
x'
x′的一条射线
第二种:通过平面
π
\pi
π确定了一个单应
H
H
H,使得通过一个
x
x
x可以确定另一幅视图中的点
x
′
x'
x′(
x
x
x和
x
π
x_{\pi}
xπ是可以通过单应联系起来,
x
‘
x‘
x‘和
x
π
x_{\pi}
xπ同理,那么
x
x
x和
x
’
x’
x’也是可以通过单应联系的)
(1)单应矩阵和基础矩阵的兼容性
结论一:给定两幅视图的投影矩阵 P = [ I ∣ 0 ] P ′ = [ A ∣ a ] \mathrm{P}=[\mathrm{I} | 0] \quad \mathrm{P}^{\prime}=[\mathrm{A} | \mathrm{a}] P=[I∣0]P′=[A∣a]和由 π ⊤ X = 0 \boldsymbol{\pi}^{\top} \mathbf{X}=0 π⊤X=0定义的一张平面,其中 π = ( v ⊤ , 1 ) ⊤ \boldsymbol{\pi}=\left(\mathbf{v}^{\top}, 1\right)^{\top} π=(v⊤,1)⊤,则由这个平面诱导的单应是 x ′ = H x \mathbf{x}^{\prime}=\mathrm{Hx} x′=Hx,其中 H = A − a v T \mathrm{H}=\mathrm{A}-\mathrm{a} \mathrm{v}^{\mathrm{T}} H=A−avT 解释:这个看起来可能不太直观,《视觉SLAM十四讲》其实给了相应的推导,现在假定两幅图中有一对匹配好的特征点 p 1 p_{1} p1和 p 2 p_{2} p2,然后这两个特征点对应的空间点在满足下面方程的平面上: n T P + d = 0 \boldsymbol{n}^{T} \boldsymbol{P}+d=0 nTP+d=0结合对极几何的变换关系有 p 2 = K ( R P + t ) = K ( R P + t ⋅ ( − n T P d ) ) = K ( R − t n T d ) P = K ( R − t n T d ) K − 1 p 1 \begin{aligned} \boldsymbol{p}_{2} &=\boldsymbol{K}(\boldsymbol{R} \boldsymbol{P}+\boldsymbol{t}) \\ &=\boldsymbol{K}\left(\boldsymbol{R} \boldsymbol{P}+\boldsymbol{t} \cdot\left(-\frac{\boldsymbol{n}^{T} \boldsymbol{P}}{d}\right)\right) \\ &=\boldsymbol{K}\left(\boldsymbol{R}-\frac{\boldsymbol{t} \boldsymbol{n}^{T}}{d}\right) \boldsymbol{P} \\ &=\boldsymbol{K}\left(\boldsymbol{R}-\frac{\boldsymbol{t} \boldsymbol{n}^{T}}{d}\right) \boldsymbol{K}^{-1} \boldsymbol{p}_{1} \end{aligned} p2=K(RP+t)=K(RP+t⋅(−dnTP))=K(R−dtnT)P=K(R−dtnT)K−1p1及 p 2 = H p 1 \boldsymbol{p}_{2}=\boldsymbol{H} \boldsymbol{p}_{1} p2=Hp1这和我们结论中的 x ′ = H x \boldsymbol{x}^{\prime}=\boldsymbol{Hx} x′=Hx是一致的。
结论二:一个单应 H H H和一个基本矩阵 F F F相容的充要条件是矩阵 H T F H^TF HTF是反对称的 H ⊤ F + F T H = 0 \mathrm{H}^{\top} \mathrm{F}+\mathrm{F}^{\mathrm{T}} \mathrm{H}=0 H⊤F+FTH=0
我们知道四对点可以确定一个单应矩阵,如果这四对点是有空间中一个平面上的四个空间点在两幅视图中生成的图像点,则通过这四个点计算的单应矩阵 H H H和基础矩阵 F F F满足: ( H x ) T F x = x ⊤ H ⊤ F x = 0 (\mathrm{Hx})^{\mathrm{T}} \mathrm{F} \mathrm{x}=\mathrm{x}^{\top} \mathrm{H}^{\top} \mathrm{F} \mathrm{x}=0 (Hx)TFx=x⊤H⊤Fx=0
(2)基础矩阵 —> 单应矩阵
这里我们拥有的已知条件是:两幅视图中的基础矩阵和匹配好的三个点,且这三个点的单应和对极几何是相容的,要求的是:这三个点之间的单应。
这里有两种方法:
第一种:在射影重构下恢复三个点的空间点,然后求出由这三个空间点构成的空间平面,然后通过上述的结论一求得单应。
第二种:通过四个点可以直接求得单应,这四个点分别是已知的三个匹配点和对极点(对极点可以通过求另外一个相机的空间点坐标在视图上的投影获得)
在书中将第一种方法称为显式,第二种方法称为隐式,并且显式方法比隐式方法好,因为在隐式方法中,如果四个点中三个共线的话就会发生求解失败的情况。
(3)单应矩阵 —> 基础矩阵
如下图所示:给定点
x
′
\mathbf{x'}
x′,通过点
x
′
\mathbf{x'}
x′和对极点
e
′
\mathbf{e'}
e′的对极线
l
′
\mathbf{l'}
l′可以记为
l
′
=
e
′
×
x
′
=
[
e
′
]
×
x
′
\mathbf{l}^{\prime}=\mathbf{e}^{\prime} \times \mathbf{x}^{\prime}=\left[\mathbf{e}^{\prime}\right]_{ \times} \mathbf{x}^{\prime}
l′=e′×x′=[e′]×x′,因为
x
′
\mathbf{x'}
x′可以记为
x
′
=
H
π
x
\mathbf{x}^{\prime}=\mathrm{H}_{\pi} \mathbf{x}
x′=Hπx,因此我么可以获得
l
′
=
[
e
′
]
×
H
π
x
=
F
x
\mathrm{l}^{\prime}=\left[\mathbf{e}^{\prime}\right]_{ \times} \mathrm{H}_{\pi} \mathbf{x}=\mathrm{Fx}
l′=[e′]×Hπx=Fx就得到了我们想要的
F
=
[
e
′
]
×
H
π
\mathrm{F}=\left[\mathrm{e}^{\prime}\right]_{ \times} \mathrm{H}_{\pi}
F=[e′]×Hπ
然后书中提供了一种六个点解基础矩阵的方法,如下:
要求给定的六组点中有四组是位于同一平面上的,另外两组点是不位于同一平面上,其方法其实很简单,就是先利用共面的四组点求得单应
x
i
′
=
H
x
i
,
i
∈
{
1
,
…
,
4
}
\mathbf{x}_{i}^{\prime}=\mathrm{Hx}_{i}, i \in\{1, \ldots, 4\}
xi′=Hxi,i∈{1,…,4},然后利用
(
H
x
5
)
×
x
5
′
\left(\mathrm{Hx}_{5}\right) \times \mathrm{x}_{5}^{\prime}
(Hx5)×x5′和
(
H
x
6
)
×
x
6
′
\left(\mathrm{Hx}_{6}\right) \times \mathrm{x}_{6}^{\prime}
(Hx6)×x6′两条直线的角点求得对极点
e
′
e'
e′,然后利用上面的结论
F
=
[
e
′
]
×
H
π
\mathrm{F}=\left[\mathrm{e}^{\prime}\right]_{ \times} \mathrm{H}_{\pi}
F=[e′]×Hπ求得基础矩阵。
这里有一个很有意思的发现,在没有约束的求解中,根据自由度计算,求解单应矩阵最少需要四组点,求得基础矩阵最少需要七组点,但是在单应矩阵和基础矩阵兼容的前提下,他们计算的最少点组数变成了三和六,需要的点更少了
这一节感觉知识点比较散乱,先总结到这儿了,欢迎交流
此外,对SLAM算法感兴趣的同学可以看考我的博客SLAM算法总结——经典SLAM算法框架总结