一、课程导论与数学基础

1.1 多视图几何概述

多视图几何,说白了就是研究「如何用多张照片还原三维世界」。你想想看,我们人眼用两只眼睛就能感知深度,那计算机能不能用两台相机做到同样的事?答案是肯定的,而且还能做得更好。

我刚开始接触这个领域时,觉得特别神奇——几张二维图片,居然能算出物体的三维坐标。后来才明白,这背后全是数学在撑腰。多视图几何的核心问题有三个:

  • 对应点匹配:同一物体在不同视角下的像素点,怎么找到对应关系?
  • 相机姿态估计:每张照片拍摄时,相机在什么位置、朝哪个方向?
  • 三维重建:有了对应点和相机参数,如何算出物体的三维坐标?

这三个问题环环相扣,任何一个环节出错,重建结果都会崩。我在项目里踩过不少坑,后面会慢慢跟你聊。

1.2 稀疏重建技术简介

稀疏重建,不是把整个场景都重建出来,而是只重建一些「关键点」。比如建筑物的角点、纹理丰富的区域。这些点虽然稀疏,但足够描述场景的结构。

为什么不做稠密重建?因为计算量太大了。我早期做过一个项目,要对一个古建筑做三维建模,如果用稠密重建,一台服务器跑三天都跑不完。换成稀疏重建,两小时搞定,而且精度完全够用。

稀疏重建的典型流程是这样的:

  1. 特征提取:从每张图片中提取关键点(比如SIFT、ORB特征)
  2. 特征匹配:找到不同图片之间的对应点
  3. 初始估计:用两张图片估算相机姿态和三维点
  4. 增量式重建:逐步加入更多图片,优化结果
  5. 全局优化:用光束法平差(Bundle Adjustment)做最终调整

嗯,这个流程看起来简单,但每一步都有坑。比如特征匹配这一步,如果图片纹理太少,匹配结果就会很差。我曾经在一个室内场景项目里,因为墙面太光滑,匹配点几乎全错了,最后不得不重新打光拍摄。

1.3 课程目标与学习路径

这门课的目标很明确:让你从零开始,掌握多视图几何的核心理论,并且能动手实现一个稀疏重建系统。

我个人建议的学习路径是这样的:

  • 前5章:打好数学基础,包括线性代数、射影几何、相机模型
  • 第6-15章:学习核心算法,比如对极几何、三角化、PnP问题
  • 第16-25章:深入稀疏重建的各个环节,包括特征匹配、增量式重建、全局优化
  • 第26-30章:实战项目,用真实数据跑通整个流程

你不需要一次性掌握所有数学细节。我的经验是:先理解几何意义,再补数学推导。很多公式你一开始看不懂没关系,等用到的时候自然就明白了。

我的建议:每章学完后,自己动手画一遍流程图。画图的过程,就是梳理思路的过程。我至今还保留着当年手画的几十张草图。

1.4 向量与矩阵基础

向量和矩阵,是整个多视图几何的「砖瓦」。没有它们,后面的一切都无从谈起。

向量:可以理解为一个有方向和大小的箭头。在三维空间中,一个点可以用三维向量表示:p = (x, y, z)。

矩阵:可以理解为一种线性变换。比如旋转、缩放、剪切,都可以用矩阵表示。

这里有一个我经常用的例子:

// 三维空间中的点
p = [x, y, z]^T

// 旋转矩阵(绕Z轴旋转θ角度)
R = [
  [cosθ, -sinθ, 0],
  [sinθ,  cosθ, 0],
  [0,      0,    1]
]

// 旋转后的点
p' = R * p

你可能会问:为什么旋转要用矩阵?因为矩阵乘法可以组合多个变换。比如先旋转再平移,只需要把旋转矩阵和平移向量组合成一个变换矩阵就行。这个思想在后面会反复用到。

重点:矩阵乘法不满足交换律。也就是说,A*B 不一定等于 B*A。这个性质在相机姿态估计中特别重要——先旋转再平移,和先平移再旋转,结果完全不同。

1.5 线性变换与仿射变换

线性变换和仿射变换,是两种最基本的几何变换。

线性变换:保持直线和原点不变。包括旋转、缩放、剪切、反射。数学上,线性变换可以表示为:y = A * x,其中A是一个矩阵。

仿射变换:在线性变换的基础上加了平移。数学上:y = A * x + b。仿射变换保持直线和平行线不变,但原点可以移动。

我举个例子你就明白了:

  • 线性变换:把一张图片旋转30度,原点(0,0)还是(0,0)
  • 仿射变换:把一张图片旋转30度,再向右移动100像素,原点变了

在实际的3D重建中,我们用的更多的是仿射变换。因为相机不仅有旋转,还有平移。嗯,这里要注意:仿射变换虽然简单,但已经能描述大部分刚体运动了。

变换类型 数学表示 自由度 保持性质
线性变换 y = Ax 4(2D)/ 9(3D) 直线、原点
仿射变换 y = Ax + b 6(2D)/ 12(3D) 直线、平行线
射影变换 y = (Ax + b) / (cx + d) 8(2D)/ 15(3D) 直线
避坑指南:我曾经在项目里直接用线性变换去处理相机运动,结果发现重建出来的模型完全不对。后来才意识到,相机运动是刚体运动,必须用仿射变换(或者更精确的欧式变换)来描述。线性变换不能处理平移,这是新手最容易犯的错误。

1.6 齐次坐标与射影几何入门

齐次坐标,是射影几何的「秘密武器」。它解决了一个核心问题:如何用数学统一表示有限点和无穷远点。

在普通坐标系中,一个二维点用 (x, y) 表示。但在齐次坐标中,我们用 (x, y, w) 表示,其中 w 是一个缩放因子。当 w=1 时,齐次坐标退化为普通坐标;当 w=0 时,表示无穷远点。

为什么需要无穷远点?你想想看,两条平行线在射影几何中会相交于无穷远点。这个性质在相机成像中特别有用——比如铁轨在照片中看起来会在远处相交,那个交点就是无穷远点。

齐次坐标还有一个好处:它让变换变得统一。在普通坐标中,平移和旋转需要用不同的方式处理;但在齐次坐标中,所有变换都可以用一个矩阵乘法搞定:

// 2D仿射变换的齐次形式
// 普通坐标:p' = R * p + t
// 齐次坐标:p' = T * p

// 其中T是3x3矩阵
T = [
  [R11, R12, tx],
  [R21, R22, ty],
  [0,   0,   1 ]
]

// 点p的齐次坐标
p = [x, y, 1]^T

// 变换后的点
p' = T * p

你看,一个矩阵就搞定了旋转和平移。这就是齐次坐标的魅力所在。

核心思想:齐次坐标把「加法」变成了「乘法」。这个转变看似简单,但让整个数学体系变得优雅而统一。后面讲相机模型时,你会看到齐次坐标的威力。

知识体系总览

下面这张图,是我自己梳理的本章知识结构。你可以把它当作一个「导航图」,学完一章后回来看看,确认自己有没有遗漏。

第一章:课程导论与数学基础 课程概述 数学基础 学习路径 多视图几何概述 稀疏重建技术简介 向量与矩阵基础 线性变换与仿射变换 齐次坐标与射影几何 课程目标 学习路径规划 核心问题 对应点匹配 相机姿态估计 三维重建 数学工具 矩阵运算 齐次坐标 射影变换 实践建议 先理解几何意义 再补数学推导 动手画流程图 数学是工具,几何是灵魂,实践是检验标准

这张图把本章内容分成了三个模块:课程概述、数学基础、学习路径。每个模块下面又有具体的知识点。你可以把它当作一个检查清单,学完一章后看看自己是否掌握了所有内容。

个人经验:我建议你把这张图打印出来贴在墙上。每学完一个知识点,就在对应的框里打个勾。这样做的好处是,你不会在某个细节上钻牛角尖,而是始终清楚自己处在整个知识体系的哪个位置。

专注资料整理