一、结构光技术概述
各位同学好,我是老张。在嵌入式视觉领域摸爬滚打了十几年,今天咱们来聊聊结构光这个技术。说实话,我第一次接触结构光是在2015年做一款人脸识别门锁的项目,那时候市面上可选方案还不多,踩了不少坑。现在回头看,很多经验教训都值得分享。
1.1 结构光3D成像原理
结构光的核心思想,说白了就是「主动投射已知图案,通过观察变形来反推深度」。你想想看,如果我们往墙上投射一个规则的网格,墙面是平的,那网格就不会变形。但如果投射到人脸或者物体上,网格就会随着表面起伏发生扭曲——这个扭曲量,就是深度信息的直接体现。
具体怎么算的呢?我简单解释一下:
- 投影仪投射出已知编码的光斑或条纹
- 相机从另一个角度拍摄被调制的图案
- 通过三角测量原理,计算每个像素点的偏移量
- 偏移量结合标定参数,反算出深度值
嗯,这里要注意一个关键点:投影图案的编码方式直接决定了测量精度和速度。我在项目中遇到过用格雷码编码的,也有用相移法的,各有优劣。格雷码抗干扰强但分辨率低,相移法精度高但容易受环境光影响。
核心公式(简化版):
深度 Z = (基线距离 B × 焦距 f) / (视差 d)
其中视差 d 就是投影图案在参考平面和实际物体表面之间的像素偏移量。
1.2 结构光模组硬件组成
一个典型的结构光模组,硬件上就三个核心部件:投影仪、相机、处理器。我习惯把它们称为「三件套」。
| 组件 | 作用 | 选型要点 |
|---|---|---|
| 投影仪 | 投射编码图案 | 波长(红外/可见光)、功率、散斑均匀性 |
| 相机 | 采集调制后的图案 | 分辨率、帧率、全局快门(必须!) |
| 处理器 | 解码、计算深度 | 算力、接口、功耗 |
投影仪这块,我建议优先考虑红外波段的VCSEL激光器。为什么?因为红外光对人眼安全,而且不受环境可见光干扰。我曾经在一个户外项目里用了可见光投影仪,结果大太阳底下根本看不清图案,后来换成850nm红外才解决问题。
相机必须用全局快门,这点千万记住。卷帘快门在拍摄运动物体时会变形,深度图直接废掉。我见过不少新手在这上面栽跟头。
处理器嘛,现在主流方案有ARM+DSP、FPGA、或者专用的3D深度芯片。我个人习惯用ARM+DSP的组合,灵活性高,调试方便。
1.3 主流结构光方案对比
市面上常见的结构光方案有三种:单目、双目、散斑。我画了一张图帮你理清关系:
三种方案怎么选?我个人的经验是这样的:
- 单目结构光:适合近距离、静态场景,比如手机人脸解锁。成本低,但精度受标定质量影响很大。我曾经在一个项目里因为标定板不平整,导致整个模组返工,血的教训。
- 双目结构光:适合大范围、动态场景,比如体感游戏。两个相机互为冗余,抗遮挡能力强。但标定流程复杂,量产一致性是个挑战。
- 散斑结构光:这是目前消费级产品的主流方案,比如Kinect v1、iPhone的Face ID。投射随机散斑,通过图像匹配计算深度。优点是抗干扰强,缺点是计算量大。
1.4 结构光 vs ToF vs 双目视觉
很多同学会问:结构光和ToF、双目视觉到底有什么区别?我打个比方你就明白了:
- 结构光:像用尺子量——投射已知图案,看变形量
- ToF:像用秒表测——发射光脉冲,测飞行时间
- 双目视觉:像用两只眼睛看——自然光下匹配左右图像
下面这张表是我多年项目经验的总结:
| 对比项 | 结构光 | ToF | 双目视觉 |
|---|---|---|---|
| 工作原理 | 主动投射+三角测量 | 飞行时间测距 | 被动双目匹配 |
| 精度 | 高(亚毫米级) | 中(厘米级) | 中(毫米级) |
| 抗环境光 | 弱(需滤光片) | 强 | 强(依赖纹理) |
| 功耗 | 中 | 高 | 低 |
| 成本 | 中 | 高 | 低 |
| 适用场景 | 近距离高精度 | 中远距离 | 纹理丰富场景 |
避坑指南:我曾经在一个户外机器人项目里选了结构光方案,结果大白天根本没法用——环境光太强,投影图案被淹没了。后来换成ToF才解决问题。所以选型时一定要考虑使用场景的光照条件。
注意:结构光方案在强光下表现不佳,这是它的固有缺陷。如果项目需要在户外使用,建议优先考虑ToF或者双目视觉。如果非要上结构光,记得加装窄带滤光片,并且提高投影功率。
好了,这一章的内容就到这里。结构光技术看似简单,但真正落地时坑不少。后面几章我会带大家一步步搭建驱动、调试参数、优化性能。记住一句话:理论是基础,实践出真知。