一、结构光技术概述

各位同学好,我是老张。在嵌入式视觉领域摸爬滚打了十几年,今天咱们来聊聊结构光这个技术。说实话,我第一次接触结构光是在2015年做一款人脸识别门锁的项目,那时候市面上可选方案还不多,踩了不少坑。现在回头看,很多经验教训都值得分享。

1.1 结构光3D成像原理

结构光的核心思想,说白了就是「主动投射已知图案,通过观察变形来反推深度」。你想想看,如果我们往墙上投射一个规则的网格,墙面是平的,那网格就不会变形。但如果投射到人脸或者物体上,网格就会随着表面起伏发生扭曲——这个扭曲量,就是深度信息的直接体现。

具体怎么算的呢?我简单解释一下:

  • 投影仪投射出已知编码的光斑或条纹
  • 相机从另一个角度拍摄被调制的图案
  • 通过三角测量原理,计算每个像素点的偏移量
  • 偏移量结合标定参数,反算出深度值

嗯,这里要注意一个关键点:投影图案的编码方式直接决定了测量精度和速度。我在项目中遇到过用格雷码编码的,也有用相移法的,各有优劣。格雷码抗干扰强但分辨率低,相移法精度高但容易受环境光影响。

核心公式(简化版):

深度 Z = (基线距离 B × 焦距 f) / (视差 d)

其中视差 d 就是投影图案在参考平面和实际物体表面之间的像素偏移量。

1.2 结构光模组硬件组成

一个典型的结构光模组,硬件上就三个核心部件:投影仪、相机、处理器。我习惯把它们称为「三件套」。

组件 作用 选型要点
投影仪 投射编码图案 波长(红外/可见光)、功率、散斑均匀性
相机 采集调制后的图案 分辨率、帧率、全局快门(必须!)
处理器 解码、计算深度 算力、接口、功耗

投影仪这块,我建议优先考虑红外波段的VCSEL激光器。为什么?因为红外光对人眼安全,而且不受环境可见光干扰。我曾经在一个户外项目里用了可见光投影仪,结果大太阳底下根本看不清图案,后来换成850nm红外才解决问题。

相机必须用全局快门,这点千万记住。卷帘快门在拍摄运动物体时会变形,深度图直接废掉。我见过不少新手在这上面栽跟头。

处理器嘛,现在主流方案有ARM+DSP、FPGA、或者专用的3D深度芯片。我个人习惯用ARM+DSP的组合,灵活性高,调试方便。

1.3 主流结构光方案对比

市面上常见的结构光方案有三种:单目、双目、散斑。我画了一张图帮你理清关系:

结构光方案分类 结构光3D方案 单目结构光 双目结构光 散斑结构光 特点 • 1个相机+1个投影 • 结构简单,成本低 • 精度受标定影响大 • 适合近距离场景 特点 • 2个相机+1个投影 • 冗余度高,鲁棒性好 • 标定复杂,成本高 • 适合大范围场景 特点 • 投射随机散斑图案 • 无需精密标定 • 抗环境光能力强 • 消费级产品首选

三种方案怎么选?我个人的经验是这样的:

  • 单目结构光:适合近距离、静态场景,比如手机人脸解锁。成本低,但精度受标定质量影响很大。我曾经在一个项目里因为标定板不平整,导致整个模组返工,血的教训。
  • 双目结构光:适合大范围、动态场景,比如体感游戏。两个相机互为冗余,抗遮挡能力强。但标定流程复杂,量产一致性是个挑战。
  • 散斑结构光:这是目前消费级产品的主流方案,比如Kinect v1、iPhone的Face ID。投射随机散斑,通过图像匹配计算深度。优点是抗干扰强,缺点是计算量大。

1.4 结构光 vs ToF vs 双目视觉

很多同学会问:结构光和ToF、双目视觉到底有什么区别?我打个比方你就明白了:

  • 结构光:像用尺子量——投射已知图案,看变形量
  • ToF:像用秒表测——发射光脉冲,测飞行时间
  • 双目视觉:像用两只眼睛看——自然光下匹配左右图像

下面这张表是我多年项目经验的总结:

对比项 结构光 ToF 双目视觉
工作原理 主动投射+三角测量 飞行时间测距 被动双目匹配
精度 高(亚毫米级) 中(厘米级) 中(毫米级)
抗环境光 弱(需滤光片) 强(依赖纹理)
功耗
成本
适用场景 近距离高精度 中远距离 纹理丰富场景

避坑指南:我曾经在一个户外机器人项目里选了结构光方案,结果大白天根本没法用——环境光太强,投影图案被淹没了。后来换成ToF才解决问题。所以选型时一定要考虑使用场景的光照条件。

注意:结构光方案在强光下表现不佳,这是它的固有缺陷。如果项目需要在户外使用,建议优先考虑ToF或者双目视觉。如果非要上结构光,记得加装窄带滤光片,并且提高投影功率。

好了,这一章的内容就到这里。结构光技术看似简单,但真正落地时坑不少。后面几章我会带大家一步步搭建驱动、调试参数、优化性能。记住一句话:理论是基础,实践出真知

专注资料整理