立体视觉基础:双目相机成像原理、极线约束、视差与深度的关系、相机标定与校正

立体匹配(Stereo Matching)的核心任务是从一对双目图像中恢复场景的深度信息。要真正理解代价计算、聚合与后处理为何如此设计,首先必须牢固掌握双目视觉的物理与几何基础。本章将围绕四个关键主题展开:双目相机的成像原理、极线约束如何简化匹配搜索、视差与深度的数学转换关系,以及相机标定与校正(立体校正)在工程链路中的关键作用。这些内容不仅是算法实现的前提,更是排查“匹配错误”“深度噪声大”“图像畸变”等实际问题的第一现场。

双目立体视觉核心链路 左相机 OL 光心 (0,0,0) 焦距 f 右相机 OR 光心 (b,0,0) 焦距 f 基线距离 b(双目间距) 空间点 P (X, Y, Z) 左成像面 投影点 xL 右成像面 投影点 xR 极线约束(Epipolar Constraint) • 左图点 P 的对应点必然在右图的极线上 • 立体校正后:极线水平对齐 → 搜索从 2D 降为 1D • 视差 d = xL - xR(水平像素差) • 深度 Z = (f × b) / d 深度-视差关系 Z = f·b / d 相机标定 → 畸变校正 → 立体校正(极线水平对齐)

2.1 双目相机成像原理:从三维世界到二维像素

双目相机模拟人眼感知深度的方式,通过两个水平放置的相机同时采集同一场景。每个相机遵循针孔成像模型,将三维空间点投影到二维图像平面。设左相机光心为世界坐标系原点,右相机光心位于基线距离 b 处。空间点 P(X, Y, Z) 在左右成像面上的投影点分别为 xL 和 xR。由于两个相机视角不同,同一空间点在左右图像中的像素位置存在水平偏移,这个偏移量就是视差 d = xL - xR。

实际工程中,相机并非理想针孔模型,镜头畸变(径向畸变和切向畸变)会导致投影点偏离理论位置。径向畸变使直线成像为曲线,切向畸变源于镜头与成像面不平行。因此,原始图像必须经过畸变校正才能用于立体匹配。此外,双目相机的两个镜头在制造装配时难以做到完全平行,存在旋转和平移误差,这需要通过立体校正将左右图像变换为“理想双目系统”下的图像,使对应点的极线严格水平对齐。

核心要点:成像原理决定了后续所有处理的前提。理解针孔模型、畸变来源和双目几何关系,是设计标定方案和调试匹配算法的理论基础。工程中常见的“匹配点找不到”“深度图出现条纹状噪声”等问题,往往根源不在匹配算法本身,而在成像链路的前端——畸变未校正干净或极线未对齐。

2.2 极线约束:将二维搜索降为一维搜索

极线约束是立体视觉中最核心的几何约束。对于左图像上的任意一点 pL,其在右图像上的对应点 pR 必然位于一条直线上,这条直线称为极线。极线的几何定义是:由左相机光心 OL、右相机光心 OR 和空间点 P 三点确定的平面(极平面)与右成像平面的交线。所有极线交于极点(左右光心连线与成像平面的交点)。

在未校正的原始双目图像中,极线是倾斜的,匹配搜索需要在二维区域内进行,计算量大且容易产生误匹配。通过立体校正(如 Bouguet 算法),可以将左右图像重投影到共同平面上,使极线变为水平线。此时,左图点 pL 的对应点只需在右图的同一行(y 坐标相同)上搜索,搜索空间从二维降为一维,时间复杂度从 O(W×H) 降为 O(W),同时误匹配率显著降低。

对比维度未校正图像立体校正后
极线方向任意倾斜方向严格水平
搜索空间2D 区域(全图或局部窗口)1D 水平线(同一行)
计算复杂度O(W×H) 每像素O(W) 每像素
误匹配风险高(易受纹理重复干扰)低(几何约束强)
后续处理需额外几何验证可直接进行视差计算

极线约束的工程意义不仅在于加速,更在于鲁棒性。在遮挡区域、低纹理区域或重复纹理区域,一维搜索配合唯一性约束(每个像素最多一个匹配)能有效减少歧义。实际系统中,立体校正的精度直接影响匹配质量,通常要求校正后极线水平误差小于 0.5 像素。

2.3 视差与深度的关系:数学转换与精度分析

在理想双目系统中,深度 Z 与视差 d 的关系为:Z = f × b / d,其中 f 为焦距(像素单位),b 为基线距离(毫米单位),d 为视差(像素单位)。这个公式揭示了几个关键特性:

  • 反比关系:视差越大,深度越小(物体越近);视差越小,深度越大(物体越远)。
  • 非线性:深度分辨率随距离增加而急剧下降。近距离处,视差变化 1 像素对应的深度变化很小;远距离处,视差变化 1 像素对应的深度变化很大。
  • 精度公式:深度误差 ΔZ ≈ Z² / (f × b) × Δd。这意味着深度误差与距离的平方成正比,与基线和焦距成反比。

例如,某双目相机 f = 1000 像素,b = 120 mm,视差匹配精度 Δd = 0.5 像素。在 Z = 1 m 处,深度误差约为 4.2 mm;在 Z = 5 m 处,深度误差约为 104 mm;在 Z = 10 m 处,深度误差约为 417 mm。这说明立体视觉在近距离具有高精度,远距离精度急剧下降,设计系统时需要根据工作距离选择合适的基线和分辨率。

工程经验:基线越长,近距精度越高,但会增大盲区(近距离物体无法同时被两个相机看到);基线越短,盲区小但远距精度差。选择基线时需综合考虑最小工作距离、最大工作距离和精度要求。此外,亚像素匹配(如代价插值、左右一致性检查)可将有效视差精度提升到 0.1~0.3 像素,显著改善深度质量。

2.4 相机标定与校正:从理论到工程落地

相机标定是获取相机内参(焦距、主点、畸变系数)和外参(旋转矩阵、平移向量)的过程。常用方法为张正友标定法,使用棋盘格或圆点标定板拍摄 10~20 张不同姿态的图像,通过角点检测和最小二乘优化求解参数。标定结果的质量直接影响立体校正和深度计算的准确性。

立体校正的典型流程如下:

  1. 单目标定:分别标定左右相机的内参和畸变系数。
  2. 双目标定:计算左右相机之间的旋转矩阵 R 和平移向量 T。
  3. 立体校正:使用 Bouguet 算法或 Hartley 算法,将左右图像重投影为极线水平对齐的图像。
  4. 校正验证:在左右校正图像上选取对应点,检查 y 坐标差是否小于阈值(通常 0.5 像素)。
# 典型标定流程(OpenCV 伪代码)
# 1. 单目标定
retL, mtxL, distL, rvecsL, tvecsL = cv2.calibrateCamera(objpoints, imgpointsL, grayL.shape[::-1], None, None)
retR, mtxR, distR, rvecsR, tvecsR = cv2.calibrateCamera(objpoints, imgpointsR, grayR.shape[::-1], None, None)

# 2. 双目标定
retS, mtxL, distL, mtxR, distR, R, T, E, F = cv2.stereoCalibrate(
    objpoints, imgpointsL, imgpointsR, mtxL, distL, mtxR, distR, grayL.shape[::-1])

# 3. 立体校正
R1, R2, P1, P2, Q, roi1, roi2 = cv2.stereoRectify(
    mtxL, distL, mtxR, distR, grayL.shape[::-1], R, T, alpha=0)

# 4. 校正映射
map1L, map2L = cv2.initUndistortRectifyMap(mtxL, distL, R1, P1, grayL.shape[::-1], cv2.CV_32FC1)
map1R, map2R = cv2.initUndistortRectifyMap(mtxR, distR, R2, P2, grayR.shape[::-1], cv2.CV_32FC1)

# 5. 应用映射
rectifiedL = cv2.remap(imgL, map1L, map2L, cv2.INTER_LINEAR)
rectifiedR = cv2.remap(imgR, map1R, map2R, cv2.INTER_LINEAR)

标定与校正环节的常见问题包括:标定板图像数量不足导致参数过拟合、标定板未覆盖视场边缘导致畸变校正不彻底、双目基线在运输或使用中发生微小形变导致极线偏移。因此,在量产或长期部署场景中,建议定期重新标定,并在系统中加入校正质量监控模块。

风险提示:立体校正不是一次性的。温度变化、振动、镜头松动都可能导致外参漂移。在自动驾驶、机器人等场景中,建议每次启动时执行快速自检(如利用场景中的直线特征验证极线水平度),必要时触发在线标定或提示人工干预。

2.5 案例拆解:双目相机选型与标定实战

某仓储机器人项目需要检测 0.5~3 m 范围内的货架与障碍物,要求深度精度在 1 m 处优于 10 mm,在 3 m 处优于 100 mm。初始方案选用基线 60 mm、分辨率 1280×720、焦距 800 像素的相机模组。经计算,在 3 m 处视差约为 16 像素,若匹配精度为 0.5 像素,深度误差约为 281 mm,远超 100 mm 的需求。

分析后决定将基线增大到 120 mm,同时将分辨率提升至 1920×1080,焦距相应变为 1200 像素。重新计算:3 m 处视差约为 48 像素,深度误差约为 94 mm,满足要求。但基线增大导致 0.5 m 处盲区扩大,两个相机无法同时看到 0.5 m 内的物体。最终方案采用“双目 + 单目”融合策略:近距离(0.3~0.8 m)使用单目视觉或 ToF 传感器,远距离(0.8~3 m)使用双目立体视觉。

标定过程中,团队拍摄了 25 张不同姿态的标定板图像,重投影误差控制在 0.08 像素以内。立体校正后,随机选取 50 对特征点验证极线水平度,平均 y 坐标差为 0.3 像素,最大偏差 0.6 像素。实际运行中,深度图在 1 m 处误差约 8 mm,3 m 处误差约 85 mm,满足系统需求。

复盘经验:第一,深度精度需求必须从系统层面分解,不能只看标称参数;第二,基线、分辨率、焦距三者需要联合优化,不能孤立调整;第三,标定质量验证不能只看重投影误差,必须结合校正后的极线水平度进行端到端验证;第四,在复杂光照和纹理稀疏场景中,需要配合主动纹理投影或结构光方案来提升匹配鲁棒性。

总结:立体视觉的精度和鲁棒性从相机标定与校正开始。理解成像原理、极线约束和视差-深度关系,能够帮助工程师在系统设计阶段做出正确决策,在调试阶段快速定位问题根源。本章内容是后续代价计算、聚合与后处理的基础,也是整个立体匹配课程的地基。