3、双目测距原理:视差计算、三角测量原理、深度公式推导、基线长度与焦距对测距的影响

双目测距(Stereo Vision Ranging)是模拟人类双眼视觉机制,通过两台水平放置的相机同时采集同一场景图像,利用两幅图像中对应像素点的位置差异(即视差)来反推物体深度信息的技术。在工业测量、机器人导航、自动驾驶和三维重建等领域,双目测距因其被动式、高帧率、成本适中的特点,成为最主流的深度感知方案之一。本章将系统拆解双目测距的数学内核——从视差计算到三角测量,从深度公式推导到系统参数对测距精度的影响,帮助学员建立从像素坐标到物理距离的完整映射逻辑。

双目测距核心链路与参数影响 左相机 OL 光心 (0,0,0) 右相机 OR 光心 (b,0,0) 基线长度 b 目标点 P (X, Y, Z) 左成像面 xL 右成像面 xR 视差 d = xL - xR 深度公式 Z = (f × b) / d f 焦距 ↑ → 视差分辨率 ↑ 但视场角 ↓ b 基线 ↑ → 深度精度 ↑ 但盲区 ↑ / 结构变大 d 视差量化误差 → 深度误差与 Z² 成正比

3.1 视差计算:从像素匹配到视差图

核心原理:视差(Disparity)是双目测距的原始观测值,定义为同一三维空间点在左右两幅图像中成像位置的横坐标之差。在理想的双目系统中,两台相机严格平行共面放置,且光轴平行、成像平面共面,此时同名点只存在水平方向的偏移,即 d = xL - xR。视差计算的核心任务是在左右图像中找到正确的对应点匹配关系,这一过程称为立体匹配(Stereo Matching)。

判断方法或操作流程:实际工程中,视差计算通常遵循以下流程:

  1. 图像校正(Rectification):利用标定得到的内外参数,对左右图像进行极线校正,使同名点位于同一水平扫描线上,将二维搜索降为一维搜索。
  2. 代价计算(Cost Computation):对每个像素,在视差范围内计算匹配代价。常用代价函数包括差(SAD)、平方差(SSD)、归一化互相关(NCC)以及基于Census变换的汉明距离等。
  3. 代价聚合(Cost Aggregation):在局部窗口或全局框架下对代价进行平滑,抑制噪声和弱纹理区域的歧义。局部方法如Block Matching,全局方法如Graph Cut、Semi-Global Matching(SGM)。
  4. 视差优化与细化:通过左右一致性检查(LRC)、唯一性约束、亚像素插值(如抛物线拟合)等步骤,剔除错误匹配并提高视差精度。
匹配方法 代价函数 精度 计算量 适用场景
Block Matching (BM) SAD / SSD 中(整像素) 低 实时性要求高的嵌入式平台
Semi-Global Matching (SGM) Census + 互信息 高(亚像素) 中 自动驾驶、工业测量主流方案
Graph Cut / Belief Propagation 全局能量函数 极高 高 离线高精度三维重建
经验提醒:在弱纹理区域(如白墙、天空)和重复纹理区域(如栅栏、布料纹理),立体匹配极易产生误匹配。工程上建议结合边缘检测、语义分割先验或结构光投影来辅助匹配,同时务必开启左右一致性检查,剔除遮挡区域的无效视差。

3.2 三角测量原理与深度公式推导

核心原理:三角测量(Triangulation)是双目测距的几何基础。当两台相机观察到同一空间点P时,P与左右光心OL、OR构成一个三角形。已知基线长度b(两光心距离)和两个投影角度,即可通过相似三角形关系解算出P点的深度Z。

深度公式推导:设左相机坐标系为世界坐标系,P点坐标为(X, Y, Z),左右相机焦距均为f(单位:像素),成像点横坐标分别为xL和xR。根据针孔相机模型:

左相机投影:xL = f × X / Z
右相机投影:xR = f × (X - b) / Z
两式相减得视差:d = xL - xR = f × b / Z
整理得深度公式:Z = (f × b) / d

该公式揭示了双目测距的本质:深度与视差成反比,与焦距和基线长度成正比。值得注意的是,公式中的f和d均以像素为单位,因此Z的单位与b的单位一致(通常为毫米或米)。

案例拆解:某工业检测系统使用双目相机,标定后焦距f = 1200像素,基线b = 200mm。当某特征点的视差d = 60像素时,深度Z = (1200 × 200) / 60 = 4000mm = 4m。若视差测量误差为±0.5像素,则深度误差约为ΔZ = Z² × Δd / (f × b) = 16 × 0.5 / (1200 × 0.2) ≈ 0.033m,即约33mm。这说明在4m距离处,0.5像素的视差误差会导致约3.3cm的深度误差,验证了“距离越远,精度越差”的规律。

3.3 基线长度与焦距对测距的影响

核心原理:基线长度b和焦距f是双目系统的两个核心设计参数,它们共同决定了测距的量程、精度和视场范围。理解这两个参数的影响规律,是进行双目系统硬件选型和结构设计的关键。

判断方法或操作流程:

  • 基线长度b的影响:增大基线可以显著提升深度精度(因为Z与b成反比),但同时会带来两个问题:一是近距离盲区增大——当目标太近时,可能只被一台相机看到,无法形成有效视差;二是系统体积和重量增加,且左右视角差异变大,匹配难度上升。
  • 焦距f的影响:增大焦距相当于“放大”了成像细节,同样视差误差对应的深度误差更小,因此精度更高。但长焦镜头视场角变窄,可观测范围缩小,且镜头畸变通常更明显,对标定精度要求更高。
  • 综合权衡:工程上通常根据最小工作距离、最大测量距离和精度要求来反推b和f。经验公式为:b ≥ Z_min × d_min / f,其中d_min为可接受的最小视差(通常取1~2像素)。
参数 增大时的收益 增大时的代价 典型取值范围
基线 b 深度精度↑,远距离测距能力↑ 盲区↑,体积↑,匹配难度↑ 数厘米(室内)~ 数米(自动驾驶)
焦距 f 深度精度↑,角度分辨率↑ 视场角↓,畸变↑,近距盲区↑ 8mm~50mm(工业镜头)
风险提示:盲目增大基线或焦距来追求精度,可能导致系统在近距离完全失效。例如,某机器人避障系统将基线从100mm增大到300mm后,最近有效测距从0.5m恶化到1.2m,导致近距离障碍物无法检测。设计时必须先明确最小工作距离,再反推基线上限。

3.4 常见误区与总结复盘

常见误区:

  1. 误区一:认为视差越大精度越高。实际上,视差增大意味着目标更近,深度误差与Z²成正比,近距离精度确实更高,但视差本身存在匹配精度上限(亚像素插值通常只能做到0.1~0.2像素),且大视差往往伴随遮挡和匹配歧义。
  2. 误区二:忽略基线-焦距的耦合关系。有些工程师只关注f×b的乘积,认为乘积相同则精度相同。但f和b对系统体积、视场、盲区的影响完全不同,必须分开考量。
  3. 误区三:将标定焦距直接用于深度计算。标定得到的焦距是等效焦距(含像素尺寸换算),而镜头畸变会导致边缘像素的实际焦距偏离标称值,因此必须使用去畸变后的校正图像进行视差计算。
  4. 误区四:忽视温度对基线的影响。在温度变化大的环境中,金属结构件的热胀冷缩会导致基线长度变化,进而引入系统性深度误差。高精度应用需采用恒温结构或在线基线校正。

总结复盘:双目测距的本质是一个“像素差→物理深度”的确定性映射,其精度受限于视差量化误差、标定残差和系统结构稳定性。在实际项目中,建议遵循以下设计流程:

  1. 明确测距范围(Z_min ~ Z_max)和精度要求(ΔZ_max);
  2. 根据精度公式反推所需的视差分辨率,进而确定f和b的组合;
  3. 验证视场角覆盖和盲区是否满足应用场景;
  4. 选用高精度标定板(如棋盘格或圆点阵),进行立体标定并评估重投影误差(应小于0.1像素);
  5. 在目标距离处放置标准尺寸物体,实测深度并对比理论值,进行系统级验证。
经验提醒:对于量产双目模组,建议在产线上增加“视差-深度”映射表的标定环节,以补偿镜头畸变、装配误差和个体差异。同时,定期使用标准距离靶标进行在线校验,可有效抑制温漂和机械蠕变带来的精度退化。