跳到主要内容

9.2 基础矩阵 F

来源:Richard Hartley 与 Andrew Zisserman 的 Multiple View Geometry in Computer Vision,第 9 章 Epipolar Geometry and the Fundamental Matrix,9.2 小节 The fundamental matrix F。

这篇笔记承接 9.1 对极几何。9.1 讲几何直观,9.2 把这种几何关系写成代数形式,也就是基础矩阵 FF

本节核心

基础矩阵 FF 是对极几何的代数表示。

它把第一张图像中的点 x\mathbf{x} 映射到第二张图像中的对应对极线 l\mathbf{l}'

l=Fx\mathbf{l}' = F\mathbf{x}

反过来,第二张图像中的点 x\mathbf{x}' 映射到第一张图像中的对极线 l\mathbf{l}

l=FTx\mathbf{l} = F^T\mathbf{x}'

如果 x\mathbf{x}x\mathbf{x}' 是同一个三维点的两幅图像,那么它们满足:

xTFx=0\mathbf{x}'^T F\mathbf{x}=0

这就是最常见的 epipolar constraint。

从点到线的映射

9.1 中已经知道:第一张图中的一个点 x\mathbf{x},在第二张图中对应一条对极线 l\mathbf{l}'

因此存在一个映射:

xl\mathbf{x} \mapsto \mathbf{l}'

这个映射不是点到点,而是点到线。基础矩阵 FF 正是这个点到线映射的矩阵表示:

l=Fx\mathbf{l}' = F\mathbf{x}
提示

理解 FF 时不要先把它想成“匹配两个点”的矩阵。更准确地说,FF 把一个点变成另一张图中的一条约束线。

9.2.1 几何推导

基础矩阵的几何推导可以分成两步。

第一步:通过一个平面做点转移

取一个空间平面 π\pi,它不经过两个相机中心。

第一张图中的点 x\mathbf{x} 反投影成一条空间射线。这条射线与平面 π\pi 相交于一个三维点 X\mathbf{X},再投影到第二张图像,得到一个点 x\mathbf{x}'

这个过程叫做通过平面 π\pi 的点转移,可以用一个平面单应矩阵表示:

x=Hπx\mathbf{x}' = H_{\pi}\mathbf{x}

其中 HπH_{\pi} 是由平面 π\pi 诱导的 homography。

第二步:用 epipole 构造对极线

第二张图中的对极线 l\mathbf{l}' 经过两个点:

  • 转移得到的点 x\mathbf{x}'
  • 第二张图中的 epipole e\mathbf{e}'

两点确定一条线,在齐次坐标中可用叉乘表示:

l=e×x\mathbf{l}' = \mathbf{e}' \times \mathbf{x}'

叉乘可以写成反对称矩阵形式:

e×x=[e]×x\mathbf{e}' \times \mathbf{x}' = [\mathbf{e}']_{\times}\mathbf{x}'

代入 x=Hπx\mathbf{x}' = H_{\pi}\mathbf{x}

l=[e]×Hπx\mathbf{l}' = [\mathbf{e}']_{\times}H_{\pi}\mathbf{x}

因此定义:

F=[e]×HπF = [\mathbf{e}']_{\times}H_{\pi}

于是:

l=Fx\mathbf{l}' = F\mathbf{x}

这就是基础矩阵的几何来源。

信息

这里引入平面 π\pi 只是为了构造一个点到点的中间映射。FF 的存在不依赖场景里真的有这样一个平面。

为什么 F 的秩是 2

因为:

F=[e]×HπF = [\mathbf{e}']_{\times}H_{\pi}

其中 HπH_{\pi} 是满秩 3×33 \times 3 homography,而 [e]×[\mathbf{e}']_{\times} 是由叉乘构成的反对称矩阵,秩为 2。

所以:

rank(F)=2\operatorname{rank}(F)=2

也就是说:

det(F)=0\det(F)=0

9.2.2 代数推导

现在从两个相机矩阵 PPPP' 出发推导 FF

图像点 x\mathbf{x} 在第一台相机下反投影为一条空间射线:

X(λ)=P+x+λC\mathbf{X}(\lambda) = P^+\mathbf{x}+\lambda\mathbf{C}

其中:

  • P+P^+PP 的伪逆。
  • C\mathbf{C} 是第一台相机中心,满足 PC=0P\mathbf{C}=0

这条射线上有两个方便的点:

P+xP^+\mathbf{x}

和相机中心:

C\mathbf{C}

把它们投影到第二张图像:

PP+xP'P^+\mathbf{x} PCP'\mathbf{C}

其中:

e=PC\mathbf{e}' = P'\mathbf{C}

是第一台相机中心在第二张图像中的投影,也就是第二张图像的 epipole。

第二张图中的对极线是这两个投影点的连线:

l=(PC)×(PP+x)\mathbf{l}' = (P'\mathbf{C}) \times (P'P^+\mathbf{x})

写成矩阵形式:

l=[e]×PP+x\mathbf{l}' = [\mathbf{e}']_{\times}P'P^+\mathbf{x}

因此:

F=[e]×PP+F = [\mathbf{e}']_{\times}P'P^+

这是从相机矩阵直接计算 FF 的一般公式。

注意

如果两台相机中心重合,PCP'\mathbf{C} 会退化为零向量,这个推导会失效。对极几何要求两个视图有非重合相机中心。

标定双目情形

若第一台相机作为世界原点:

P=K[I0]P = K[I \mid 0]

第二台相机为:

P=K[Rt]P' = K'[R \mid \mathbf{t}]

则基础矩阵可写为:

F=KT[t]×RK1F = K'^{-T}[\mathbf{t}]_{\times}RK^{-1}

也可以写成:

F=[Kt]×KRK1F = [\mathbf{K}'\mathbf{t}]_{\times}K'RK^{-1}

其中两个 epipole 为:

e=Kt\mathbf{e}' = K'\mathbf{t} e=KRTt\mathbf{e} = KR^T\mathbf{t}

这个公式很重要,因为它把 FF 和相机内参、相对旋转、相对平移联系起来。

9.2.3 对应点条件

如果 x\mathbf{x}x\mathbf{x}' 是对应点,那么 x\mathbf{x}' 必须位于 x\mathbf{x} 的对极线 l\mathbf{l}' 上。

而:

l=Fx\mathbf{l}' = F\mathbf{x}

点在线上的齐次表达是:

xTl=0\mathbf{x}'^T \mathbf{l}' = 0

代入得到:

xTFx=0\mathbf{x}'^T F\mathbf{x}=0

这就是对应点约束。

提示

这条式子只提供必要条件:满足 xTFx=0\mathbf{x}'^T F\mathbf{x}=0 的点位于对极线上,但不一定就是正确匹配点。

为什么可以从匹配点估计 F

因为 FF 满足:

xTFx=0\mathbf{x}'^T F\mathbf{x}=0

这个式子只涉及图像点坐标和 FF,不需要直接知道相机矩阵 P,PP,P'

所以只要有足够多的匹配点,就可以反过来估计 FF

书中后续会说明:一般情况下,至少需要 7 对点才能估计 FF;实际中更常见的是使用归一化 8 点算法和 RANSAC。

9.2.4 F 的性质

基础矩阵 FF 的重要性质如下。

1. 转置性质

如果 FF 是相机顺序 (P,P)(P,P') 的基础矩阵,那么 FTF^T 对应相反顺序 (P,P)(P',P)

2. 对极线

第一张图中的点对应第二张图中的线:

l=Fx\mathbf{l}' = F\mathbf{x}

第二张图中的点对应第一张图中的线:

l=FTx\mathbf{l} = F^T\mathbf{x}'

3. 对极点是零空间

第二张图中的 epipole e\mathbf{e}'FF 的左零向量:

FTe=0F^T\mathbf{e}' = \mathbf{0}

第一张图中的 epipole e\mathbf{e}FF 的右零向量:

Fe=0F\mathbf{e} = \mathbf{0}

4. 自由度

FF3×33 \times 3 齐次矩阵。

普通 3×33 \times 3 齐次矩阵有:

91=89 - 1 = 8

个自由度,因为整体尺度不重要。

FF 还满足秩为 2 的约束:

det(F)=0\det(F)=0

所以最终自由度为:

81=78 - 1 = 7

5. F 是 correlation

FF 是一个从点到线的射影映射:

xl\mathbf{x} \mapsto \mathbf{l}'

但是它不是可逆的,因为所有落在同一条对极线上的点会映射到同一条对应对极线。也就是说,FF 是奇异的、秩为 2。

从不同相机形式计算 F

一般相机

给定:

P,PP,\quad P'

令:

PC=0P\mathbf{C}=0 e=PC\mathbf{e}'=P'\mathbf{C}

则:

F=[e]×PP+F=[\mathbf{e}']_{\times}P'P^+

规范相机

若:

P=[I0]P=[I \mid 0] P=[Mm]P'=[M \mid \mathbf{m}]

则:

e=m\mathbf{e}'=\mathbf{m} e=M1m\mathbf{e}=M^{-1}\mathbf{m}

并且:

F=[e]×MF=[\mathbf{e}']_{\times}M

也可写作:

F=MT[e]×F=M^{-T}[\mathbf{e}]_{\times}

标定相机且相机中心有限

若:

P=K[I0]P=K[I\mid 0] P=K[Rt]P'=K'[R\mid \mathbf{t}]

则:

F=KT[t]×RK1F=K'^{-T}[\mathbf{t}]_{\times}RK^{-1}

9.2.5 对极线束的 homography

每张图像中的所有对极线都经过 epipole,形成一个线束。

第一张图中的对极线束:

{lel}\{\mathbf{l} \mid \mathbf{e}\in\mathbf{l}\}

第二张图中的对极线束:

{lel}\{\mathbf{l}' \mid \mathbf{e}'\in\mathbf{l}'\}

这两个一维射影空间之间存在一个 homography,也就是对极线束之间的对应关系。

如果 l\mathbf{l}l\mathbf{l}' 是对应对极线,且 k\mathbf{k} 是任意不过 epipole e\mathbf{e} 的线,则:

l=F[k]×l\mathbf{l}' = F[\mathbf{k}]_{\times}\mathbf{l}

对称地:

l=FT[k]×l\mathbf{l} = F^T[\mathbf{k}']_{\times}\mathbf{l}'

一个方便选择是取:

k=e\mathbf{k}=\mathbf{e}

因为把 e\mathbf{e} 看作线的系数时,它不经过点 e\mathbf{e} 本身,满足条件。

本节记忆点

  • FF 把一个点映射成另一张图像中的对极线。
  • 最核心公式是:
xTFx=0\mathbf{x}'^T F\mathbf{x}=0
  • FF3×33 \times 3、秩为 2 的齐次矩阵。
  • FF 有 7 个自由度。
  • epipole 是 FF 的零空间:
Fe=0,FTe=0F\mathbf{e}=0, \qquad F^T\mathbf{e}'=0
  • 给定相机矩阵,可以用:
F=[e]×PP+F=[\mathbf{e}']_{\times}P'P^+
  • 给定匹配点,也可以从 xTFx=0\mathbf{x}'^TF\mathbf{x}=0 反过来估计 FF

后续问题

读完 9.2 后,可以继续追问:

  • 为什么 7 对点理论上可以求 FF
  • 8 点算法为什么要做归一化?
  • 如何用 SVD 强制 FF 的秩为 2?
  • essential matrix EE 和 fundamental matrix FF 有什么关系?
  • 如何从 FF 恢复两个相机矩阵?