数学基础:坐标系与刚体变换、旋转矩阵、四元数、欧拉角、相机内参外参、针孔模型与畸变模型

三维重建的本质,是从二维图像像素反推三维空间几何结构的过程。这一过程涉及多个坐标系的频繁转换,以及描述刚体运动(旋转与平移)的数学工具。如果坐标系定义不统一、旋转表达方式选择不当或相机模型理解有偏差,后续的点云生成、深度估计和网格重建都会产生系统性误差。本章将系统梳理三维重建中最核心的数学基础,包括坐标系定义、刚体变换的三种表达方式(旋转矩阵、四元数、欧拉角)、相机内参与外参的物理意义,以及针孔模型与畸变模型的完整数学描述。

三维重建数学基础总览 坐标系定义 世界系 / 相机系 图像系 / 像素系 右手定则 Z轴朝向相机前方 刚体变换 (R|t) 旋转矩阵 R (3x3) 四元数 q (w,x,y,z) 欧拉角 (roll,pitch,yaw) 平移向量 t (3x1) 相机模型 针孔模型 (P=K[R|t]) 内参 K (fx,fy,cx,cy) 外参 (R,t) 畸变 (k1,k2,p1,p2) 重建输出 稀疏点云 稠密点云 网格模型 纹理映射 核心投影公式 Z_c · [u, v, 1]ᵀ = K · [R | t] · [X_w, Y_w, Z_w, 1]ᵀ K: 内参矩阵 | R,t: 外参 | (X_w,Y_w,Z_w): 世界坐标 | (u,v): 像素坐标 三维重建数学链路 世界坐标 (X_w,Y_w,Z_w) 相机坐标 (X_c,Y_c,Z_c) 归一化平面 (x', y') 畸变校正 (x_dist, y_dist) 像素坐标 (u, v) 外参 [R|t] 透视投影 畸变系数 内参 K 图像像素 图:三维重建数学基础与投影链路总览

坐标系定义与刚体变换

核心原理:四个坐标系的定义与转换关系

三维重建中涉及四个关键坐标系:世界坐标系(描述物体在真实空间中的位置,单位通常为米)、相机坐标系(以相机光心为原点,Z轴指向相机前方)、图像坐标系(以光轴与成像平面的交点为原点,单位毫米)和像素坐标系(以图像左上角为原点,单位像素)。从世界坐标到像素坐标的完整链路为:世界坐标 → 相机坐标(通过外参R,t)→ 归一化平面坐标(通过透视投影)→ 像素坐标(通过内参K)。刚体变换描述的是物体在三维空间中的运动,包含旋转和平移两部分,数学上表示为 [R|t] 的4×4齐次矩阵。

判断方法:选择旋转表达方式的决策依据

旋转矩阵、四元数和欧拉角各有适用场景。旋转矩阵(3×3正交矩阵)适合坐标变换计算,但存在9个参数冗余且需满足正交约束;欧拉角直观易理解,但存在万向锁问题且插值不平滑;四元数(w,x,y,z)紧凑无奇异性,适合插值和滤波。实际工程中,存储和传输常用四元数,计算和显示常用旋转矩阵,人机交互调试常用欧拉角。三者可相互转换,例如四元数转旋转矩阵的公式为:

R = [[1-2(y²+z²), 2(xy-wz), 2(xz+wy)],
     [2(xy+wz), 1-2(x²+z²), 2(yz-wx)],
     [2(xz-wy), 2(yz+wx), 1-2(x²+y²)]]

案例拆解:多视角相机标定中的坐标系对齐

假设使用两台相机进行双目重建,左相机外参为 R₁,t₁,右相机外参为 R₂,t₂。初始标定得到的两相机相对变换为 R_rel = R₂·R₁ᵀ,t_rel = t₂ - R_rel·t₁。但在实际场景中,由于标定板摆放位置不同,世界坐标系原点可能不一致。此时需要将两相机统一到同一世界坐标系下,具体操作:选取左相机坐标系作为基准,将右相机坐标通过 R_rel, t_rel 变换到左相机坐标系。若标定板角点重投影误差超过0.5像素,应检查标定板是否平整、图像是否模糊,并重新采集数据。

常见误区与总结复盘

风险提示:旋转矩阵必须满足正交性和行列式为1的约束,否则会导致坐标变换后物体尺度变形。使用欧拉角时,旋转顺序(如XYZ还是ZYX)必须明确,不同顺序产生不同结果。四元数使用前应归一化,否则插值结果会漂移。

刚体变换是三维重建的基石,建议在代码中统一使用齐次坐标表示,并封装旋转矩阵、四元数、欧拉角之间的转换函数,便于调试和验证。

相机内参与外参

核心原理:内参描述相机内部几何,外参描述相机位姿

相机内参矩阵K描述了相机坐标系到像素坐标系的映射关系,其形式为:

K = [[fx, 0, cx],
     [0, fy, cy],
     [0,  0,  1]]

其中 fx, fy 分别为x、y方向的焦距(单位像素),cx, cy 为主点坐标(光轴与成像平面的交点)。外参矩阵 [R|t] 描述世界坐标系到相机坐标系的刚体变换。内参是相机的固有属性,不随相机移动而改变;外参则随相机位姿变化而变化。

判断方法:内参标定的操作流程与验证

内参标定通常使用棋盘格或圆点标定板,通过拍摄不同角度的标定板图像,利用张正友标定法求解内参。操作流程为:① 采集15-20张不同姿态的标定板图像;② 提取角点坐标;③ 使用OpenCV的 calibrateCamera() 函数计算内参和畸变系数;④ 验证重投影误差,通常要求小于0.3像素。若误差过大,应剔除模糊图像或增加图像数量。

案例拆解:单目相机标定中的参数分析

某项目使用分辨率为1920×1080的工业相机,标定结果如下:fx=1425.3, fy=1423.8, cx=960.5, cy=540.2,畸变系数 k1=-0.32, k2=0.12, p1=0.001, p2=-0.002, k3=0.01。重投影误差为0.21像素。分析发现 fx 与 fy 相差约1.5像素,说明传感器像素并非完全正方形,这属于正常制造公差。主点 (cx,cy) 接近图像中心,说明镜头安装较正。若 cx 偏离中心超过20像素,应检查镜头是否松动或传感器是否偏移。

常见误区与总结复盘

经验提醒:内参标定后应固定相机焦距和光圈,否则变焦或调光圈会改变内参。外参在每次相机移动后都需要重新估计,但内参只需标定一次(除非镜头或传感器更换)。

内参和外参共同决定了三维点投影到二维图像的精确位置。在三维重建中,外参通常通过特征匹配和PnP求解,而内参则通过离线标定获得。两者精度直接影响重建结果的尺度正确性。

针孔模型与畸变模型

核心原理:理想投影与真实投影的差异

针孔模型假设光线沿直线传播,三维点 (X,Y,Z) 在相机坐标系下的投影为 (x', y') = (X/Z, Y/Z),再通过内参转换为像素坐标 (u,v) = (fx·x' + cx, fy·y' + cy)。但真实镜头存在畸变,主要包括径向畸变(由镜头曲率引起)和切向畸变(由镜头与传感器不平行引起)。径向畸变数学模型为:

x_dist = x'·(1 + k1·r² + k2·r⁴ + k3·r⁶)
y_dist = y'·(1 + k1·r² + k2·r⁴ + k3·r⁶)

其中 r² = x'² + y'²。切向畸变模型为:

x_dist = x' + 2·p1·x'·y' + p2·(r² + 2·x'²)
y_dist = y' + p1·(r² + 2·y'²) + 2·p2·x'·y'

判断方法:畸变校正的两种策略

畸变校正有两种常用策略:直接校正(对每个像素计算畸变前的坐标,然后插值)和反向映射(从畸变图像坐标反算理想坐标)。OpenCV的 undistort() 函数采用反向映射策略,计算效率更高。对于实时应用,可预先计算校正查找表(LUT),避免每帧重复计算。

案例拆解:广角镜头畸变校正的参数调优

某项目使用焦距为2.8mm的广角镜头,畸变严重,图像边缘直线明显弯曲。标定得到 k1=-0.45, k2=0.25, k3=-0.08。直接使用OpenCV默认参数校正后,图像边缘出现拉伸伪影。分析发现 k3 值过大导致边缘过度校正。解决方案:将 k3 置为0,仅使用 k1, k2 进行校正,并设置 alpha=0.5 保留部分边缘像素。校正后重投影误差从0.8像素降至0.3像素,边缘直线恢复平直,但视场角损失约10%。

常见误区与总结复盘

风险提示:畸变系数并非越大越好,过大的畸变系数可能导致校正后图像边缘出现波浪形伪影。对于鱼眼镜头,应使用鱼眼相机模型(如 fisheye::calibrate()),而非普通针孔模型。

针孔模型是三维重建的基础,畸变模型则是对真实镜头的必要修正。在实际工程中,应优先使用标定得到的畸变系数进行校正,并验证校正后的图像质量。若校正后边缘质量下降,可适当降低校正强度或使用局部校正策略。

数学工具参数维度适用场景常见问题
旋转矩阵9个参数(3×3)坐标变换、矩阵运算正交约束需维护
四元数4个参数插值、滤波、存储需归一化
欧拉角3个参数人机交互、调试万向锁、顺序依赖
内参K4个参数像素坐标映射变焦后需重新标定
外参[R|t]6个参数世界到相机变换相机移动后需更新
畸变系数5个参数镜头校正过度校正产生伪影