跳到主要内容

10.1 三维重建方法概览

来源:Richard Hartley 与 Andrew Zisserman 的 Multiple View Geometry in Computer Vision,第 10 章 3D Rec"+onstruction of Cameras and Structure,10.1 小节 Outline of reconstruction method。

这一节给出从两张图像进行三维重建的概念流程:先由匹配点估计基础矩阵,再由基础矩阵恢复相机矩阵,最后对每一组匹配点三角化得到三维点。

注意

书中特别提醒:本节只是概念性流程,不应直接照着实现真实图像的重建系统。真实图像有噪声,需要第 11 章和第 12 章中的更稳定方法。

重建任务是什么

给定两张图像中的匹配点:

xixi\mathbf{x}_i \leftrightarrow \mathbf{x}'_i

假设这些匹配点来自未知的三维点:

Xi\mathbf{X}_i

同时,两台相机的参数也未知:

P,PP,\quad P'

三维重建的任务是求出:

  • 两个相机矩阵 PPPP'
  • 一组三维点 Xi\mathbf{X}_i

使得每个三维点都能投影回对应的两个图像点:

xi=PXi\mathbf{x}_i = P\mathbf{X}_i xi=PXi\mathbf{x}'_i = P'\mathbf{X}_i

为什么需要足够多的匹配点

如果匹配点太少,重建是不可能的。

原因是:

  • 基础矩阵 FF 需要足够多的对应点才能确定。
  • 没有 FF,就无法确定两视图之间的对极几何。
  • 没有对极几何,就无法稳定恢复相机关系和三维结构。

书中的关键结论是:如果有足够多的点对应,使得基础矩阵 FF 能被唯一计算,那么场景可以被重建到一个 projective ambiguity

也就是说,可以得到一个射影意义下正确的三维重建。

信息

“up to a projective ambiguity” 可以理解为:重建出来的点和相机与真实世界之间还差一个未知的三维射影变换。

方法总览

从两视图重建相机和结构,概念上分三步:

匹配点  ->  基础矩阵 F  ->  相机矩阵 P, P'  ->  三维点 X_i

更具体地说:

  1. 从点对应计算基础矩阵 FF
  2. 从基础矩阵 FF 计算一对相机矩阵 PPPP'
  3. 对每组匹配点 xixi\mathbf{x}_i \leftrightarrow \mathbf{x}'_i,计算能投影到这两个点的三维点 Xi\mathbf{X}_i

如果相机已标定,则通常不直接计算 FF,而是计算 essential matrix EE

第一步:计算基础矩阵 F

由第 9 章可知,对应点满足:

xiTFxi=0\mathbf{x}'_i{}^T F\mathbf{x}_i = 0

xi\mathbf{x}_ixi\mathbf{x}'_i 已知时,这个式子对 FF 的元素是线性的。

基础矩阵是:

F=[f11f12f13f21f22f23f31f32f33]F = \begin{bmatrix} f_{11} & f_{12} & f_{13} \\ f_{21} & f_{22} & f_{23} \\ f_{31} & f_{32} & f_{33} \end{bmatrix}

每一对匹配点提供一个线性方程。

理论上:

  • 7 对点可以用非线性方法求解。
  • 8 对点可以线性求解 FF,差一个整体尺度。
  • 多于 8 对点时,通常用最小二乘求解。
提示

实际工程中通常会用 RANSAC 先剔除错误匹配,再用归一化 8 点算法估计 FF

第二步:由 F 计算相机矩阵

一旦有了基础矩阵 FF,就可以构造与它一致的一对相机矩阵:

P,PP,\quad P'

这里的“相机矩阵”不是唯一的,因为未标定两视图重建只能恢复到射影歧义。

也就是说,存在某个三维射影变换 HH,使得:

PX=(PH1)(HX)P\mathbf{X} = (PH^{-1})(H\mathbf{X})

图像投影不变,但三维坐标系已经被射影变换改变了。

这就是后面 10.2 会详细讨论的 reconstruction ambiguity。

第三步:三角化

给定相机矩阵 P,PP,P' 和一对匹配点:

xx\mathbf{x} \leftrightarrow \mathbf{x}'

可以分别从两张图像反投影出两条空间射线。

如果对极约束满足:

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

那么这两条射线位于同一个对极平面内,并且理论上相交于一个三维点:

X\mathbf{X}

这个过程叫做 triangulation,中文常译为“三角化”。

概念流程:

图像点 x   ->  第一台相机反投影射线
图像点 x' -> 第二台相机反投影射线
两条射线交点 -> 三维点 X

在理想无噪声情况下,两条射线准确相交。

在真实图像中,因为匹配误差、标定误差和数值误差,两条射线通常不会精确相交,所以实际三角化需要求一个最优点。

baseline 上的点无法唯一确定

有一个特殊退化情况:如果三维点位于两个相机中心的 baseline 上,那么它在两张图像中都会投影到 epipole。

此时两条反投影射线都等于 baseline 本身:

ray1=ray2=CC\text{ray}_1 = \text{ray}_2 = \overline{\mathbf{C}\mathbf{C}'}

它们不是在唯一点处相交,而是整条线都重合。

因此,这个三维点无法被唯一确定。

注意

baseline 上的点会投影到两个图像中的 epipole,因此仅凭两视图无法确定它在 baseline 上的具体位置。

和第 9 章的关系

第 9 章提供两视图几何的核心约束:

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

第 10 章开始把这个约束用于重建:

  1. 用匹配点估计 FF
  2. FF 构造相机矩阵。
  3. 用相机矩阵和匹配点三角化三维点。

所以 10.1 可以看作从“几何约束”走向“重建算法”的入口。

已标定与未标定的区别

如果相机未标定:

匹配点FP,PXi\text{匹配点} \rightarrow F \rightarrow P,P' \rightarrow \mathbf{X}_i

得到的是射影重建。

如果相机已标定:

匹配点ER,tXi\text{匹配点} \rightarrow E \rightarrow R,\mathbf{t} \rightarrow \mathbf{X}_i

通常会使用 essential matrix EE,并且可以恢复更接近欧氏意义的相机运动和三维结构。

本节记忆点

  • 两视图三维重建的输入是匹配点 xixi\mathbf{x}_i \leftrightarrow \mathbf{x}'_i
  • 输出是相机矩阵 P,PP,P' 和三维点 Xi\mathbf{X}_i
  • 概念流程是:
{xixi}F(P,P){Xi}\{\mathbf{x}_i \leftrightarrow \mathbf{x}'_i\} \rightarrow F \rightarrow (P,P') \rightarrow \{\mathbf{X}_i\}
  • 每对匹配点给 FF 一个线性约束。
  • 至少 8 对点可以线性估计 FF
  • 三角化是用两条反投影射线求三维点。
  • baseline 上的点无法由两视图唯一确定。
  • 未标定重建只能得到射影意义下的结构。

后续问题

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

  • FF 构造 P,PP,P' 的具体公式是什么?
  • 为什么未标定重建只能恢复到射影变换?
  • 真实图像中两条射线不相交时,如何三角化?
  • 如何把射影重建升级到仿射重建、度量重建?
  • 为什么 essential matrix 可以用于已标定相机?