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 知识体系总览
下面这张图总结了三个参数之间的关系,以及它们如何影响深度精度:
3.6 实际选型中的权衡策略
说了这么多理论,实际选型时怎么操作?我一般按这个步骤来:
- 先定应用场景:室内还是室外?最近和最远检测距离是多少?
- 再定FOV:根据场景需求,确定水平视场角
- 反推焦距:根据传感器尺寸和FOV,算出焦距
- 计算基线:按最远距离处的精度要求,算出最小基线
- 验证重叠区域:检查在最远距离处,两个相机的视野重叠是否足够
- 留余量:理论值乘以1.5~2的安全系数
记住:没有完美的参数组合,只有最适合你应用的组合。宽FOV和长基线不可兼得,高精度和大范围也不可兼得。做嵌入式视觉,本质上就是在各种约束下找平衡点。
嗯,核心参数就讲到这里。这些公式和关系,我建议你拿自己的项目数据算一遍。算完你会发现,很多选型问题其实在纸上就能解决,不用等到硬件买回来才发现不对。
最后一个小技巧:如果你不确定怎么选,可以参考市面成熟产品的参数。Intel RealSense D435的基线是5cm,FOV约85°;ZED 2的基线是12cm,FOV约90°。这些产品经过了大量验证,参数组合是有参考价值的。
公众号:蓝海资料掘金营,微信deep3321