跳到主要内容

10.6 第 10 章小结

来源:Richard Hartley 与 Andrew Zisserman 的 Multiple View Geometry in Computer Vision,第 10 章 3D Reconstruction of Cameras and Structure,10.6 小节 Closure。

这一节总结第 10 章:如何从两张未标定图像出发,得到相机和场景的三维重建。

核心问题是:

给定两张未标定图像,如何得到一个与真实场景只差相似变换的 metric reconstruction?

第 10 章主线

第 10 章可以按下面的路线理解:

点对应
-> 基础矩阵 F
-> 射影相机 P, P'
-> 射影三维点 X_i
-> 额外约束
-> 度量重建

最重要的概念不是某一个具体算法,而是不同信息量对应不同重建层次:

已知信息可得到的关系三维对象重建层次
点对应FFprojective
点对应 + 消失点等仿射信息F,HF,H_\inftyπ\pi_\inftyaffine
点对应 + 相机内参或度量约束F,H,ω,ωF,H_\infty,\omega,\omega'π,Ω\pi_\infty,\Omega_\inftymetric

第一步:计算射影重建

从两张图像中的匹配点开始:

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

先计算基础矩阵:

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

然后由 FF 构造一对射影相机:

P,PP,\quad P'

最后对每一组匹配点三角化,得到射影空间中的三维点:

Xi\mathbf{X}_i

这一步得到:

(P,P,{Xi})(P,P',\{\mathbf{X}_i\})

它不是欧氏重建,而是 projective reconstruction。

为什么第一步只能到射影重建

仅靠点对应,能确定的是两视图之间的对极几何:

FF

但未知相机内参、未知尺度、未知无穷远平面、未知角度结构。

因此真实欧氏重建与当前射影重建之间可能相差一个未知 4×44 \times 4 单应矩阵:

HH

也就是:

PE=PH1P_E = PH^{-1} PE=PH1P'_E = P'H^{-1} XEi=HXi\mathbf{X}_{Ei} = H\mathbf{X}_i

这正是 10.3 射影重建定理 的结论。

第二步:把射影重建校正到度量重建

第 10 章给出两种大路线。

路线 A:直接法

如果有真实三维坐标已知的控制点:

XEi\mathbf{X}_{Ei}

并且能把它们和射影重建中的点对应起来:

XEi=HXi\mathbf{X}_{Ei} = H\mathbf{X}_i

就可以直接估计 HH

至少需要 5 个非退化控制点,因为 HH 有 15 个自由度,而每个三维点对应提供 3 个独立约束。

求出 HH 后:

PM=PH1P_M = PH^{-1} PM=PH1P'_M = P'H^{-1} XMi=HXi\mathbf{X}_{Mi} = H\mathbf{X}_i

这就是 10.5 使用真实控制点的直接重建

路线 B:分层法

如果没有真实三维控制点,可以走分层路线:

projective -> affine -> metric

第一层,从射影到仿射:

找到无穷远平面:

π\pi_\infty

然后用:

HA=[I3×30πT]H_A = \begin{bmatrix} I_{3\times3} & \mathbf{0}\\ \boldsymbol{\pi}_\infty^T \end{bmatrix}

把它放回标准位置,得到仿射重建。

第二层,从仿射到度量:

找到绝对二次曲线或它的图像:

Ωorω\Omega_\infty \quad \text{or} \quad \omega

如果仿射相机写成:

P=[Mm]P = \begin{bmatrix} M & \mathbf{m} \end{bmatrix}

则可用:

HM=[A100T1]H_M = \begin{bmatrix} A^{-1} & \mathbf{0}\\ \mathbf{0}^T & 1 \end{bmatrix}

其中:

AAT=(MTωM)1AA^T = (M^T\omega M)^{-1}

这就是 10.4 分层重建 的主线。

Algorithm 10.1 的整理

书中把两视图未标定图像到度量重建的过程总结为:

输入:两张未标定图像及其匹配点
目标:得到 metric reconstruction

步骤一,计算射影重建:

  1. 从匹配点计算基础矩阵 FF
  2. FF 恢复一对相机矩阵 P,PP,P'
  3. 对每组匹配点三角化得到 Xi\mathbf{X}_i

步骤二,把射影重建校正到度量重建,二选一:

  1. 直接法:使用 5 个或更多真实三维控制点估计 HH
  2. 分层法:先确定 π\pi_\infty 得到仿射重建,再确定 ω\omegaΩ\Omega_\infty 得到度量重建。

最终输出:

PM,PM,{XMi}P_M,\quad P'_M,\quad \{\mathbf{X}_{Mi}\}

它与真实相机和场景只差一个相似变换。

三个核心三维对象

第 10 章反复出现三个关键对象。

基础矩阵 F

FF 是两视图对极几何的图像层表达:

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

它足以支持射影重建。

无穷远平面 π∞

π\pi_\infty 是仿射结构的关键。

知道 π\pi_\infty 等价于知道哪些点是无穷远点,也就恢复了平行性。

图像层对应物是无穷远单应:

HH_\infty

可以理解为:

πH\pi_\infty \quad \Longleftrightarrow \quad H_\infty

绝对二次曲线 Ω∞

Ω\Omega_\infty 是度量结构的关键。

知道它就能恢复角度和长度比例。

图像层对应物是 IAC:

ω\omega

并且:

ω=KTK1\omega = K^{-T}K^{-1}

可以理解为:

Ωω,ω\Omega_\infty \quad \Longleftrightarrow \quad \omega,\omega'

几种重建层次对比

重建剩余歧义已恢复仍未恢复
projective射影变换点线面关联平行、角度、长度
affine仿射变换平行、中点、仿射比例角度、真实长度比例
metric相似变换角度、长度比例、形状绝对位置、朝向、尺度

度量重建并不等于绝对真实世界坐标完全确定。它仍然差一个:

similarity transformation\text{similarity transformation}

也就是整体旋转、平移和尺度。

准欧氏重建

书中最后提到一个实用观点:如果目标只是可视化,不追求严格度量精度,那么可以猜一个大致合理的相机内参,直接从射影重建得到一个看起来可接受的 quasi-Euclidean reconstruction。

这在工程中很常见:

  • 只是为了生成可视化模型。
  • 只需要大概形状。
  • 没有高精度测量需求。
  • 相机内参近似值已经足够。

但如果要做测量、定位、工程建模,就不能依赖这种近似,需要严谨的标定、控制点或几何约束。

本章总记忆点

  • 两视图重建的起点是匹配点和基础矩阵 FF
  • 没有额外信息时,只能得到 projective reconstruction。
  • 要得到 affine reconstruction,需要识别无穷远平面 π\pi_\infty 或无穷远单应 HH_\infty
  • 要得到 metric reconstruction,需要识别绝对二次曲线 Ω\Omega_\infty 或 IAC ω\omega
  • 有 5 个或更多非退化 ground control points 时,可以直接估计 HH,从射影重建跳到度量重建。
  • 第 10 章是总体框架,后续章节会讨论更稳定的数值算法和真实噪声下的实现细节。

后续学习方向

第 10 章主要是概念总览。继续往后读时,应重点关注:

  1. 如何在有噪声的图像中稳健估计 FF
  2. 如何稳定地从 FF 恢复相机矩阵?
  3. 三角化如何处理两条射线不精确相交的问题?
  4. 如何用 bundle adjustment 同时优化相机和三维点?
  5. 如何在多视图中做自标定和度量升级?