一、引言:从人眼到相机
我们人类用两只眼睛看世界,就能感知深度------这就是立体视觉。闭上一只眼,伸手去拿桌上的杯子,你会发现准确度明显下降。为什么?因为少了一只眼,就少了"视差"这个深度线索。
双目相机的工作原理跟人眼一模一样:左右两个镜头,各拍一张照片,然后通过计算同一点在两张图中的横向位置差(也就是视差),就能算出这个点离相机有多远。
听起来很简单对吧?但真正做起来,你会发现被动双目有一个致命的死穴------白墙、天空、纯色物体这些弱纹理场景,左右图几乎一模一样,匹配算法直接失效,深度图上就是一大片空洞。
怎么解决?答案是散斑。今天这篇文章,我们就从原理到工程,把双目立体视觉和散斑的关系讲透。

二、视差测距的数学原理
2.1 核心公式:深度 = 焦距 × 基线 ÷ 视差
双目测距的核心公式非常简洁:
Z = f × B / d
其中:
- Z 是深度(物体到相机的距离)
- f 是相机焦距
- B 是基线(左右两个镜头光心之间的距离)
- d 是视差(同一点在左右图像中的像素偏移量)
这个公式怎么来的?其实就是相似三角形。左右两个相机看同一个物体点,各自形成一个三角形,这两个三角形相似,所以可以建立比例关系,解出深度。
理解这个公式有几个直观结论:
第一,视差越大,物体越近。 近处的物体,在左右眼中的位置差更大;远处的物体,视差很小。这跟我们的日常经验一致------看远处的山,左右眼几乎没差别;看鼻尖,两只眼看到的画面完全不同。
第二,深度和视差成反比,不是线性关系。 视差从100像素变到50像素,深度不是增加一倍那么简单------关系是非线性的。这意味着远处的深度精度会急剧下降。
2.2 误差分析:深度误差与距离平方成正比
比公式更重要的是误差公式。深度测量的相对误差大致满足:
ΔZ / Z ≈ Z / (f × B) × Δd
也就是说,深度误差与距离的平方成正比,与基线长度成反比。
这句话翻译成人话就是:
- 距离翻一倍,误差翻四倍
- 基线翻一倍,误差减一半
这就是为什么工业级双目相机往往有很长的基线------几厘米甚至几十厘米。基线越长,远距离精度越好。但基线也不是越长越好,基线太长会导致左右视野重叠区域变小,而且对两个镜头的同步和标定要求更高。
三、被动双目的死穴:弱纹理匹配失效
3.1 什么是立体匹配
双目测距的前提是:你得先知道左图的某个像素,对应右图的哪个像素。这个找对应的过程,就叫立体匹配(Stereo Matching)。
立体匹配的基本思路是:以左图的一个像素为中心,取一个小窗口(比如9×9像素),然后在右图的同一水平线上滑动,找一个最相似的窗口。最相似的那个位置,就是匹配点。
这个"相似"怎么衡量?常用的有SAD(绝对差之和)、SSD(平方差之和)、NCC(归一化互相关)等。不管哪种方法,本质上都是在比"两个窗口的纹理像不像"。
3.2 弱纹理场景为什么匹配失败
问题来了------如果场景本身没有纹理呢?
比如一面纯白的墙。你在左图取一个9×9的窗口,里面全是白的。然后在右图的水平线上滑动,每个位置都是全白的,相似度都是100%。你根本不知道哪个才是正确的匹配。
这就是被动双目最大的死穴:弱纹理区域匹配失效,深度图出现大面积空洞。
哪些场景属于弱纹理?
- 白墙、天花板、纯色桌面
- 天空、水面
- 光滑的金属表面、陶瓷表面
- 远处的物体(纹理变小变模糊)
在这些场景下,被动双目几乎没法工作。深度图上要么是大片的黑洞,要么就是错误的匹配结果。
四、解法:主动双目 + 散斑投射
4.1 主动双目是什么
既然场景没有纹理,那我们就给它"打"上纹理------这就是主动双目的核心思路。
主动双目系统在被动双目的基础上,增加了一个红外散斑投射器。这个投射器发出近红外光(通常是850nm或940nm),经过DOE(衍射光学元件)衍射后,在空间中形成数以万计的随机分布光斑。
这些光斑就像是给场景"盖"了一层人工纹理。不管你是白墙还是黑墙,只要被散斑照到,就有了丰富的纹理特征。
然后,左右两个红外相机拍摄被散斑照亮的场景,再做立体匹配。因为有了散斑纹理,即使是纯白的墙面,左右图中也有清晰可辨的光斑图案,匹配算法就能准确找到对应点。
4.2 散斑为什么是随机的
你可能会问:散斑为什么是随机分布的?用规则的点阵不行吗?
答案是:随机散斑的唯一性更好。
在立体匹配中,我们希望每个局部窗口的图案都是独一无二的,这样就不会出现"多个位置都很像"的歧义。随机散斑的好处是,任意两个不同位置的窗口,图案差异都很大,匹配的唯一性好,误匹配率低。
如果用规则的点阵(比如棋盘格),那么很多位置的窗口看起来都一样,匹配算法容易"认错人",产生周期性误匹配。
4.3 代表方案:Intel RealSense D4系列
说到主动双目,最经典的代表就是Intel RealSense D4系列深度相机。
D4系列的架构非常清晰:
- 左红外相机(IR Left)
- 右红外相机(IR Right)
- 红外激光投射器(IR Projector)
- 可选的RGB相机(做彩色纹理映射)
工作时,投射器发出散斑,两个IR相机同时拍摄,然后在ISP或SoC中跑立体匹配算法,输出深度图。
这种架构的优势很明显:
- 暗光环境也能用(主动投射照明)
- 弱纹理场景也能匹配(人工散斑纹理)
- 精度和基线成正比(基线越长越准)
- 功耗比结构光方案低(散斑投射不需要太高功率)
五、容易混淆的概念:双目 vs 单目结构光
很多人会把主动双目和单目结构光搞混,这里明确区分一下。
5.1 单目结构光(如iPhone Face ID)
iPhone的Face ID用的是单目结构光方案,不是双目匹配。它的原理是:投射器发射3万多个红外点阵,红外相机拍摄点阵的形变,然后通过三角测量计算深度。
单目结构光只有一个红外相机 + 一个投射器。它的深度计算依赖于已知的投射图案------每个光斑在空间中的投射角度是预先标定好的,相机拍到光斑位置后,就能反推深度。
核心区别:单目结构光是"投射器 + 单相机"的三角测量,而主动双目是"投射器 + 双相机"的立体匹配。前者靠已知图案解码,后者靠左右图像匹配。
5.2 怎么区分
一个简单的判断方法:数红外镜头。
- 1个红外镜头 + 1个投射器 → 单目结构光
- 2个红外镜头 + 1个投射器 → 主动双目
RealSense D4系列有两个IR相机,所以是主动双目;iPhone Face ID只有一个IR相机,所以是单目结构光。
六、主动双目的工程考量
6.1 散斑密度与匹配精度
散斑不是越多越好,也不是越少越好。散斑密度太低,纹理不够丰富,匹配精度差;密度太高,光斑重叠在一起,反而分不清。
工业级主动双目相机的散斑密度通常在每平方分米几千到几万点的量级,需要根据应用场景(测量距离、精度要求)来优化。
6.2 环境光干扰
主动双目用的是红外光,但环境中也有红外光(比如太阳光里就有大量红外成分)。在强阳光下,环境红外光可能会淹没投射的散斑,导致信噪比下降,匹配精度降低。
解决方法通常有几种:
- 提高投射器功率(但受限于激光安全等级)
- 加窄带滤光片(只让投射波长通过,滤掉环境红外)
- 用脉冲调制(投射器高速开关,相机同步拍摄,通过差分消除环境光)
6.3 基线选择
基线长度是主动双目设计中最重要的参数之一,需要在以下因素中权衡:
- 测量距离(越远需要越长的基线)
- 精度要求(精度越高需要越长的基线)
- 体积限制(基线越长相机越大越重)
- 最小测距(基线越长最小测距越远)
比如用于桌面级近距离测量的相机,基线可能只有1-2厘米;而用于户外远距离测量的相机,基线可能长达几十厘米。
七、总结
最后用几句话总结一下今天的核心内容:
- 双目测距的核心公式:深度 = 焦距 × 基线 ÷ 视差。视差越大物体越近。
- 深度误差的规律:与距离平方成正比、与基线成反比。基线越长,远距离精度越好。
- 被动双目的死穴:弱纹理场景匹配失效,深度图大面积缺失。白墙、天空、光滑表面都是重灾区。
- 主动双目的解法:用散斑投射器给场景打上人工红外纹理,双IR相机再做匹配,弱纹理场景也能稳定出深度。RealSense D4是典型代表。
- 容易混淆的点:iPhone Face ID是单目结构光(1个IR相机+投射器),不是双目匹配(2个IR相机+投射器)。
双目立体视觉是深度相机领域最经典、最成熟的技术路线之一,而散斑的引入,让它从"只能看有纹理的场景"变成了"几乎什么场景都能看"。这也是为什么主动双目能在工业检测、机器人导航、人机交互等领域广泛应用的原因。
**One More Thing... **
朗锐创新专注于工业智能视觉、深度相机、空间智能、具身智能技术应用。提供专业硬件定制化服务,帮助客户项目快速实现快速盈利。