3. 核心参数解析(下):视场角(FOV)、基线距离、焦距与深度精度的数学关系

上一节我们聊了分辨率、帧率和感光芯片。今天这几个参数,才是真正决定双目相机“能不能用”的关键。

视场角、基线距离、焦距——这三个参数是绑在一起的。你调一个,另外两个就得跟着变。我见过不少项目,选型时只看分辨率,结果装上去发现要么视野不够,要么深度精度差得离谱。嗯,今天我们就把它彻底讲透。

3.1 视场角(FOV):你能看到多宽的世界

视场角,说白了就是相机能拍到的角度范围。水平方向叫HFOV,垂直方向叫VFOV,对角线叫DFOV。

计算公式其实很简单:

FOV = 2 × arctan( sensor_size / (2 × focal_length) )

举个例子:

  • 传感器宽度 6.4mm(1/2英寸常见规格)
  • 焦距 8mm
  • HFOV = 2 × arctan(6.4 / 16) ≈ 43.6°

我个人习惯先定FOV再反推焦距。为什么?因为应用场景决定了你需要看多宽。

经验法则:

  • 室内SLAM:HFOV 90°~120°(要看到墙角和障碍物)
  • 室外避障:HFOV 60°~90°(太宽了远处物体太小)
  • 手势识别:HFOV 50°~70°(手部细节更重要)

我在做AGV项目时踩过一个坑。选了120°超广角镜头,想着视野大安全。结果边缘畸变严重,深度图在边缘区域直接废掉。后来换成90°镜头,配合畸变校正,效果反而更好。

注意:广角镜头(FOV > 100°)的边缘畸变很难完全校正。双目匹配对图像一致性要求极高,左右图畸变校正后的残差会直接影响深度精度。我个人不建议在双目系统上用超过110°的镜头。

3.2 基线距离:两个眼睛之间的距离

基线距离就是左右两个相机光心之间的距离。这个参数直接决定了深度测量的范围和精度。

核心公式:

Z = (f × B) / d

其中:

  • Z:目标深度
  • f:焦距(像素单位)
  • B:基线距离
  • d:视差(像素)

你看,深度Z和视差d是反比关系。视差越大,深度越小。反过来,视差每变化1个像素,深度的变化量就是深度精度。

深度精度公式:

ΔZ = Z² / (f × B) × Δd

这个公式太重要了。我建议你把它贴在工位上。

关键结论:

  • 深度精度与距离的平方成正比——越远越不准
  • 深度精度与基线距离成反比——基线越长越准
  • 深度精度与焦距成反比——焦距越长越准

举个例子:

  • Z = 5m,f = 1000像素,B = 0.1m,Δd = 0.1像素
  • ΔZ = 25 / (1000 × 0.1) × 0.1 = 0.025m = 2.5cm

这个精度还不错。但如果Z变成10m:

  • ΔZ = 100 / (1000 × 0.1) × 0.1 = 0.1m = 10cm

精度直接掉了4倍。

我的建议:选基线时,先确定你最关心的深度范围。比如做室内机器人,主要测距范围是0.5m~5m,那就按5m处的精度要求反推基线。我曾经有个项目要求10m处精度优于5cm,算下来基线得做到30cm以上——最后只能把相机装在机器人两侧,用结构件固定。

3.3 焦距:看得远还是看得清

焦距决定了两个东西:放大倍率和景深。

焦距越长:

  • 视场角越小(看得窄)
  • 远处物体在图像上更大(视差更大)
  • 深度精度更高
  • 但近处物体可能超出视场

焦距越短:

  • 视场角越大(看得宽)
  • 远处物体在图像上更小(视差更小)
  • 深度精度更低
  • 但近处物体也能看到

这里有个常见的误区。有人觉得焦距越长精度越高,那就选长焦呗。但你想想看,长焦意味着视场角小。如果基线固定,两个相机的重叠区域会变小。重叠区域小了,能匹配的特征点就少了,深度图会出现大片的空洞。

三者之间的约束关系:

视场角、基线、焦距不是独立参数。它们通过一个叫“立体视场重叠”的东西绑在一起。

重叠区域宽度 ≈ 2 × Z × tan(HFOV/2) - B

如果B太大或者HFOV太小,重叠区域可能为负——两个相机各看各的,根本没有立体视觉。

3.4 三个参数的权衡:一个实际案例

我去年做一个仓储机器人项目,要求:

  • 检测距离:0.3m~8m
  • 8m处深度精度优于10cm
  • 水平视野不小于80°

算一下:

  • 先定FOV:80°,传感器1/2英寸(宽6.4mm)
  • 反推焦距:f = 6.4 / (2 × tan(40°)) ≈ 3.8mm
  • 像素焦距:假设像素尺寸3μm,f_pixel = 3.8 / 0.003 ≈ 1267像素
  • 按8m处精度10cm反推基线:B = Z² × Δd / (f × ΔZ) = 64 × 0.1 / (1267 × 0.1) ≈ 0.05m

算出来基线只要5cm就够了?等等,这里有个坑。

Δd=0.1像素是理想情况。实际项目中,光照变化、纹理不足、标定误差都会让匹配精度下降。我一般按Δd=0.3~0.5像素来算。

按Δd=0.3像素重新算:

  • B = 64 × 0.3 / (1267 × 0.1) ≈ 0.15m

15cm基线,配合3.8mm焦距,80°FOV。这个组合在实际项目中验证过,效果不错。

避坑指南:我曾经按理论值选型,结果实际精度只有理论值的1/3。后来发现是镜头畸变和左右相机光轴不平行导致的。所以我的习惯是:理论计算值乘以1.5~2的安全系数,再选基线。

3.5 知识体系总览

下面这张图总结了三个参数之间的关系,以及它们如何影响深度精度:

双目相机核心参数关系图 视场角 (FOV) 基线距离 (B) 焦距 (f) FOV↑ 允许B↑ B↑ 需要f↑ 深度精度 ΔZ = Z² / (f × B) × Δd 近距离精度高 远距离精度低 精度与Z²成正比 选型建议 室内:FOV 80-100° | 基线 8-15cm | 焦距 3-6mm 室外:FOV 60-80° | 基线 15-30cm | 焦距 6-12mm

3.6 实际选型中的权衡策略

说了这么多理论,实际选型时怎么操作?我一般按这个步骤来:

  1. 先定应用场景:室内还是室外?最近和最远检测距离是多少?
  2. 再定FOV:根据场景需求,确定水平视场角
  3. 反推焦距:根据传感器尺寸和FOV,算出焦距
  4. 计算基线:按最远距离处的精度要求,算出最小基线
  5. 验证重叠区域:检查在最远距离处,两个相机的视野重叠是否足够
  6. 留余量:理论值乘以1.5~2的安全系数

记住:没有完美的参数组合,只有最适合你应用的组合。宽FOV和长基线不可兼得,高精度和大范围也不可兼得。做嵌入式视觉,本质上就是在各种约束下找平衡点。

嗯,核心参数就讲到这里。这些公式和关系,我建议你拿自己的项目数据算一遍。算完你会发现,很多选型问题其实在纸上就能解决,不用等到硬件买回来才发现不对。

最后一个小技巧:如果你不确定怎么选,可以参考市面成熟产品的参数。Intel RealSense D435的基线是5cm,FOV约85°;ZED 2的基线是12cm,FOV约90°。这些产品经过了大量验证,参数组合是有参考价值的。


公众号:蓝海资料掘金营,微信deep3321