三维重建基础:相机成像模型与坐标系转换
三维重建的本质,是从二维图像中恢复物体的三维几何信息。而这一切的起点,是理解相机如何将三维世界投影到二维像素平面。针孔模型是这一过程的理想化抽象,畸变则是对真实镜头偏离理想模型的修正;坐标系转换则是连接世界、相机、图像与像素四个层次之间的桥梁。深度获取原理则决定了我们如何从多视角或主动光中恢复出距离信息。本章将系统拆解这些基础概念,为后续的结构光编码与解码算法奠定数学与物理基础。
上图展示了从三维世界到二维像素的完整映射链路。世界坐标系中的点经过刚体变换(旋转R和平移t)进入相机坐标系,再通过透视投影落到图像物理坐标系,最后经过仿射变换(像素缩放与平移)得到像素坐标。畸变模型在投影前后对坐标进行修正,而深度获取则是在这条链路的逆向或辅助过程中,恢复出被投影丢失的Zc信息。
2.1 针孔模型:理想化的线性投影
针孔模型是相机成像的最基本数学模型。它假设光线通过一个无限小的孔(光心)投射到成像平面上,形成倒立的实像。在实际应用中,我们通常将成像平面虚拟到光心前方,从而得到正立的虚像,便于数学表达。该模型的核心是相似三角形原理,将三维点映射到二维平面。
核心原理:设相机坐标系中一点 P(Xc, Yc, Zc),其在图像物理坐标系中的投影点 p(x, y) 满足:
x = f · Xc / Zc
y = f · Yc / Zc
其中 f 为焦距(单位:mm)。该公式表明,深度 Zc 与投影坐标成反比——物体越远,成像越小。这是所有单目视觉无法直接获取深度的根本原因:投影过程将三维信息压缩为二维,深度信息被丢失。
针孔模型的矩阵形式为:
Zc · [x, y, 1]ᵀ = [f 0 0; 0 f 0; 0 0 1] · [Xc, Yc, Zc]ᵀ
这里的 3×3 矩阵是内参矩阵的雏形,但实际相机还需要考虑像素尺寸、主点偏移等因素,因此完整内参矩阵 K 为:
K = [fx 0 cx;
0 fy cy;
0 0 1]
其中 fx = f/dx,fy = f/dy(dx、dy 为单个像素的物理尺寸),(cx, cy) 为主点(光轴与成像平面的交点)在像素坐标系中的坐标。fx、fy 的单位是像素,它们将物理尺寸(mm)转换为像素单位。
| 参数 | 含义 | 典型值范围 | 标定方法 |
|---|---|---|---|
| fx | x方向等效焦距(像素) | 500-3000 | 棋盘格标定 |
| fy | y方向等效焦距(像素) | 500-3000 | 棋盘格标定 |
| cx | 主点x坐标(像素) | ≈图像宽度/2 | 标定板中心投影 |
| cy | 主点y坐标(像素) | ≈图像高度/2 | 标定板中心投影 |
| k1, k2, k3 | 径向畸变系数 | -0.5 ~ 0.5 | 非线性优化 |
| p1, p2 | 切向畸变系数 | -0.05 ~ 0.05 | 非线性优化 |
2.2 镜头畸变:真实镜头的非线性修正
实际镜头并非完美针孔,而是存在各种像差。其中对三维重建影响最大的是径向畸变和切向畸变。径向畸变使直线成像为曲线,表现为“桶形”(k1<0)或“枕形”(k1>0);切向畸变则源于镜头与成像平面不平行,导致图像在边缘处发生拉伸或压缩。
畸变模型通常用多项式描述。设 (x_dist, y_dist) 为畸变后的坐标,(x, y) 为理想针孔投影坐标,r² = x² + y²,则:
x_dist = x · (1 + k1·r² + k2·r⁴ + k3·r⁶) + 2·p1·x·y + p2·(r² + 2x²)
y_dist = y · (1 + k1·r² + k2·r⁴ + k3·r⁶) + p1·(r² + 2y²) + 2·p2·x·y
在结构光系统中,畸变校正的精度直接影响相位-深度映射的准确性。若畸变未校正,投影的条纹图案会发生弯曲,导致解码出的相位出现系统性误差,最终表现为重建点云的曲面扭曲。
风险提示:畸变系数并非固定不变。温度变化、镜头松动、自动对焦(AF)都会改变畸变参数。在精密测量场景中,建议每次开机后执行快速标定(如使用内置标定板),或选用定焦镜头并固定光圈。
2.3 四大坐标系转换:从世界到像素的完整链路
三维重建中涉及四个坐标系:世界坐标系(描述物体在真实世界的位置)、相机坐标系(以光心为原点)、图像物理坐标系(以主点为原点,单位mm)、像素坐标系(以图像左上角为原点,单位pixel)。转换过程分为三步:
- 刚体变换(世界→相机): [Xc, Yc, Zc]ᵀ = R · [Xw, Yw, Zw]ᵀ + t。R 为 3×3 旋转矩阵,t 为 3×1 平移向量。这6个参数(3旋转+3平移)称为外参,描述了相机在世界中的位姿。
- 透视投影(相机→图像): x = f·Xc/Zc,y = f·Yc/Zc。这一步将三维点投影到归一化平面(Zc=1)上。
- 仿射变换(图像→像素): u = fx·x + cx,v = fy·y + cy。将物理坐标转换为像素坐标,同时补偿像素阵列的倾斜(通常忽略)。
合并后的完整投影方程为:
Zc · [u, v, 1]ᵀ = K · [R | t] · [Xw, Yw, Zw, 1]ᵀ
其中 [R|t] 是 3×4 外参矩阵,K 是 3×3 内参矩阵。这个 3×4 投影矩阵 P = K·[R|t] 称为相机投影矩阵,它包含了所有成像参数。
工程经验:在结构光系统中,投影仪也可以建模为一个“逆相机”。投影仪的内外参同样需要标定,其投影图案的像素坐标与相机像素坐标之间通过极线约束关联。双目结构光系统(相机+投影仪)的标定,本质上是求解两个投影矩阵 P1 和 P2 的过程。
2.4 深度获取原理概述:三种主流方法对比
深度获取是三维重建的核心任务。根据原理不同,主要分为三类:
| 方法 | 原理 | 精度 | 范围 | 适用场景 | 优缺点 |
|---|---|---|---|---|---|
| 双目立体视觉 | 三角测量(被动) | 0.1-1mm | 0.5-10m | 室外、纹理丰富 | 依赖纹理,计算量大 |
| 结构光 | 三角测量(主动) | 0.01-0.1mm | 0.1-5m | 室内、无纹理表面 | 精度高,受环境光影响 |
| ToF飞行时间 | 光速测距 | 1-10mm | 0.5-30m | 动态场景、远距离 | 帧率高,分辨率低 |
结构光方法的核心是三角测量原理:投影仪向物体投射编码图案(如正弦条纹),相机从另一角度拍摄。物体表面的高度变化会使条纹发生形变,通过解调条纹相位即可计算出深度。其数学基础是:
Z = (f · b) / (d + f · tan(θ))
其中 b 为相机与投影仪的光心距离(基线),d 为对应点的视差,θ 为投影角度。实际系统中,通常通过标定得到相位-深度映射表,而非直接使用几何公式。
案例拆解:结构光系统标定与深度恢复流程
背景:某工业检测项目需对金属零件表面进行三维测量,精度要求 ±0.05mm,测量范围 200×150×100mm。采用单目相机+DLP投影仪的结构光方案。
关键参数:相机分辨率 2448×2048,像素尺寸 3.45μm,焦距 12mm;投影仪分辨率 1280×800;基线距离 150mm。
操作步骤:
- 使用 12×9 棋盘格(格边长 5mm)拍摄 20 组不同位姿图像,标定相机内参和畸变系数。
- 将投影仪视为逆相机,投射棋盘格图案,标定投影仪内参和外参。
- 固定相机与投影仪相对位姿,标定系统外参(R, t)。
- 投射三步相移正弦条纹(每步120°),采集三幅图像。
- 解包裹相位,得到相位图。
- 利用相位-深度映射模型(基于标定参数)计算每个像素的深度值。
结果:对标准量块(高度 10.000mm)测量 10 次,平均高度 10.003mm,标准差 0.012mm,满足精度要求。
复盘经验:标定过程中,棋盘格图像需覆盖视场各个区域,避免集中在中心;投影仪标定时,投影图案的亮度需调整至不饱和且对比度足够;相位解包裹时,若物体表面有深孔或陡峭边缘,需采用多频外差法避免相位跳变。
2.5 常见误区与总结
在三维重建系统开发中,初学者常犯以下错误:
- 忽略畸变校正:直接使用未校正的图像进行相位计算,导致边缘区域深度误差可达毫米级。
- 坐标系混淆:将像素坐标直接当作图像物理坐标使用,忘记除以焦距和减去主点。
- 外参标定不准确:相机与投影仪的相对位姿误差会直接转化为深度误差,且随距离增大而放大。
- 忽视温度影响:投影仪灯泡发热会导致光学系统变形,使标定参数失效。
总结:相机成像模型是三维重建的数学基石。针孔模型提供了线性投影框架,畸变模型修正了真实镜头的非线性偏差,坐标系转换将不同参考系统一起来,而深度获取原理则决定了系统的精度上限。在实际开发中,建议先通过仿真数据验证标定算法的正确性,再迁移到真实硬件上。标定结果的验证不应只看重投影误差(重投影误差<0.1像素),还应通过重建标准量具来评估实际深度精度。