一、课程导论与数学基础
1.1 多视图几何概述
多视图几何,说白了就是研究「如何用多张照片还原三维世界」。你想想看,我们人眼用两只眼睛就能感知深度,那计算机能不能用两台相机做到同样的事?答案是肯定的,而且还能做得更好。
我刚开始接触这个领域时,觉得特别神奇——几张二维图片,居然能算出物体的三维坐标。后来才明白,这背后全是数学在撑腰。多视图几何的核心问题有三个:
- 对应点匹配:同一物体在不同视角下的像素点,怎么找到对应关系?
- 相机姿态估计:每张照片拍摄时,相机在什么位置、朝哪个方向?
- 三维重建:有了对应点和相机参数,如何算出物体的三维坐标?
这三个问题环环相扣,任何一个环节出错,重建结果都会崩。我在项目里踩过不少坑,后面会慢慢跟你聊。
1.2 稀疏重建技术简介
稀疏重建,不是把整个场景都重建出来,而是只重建一些「关键点」。比如建筑物的角点、纹理丰富的区域。这些点虽然稀疏,但足够描述场景的结构。
为什么不做稠密重建?因为计算量太大了。我早期做过一个项目,要对一个古建筑做三维建模,如果用稠密重建,一台服务器跑三天都跑不完。换成稀疏重建,两小时搞定,而且精度完全够用。
稀疏重建的典型流程是这样的:
- 特征提取:从每张图片中提取关键点(比如SIFT、ORB特征)
- 特征匹配:找到不同图片之间的对应点
- 初始估计:用两张图片估算相机姿态和三维点
- 增量式重建:逐步加入更多图片,优化结果
- 全局优化:用光束法平差(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
你可能会问:为什么旋转要用矩阵?因为矩阵乘法可以组合多个变换。比如先旋转再平移,只需要把旋转矩阵和平移向量组合成一个变换矩阵就行。这个思想在后面会反复用到。
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
你看,一个矩阵就搞定了旋转和平移。这就是齐次坐标的魅力所在。
知识体系总览
下面这张图,是我自己梳理的本章知识结构。你可以把它当作一个「导航图」,学完一章后回来看看,确认自己有没有遗漏。
这张图把本章内容分成了三个模块:课程概述、数学基础、学习路径。每个模块下面又有具体的知识点。你可以把它当作一个检查清单,学完一章后看看自己是否掌握了所有内容。