一、红外结构光基础:从物理原理到工程实践

做3D视觉这些年,我接触过不少深度感知方案。说实话,红外结构光是我个人最偏爱的一种。为什么?因为它能在室内场景下给你非常稳定的深度数据,而且成本可控。今天我们就从最基础的东西聊起。

1.1 红外光的特性——为什么选它?

先问一个问题:为什么结构光要用红外光,而不是可见光?

原因其实很直接。红外光波长在780nm-1mm之间,人眼看不见。这意味着什么呢?你想想看,如果我用一个可见光投影仪往你脸上打条纹,你肯定觉得刺眼。但红外光不会,它不影响你正常使用设备。

我在做第一代结构光产品时,就踩过这个坑。当时为了省成本,用了近红外LED,波长850nm。结果发现环境光中的红外成分干扰特别大,尤其是阳光直射场景,信噪比直接崩了。后来换成了940nm的VCSEL激光器,效果明显改善。

红外光的关键参数:

  • 波长:常用850nm或940nm
  • 940nm优势:环境光干扰小,人眼安全阈值高
  • 850nm优势:传感器量子效率更高

我的经验:如果你做消费级产品,优先选940nm。虽然传感器响应稍弱,但抗干扰能力带来的收益更大。工业场景如果环境光可控,850nm性价比更高。

1.2 结构光编码原理——散斑与条纹

结构光的核心思想很简单:我发射已知图案的光,然后用相机拍下被物体调制后的图案,通过图案的变形来反推深度。说白了,就是「我告诉你我发了什么,你看收到的是什么,差值就是深度信息」。

1.2.1 散斑结构光

散斑结构光,我习惯叫它「随机点阵」。它投射的是随机分布的斑点图案。每个斑点周围的小区域都是独一无二的——就像指纹一样。

工作原理是这样的:

  1. 投影器发射已知的散斑图案
  2. 相机拍摄被物体调制后的散斑
  3. 通过块匹配算法,找到参考图像中对应的块
  4. 视差 = 参考位置 - 当前位置
  5. 深度 = 根据三角测距公式计算

Kinect v1用的就是散斑结构光。我记得当时拆解它的时候,发现它的散斑图案是经过特殊设计的,不是纯随机,而是有编码规律的。这样做的好处是匹配更鲁棒。

避坑指南:我曾经在项目里直接用随机数生成散斑图案,结果匹配成功率只有60%左右。后来改用de Bruijn序列编码,匹配率提升到了95%以上。散斑不是越随机越好,要有编码约束。

1.2.2 条纹结构光

条纹结构光用的是正弦条纹或二值条纹。最常见的是相移法:投射多幅不同相位的条纹图,通过解相位得到深度。

相移法的核心公式:

I(x,y) = A(x,y) + B(x,y) * cos(φ(x,y) + δ)

其中:
I: 采集到的光强
A: 背景光强
B: 调制幅度
φ: 待求相位
δ: 已知相移量

通过至少三幅不同相移的条纹图,可以解出相位φ。相位再通过三角测距换算成深度。

条纹法的优势是精度高,亚像素级别。但缺点是需要多幅投影,不适合动态场景。我做高精度工业检测时常用四步相移法,精度能做到0.01mm级别。

方法 精度 速度 适用场景
散斑结构光 毫米级 单帧 人脸识别、体感交互
条纹结构光 亚毫米级 多帧 工业检测、逆向工程

1.3 主动深度感知 vs 被动视觉

这个区别其实很本质。被动视觉就是「只看不照」,靠环境光成像。主动深度感知是「又照又看」,自己发射能量。

被动视觉的典型代表是双目立体视觉。它依赖两个相机拍摄的图像的纹理匹配来估计深度。问题在于:如果物体表面是白墙、光滑表面,没有纹理,双目就失效了。

我做过一个项目,用双目做仓储机器人导航。仓库里全是白色货架,双目算法直接崩溃,匹配点几乎为零。后来换成红外结构光,白墙也能打出纹理,问题迎刃而解。

核心区别总结:

  • 被动视觉:依赖环境纹理,弱纹理场景失效,功耗低,室外可用
  • 主动深度感知:自己创造纹理,弱纹理场景也能工作,功耗高,室外受环境光影响

你想想看,为什么iPhone的Face ID要用结构光而不是双目?就是因为人脸在弱光环境下纹理不足,双目根本没法用。结构光主动投射散斑,不管环境多暗都能工作。

1.4 知识体系框架

下面这张图是我自己整理的,把红外结构光的基础知识串起来了。你看一遍应该能有个整体印象。

红外结构光基础 - 知识体系 红外光特性 波长850nm/940nm 人眼不可见 环境光干扰 人眼安全阈值 结构光编码原理 散斑编码 条纹编码 块匹配算法 相移法解相位 深度感知 三角测距原理 视差计算深度 主动深度感知 • 自己发射能量 • 弱纹理场景可用 • 功耗较高 • 室外受环境光影响 被动视觉 • 依赖环境光 • 弱纹理场景失效 • 功耗低 • 室外可用

这张图把红外结构光的基础分成了三个层次:底层是红外光的物理特性,中间是编码方法,上层是深度计算。主动和被动两种方式的对比放在底部,方便你理解它们的本质区别。

一点建议:初学者容易陷入「哪种方法更好」的争论。我的看法是:没有最好的方法,只有最合适的场景。做产品选型时,先想清楚你的使用场景,再决定用主动还是被动。

好了,红外结构光的基础就聊到这里。这些概念是后面所有内容的地基,务必理解透彻。下一章我们会深入散斑结构光的工程实现细节,包括投影器选型、标定方法、以及我踩过的那些坑。


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