第二章 核心成像原理(上):双目立体视觉原理、视差与深度计算、基线距离对精度的影响
各位同学,欢迎来到深度相机选型的硬核部分。
今天咱们聊聊双目立体视觉。说实话,这是我最熟悉的3D技术之一。十年前我刚入行时,第一个落地的项目就是双目相机——给一台AGV小车做避障。那会儿踩的坑,现在想起来都心疼。但正是这些经历,让我对双目原理的理解特别深。
好,咱们正式开始。
2.1 双目立体视觉:说白了就是“模仿人眼”
双目立体视觉的原理,其实特别朴素。
你想想看,人为什么能感知深度?因为我们有两只眼睛,它们看到的画面略有不同。大脑通过对比这两幅图像的差异,就能算出物体离我们有多远。
双目相机干的也是同样的事。它用两个摄像头(左眼和右眼)同时拍摄同一场景,然后通过算法找出两幅图像中对应的像素点,计算它们的偏移量——这个偏移量,就是视差。
核心公式:
深度 Z = (f × B) / d
其中:
- Z:物体到相机的距离(深度)
- f:相机焦距(像素单位)
- B:基线距离(两个相机光心之间的距离)
- d:视差(对应像素在左右图像中的水平偏移量)
这个公式,我建议你刻在脑子里。后面所有关于精度、分辨率、选型的讨论,都绕不开它。
2.2 视差与深度计算:一个像素的差距,可能差好几米
咱们来拆解一下这个公式。
视差 d 的单位是像素。你想想看,如果视差算错了一个像素,深度会差多少?
我举个例子:
- 假设 f = 500 像素,B = 10 cm
- 物体在 1 米处,视差 d = (500 × 0.1) / 1 = 50 像素
- 如果视差算成了 49 像素,深度就变成了 (500 × 0.1) / 49 ≈ 1.02 米
- 差了 2 厘米,还行对吧?
但如果物体在 10 米处呢?
- 视差 d = (500 × 0.1) / 10 = 5 像素
- 算成 4 像素,深度 = (500 × 0.1) / 4 = 12.5 米
- 差了 2.5 米!
⚠️ 这就是双目视觉的“硬伤”:
距离越远,视差越小,深度误差越大。说白了,双目相机在近处很准,远处就“飘”了。
我曾经在一个户外巡检项目里吃过这个亏。当时想用双目测 20 米外的电线杆,结果数据抖得没法看。后来换了激光雷达才搞定。
2.3 基线距离:不是越长越好,也不是越短越好
基线 B 是双目系统最关键的硬件参数。它直接影响精度和测量范围。
基线越长:
- 视差越大,深度精度越高
- 但相机视野重叠区域变小,近距离物体可能“出画”
- 结构更笨重,不适合小型化设备
基线越短:
- 结构紧凑,适合手机、无人机等小设备
- 但视差小,远距离精度差
- 对立体匹配算法的要求更高
💡 我的选型经验:
室内场景(0.5-5 米),基线 5-10 cm 就够了。
室外场景(5-20 米),基线建议 20-50 cm。
我做AGV避障时,基线选了 12 cm,兼顾了精度和体积。这个值不是算出来的,是反复试出来的。
2.4 知识体系总览
下面这张图,是我自己画的。它把双目立体视觉的核心逻辑串起来了。你多看几遍,心里就有谱了。
2.5 避坑指南:我踩过的那些坑
做双目产品,光懂原理是不够的。硬件选型时,有几个坑我替你们踩过了:
- 别迷信高分辨率。分辨率高确实能提高视差精度,但计算量也翻倍。我见过有人用 4K 双目做实时避障,结果帧率掉到 5fps,根本没法用。工业场景 720p 或 1080p 足够了。
- 注意相机同步。左右相机必须硬件触发同步,否则运动物体拍出来是“鬼影”。我曾经用软件同步,结果拍高速运动的机械臂,视差图全是错的。
- 标定不能省。双目相机出厂前必须做立体标定,矫正镜头畸变和两相机之间的旋转平移。不标定?那深度数据就是垃圾。
一句话总结本章:
双目立体视觉的核心就是“用视差换深度”。基线越长、距离越近、焦距越大,精度越高。但实际选型时,要在精度、体积、计算量之间找平衡。
公众号:蓝海资料掘金营,微信deep3321