3、核心成像原理(中):结构光与ToF
好,咱们接着聊深度相机的核心成像原理。上一节讲了双目立体视觉,这一节我重点说说结构光和ToF。这两个技术,我在项目里踩过的坑可真不少,今天一并倒出来给你。
一、结构光原理:散斑与编码光
结构光,说白了就是“主动投射已知图案,然后通过图案变形来算深度”。你想想看,如果场景里没有纹理,双目就抓瞎了。结构光就是自己打光上去,创造纹理。
1. 散斑结构光
散斑结构光,最典型的代表就是初代Kinect。它投射的是随机分布的激光散斑点,像星空一样。每个局部区域的散斑图案都是唯一的,相当于给场景打上了“指纹”。
工作原理:
- 激光器通过衍射光学元件(DOE),把单点激光变成成千上万个随机散斑点
- 红外相机拍摄这些散斑在物体表面的变形图案
- 与预先存储的参考平面散斑图做块匹配,计算视差
- 视差转深度,原理和双目类似,但基线是“投影仪-相机”
关键点:散斑结构光依赖参考图。出厂前需要在已知距离的平面上标定一张参考散斑图。如果温度变化导致激光器波长漂移,散斑图案会轻微变化,深度精度就会下降。
我记得有一次做机器人避障项目,白天用得好好的,到了晚上温度降了10度,深度图突然出现大面积的“空洞”。排查了半天,发现是激光器温漂导致散斑图案变了,和出厂参考图对不上了。后来我们加了主动加热恒温,才解决这个问题。
2. 编码结构光
编码结构光,投射的不是随机散斑,而是有规律的空间编码图案。比如格雷码、相移条纹、或者De Bruijn序列。
常见编码方式:
| 编码类型 | 投射方式 | 优点 | 缺点 |
|---|---|---|---|
| 格雷码 | 多帧黑白条纹 | 鲁棒性好,抗干扰强 | 需要多帧,不适合动态场景 |
| 相移条纹 | 多帧正弦条纹 | 亚像素精度,分辨率高 | 对运动敏感,需要解包裹 |
| 混合编码 | 格雷码+相移 | 兼顾鲁棒性和精度 | 算法复杂,计算量大 |
编码结构光的优势在于:每个像素的编码是确定的,不像散斑那样依赖统计匹配。所以精度更高,尤其适合高精度3D扫描。
我的经验:如果你做的是静态物体扫描(比如人脸建模、文物数字化),编码结构光是首选。但如果是动态场景(比如手势识别、机器人导航),散斑结构光或者ToF更合适。别拿编码光去做实时应用,帧率跟不上。
二、ToF(飞行时间法)原理
ToF的原理更直接:发射光脉冲,测量光往返的时间,直接算出距离。公式很简单:距离 = 光速 × 飞行时间 / 2。
但实际实现上,ToF分两大流派:iToF和dToF。这两者差别很大,选型时一定要搞清楚。
1. iToF(间接飞行时间法)
iToF不直接测量时间,而是测量发射光和接收光之间的相位差。通过调制连续波(通常是正弦波或方波),用四个相位采样(0°、90°、180°、270°)来解算相位偏移,再换算成距离。
iToF的关键参数:
- 调制频率:决定了不模糊距离范围。比如20MHz调制,不模糊距离是7.5米。频率越高,精度越高,但测量范围越短。
- 解相位算法:四个相位采样后,通过反正切函数算出相位差。公式:
φ = atan2(Q, I),其中I和Q是同相和正交分量。 - 多频调制:为了扩大测量范围,iToF通常用两个或多个频率调制,然后通过差频解算绝对距离。
避坑指南:我曾经在一个项目中,iToF相机在强光下深度数据全是噪声。原因是环境光中的红外成分干扰了相位测量。后来加了带通滤光片,并且提高了调制光功率,才勉强能用。记住:iToF对环境光非常敏感,室内用还行,室外强光下基本废掉。
2. dToF(直接飞行时间法)
dToF就简单粗暴了:直接发射一个短脉冲(皮秒级),用单光子雪崩二极管(SPAD)阵列记录每个光子到达的时间。每个像素就是一个“计时器”。
dToF的核心组件:
- SPAD像素:工作在盖革模式,一个光子就能触发雪崩,灵敏度极高
- TDC(时间数字转换器):记录光子到达的精确时间,分辨率通常在几十皮秒
- 直方图累加:多次测量后,统计光子到达时间的直方图,峰值对应真实距离
dToF的优势很明显:
- 抗环境光能力强(因为只接收与发射脉冲同步的光子)
- 测量范围远(可达几十米甚至上百米)
- 多路径干扰小(直方图可以区分一次反射和多次反射)
但dToF也有短板:SPAD阵列分辨率做不高(目前主流是QVGA),而且每个像素需要TDC,芯片面积大、成本高。
选型建议:如果你做手机人脸识别、AR/VR手势交互,iToF够用,成本低。如果你做车载激光雷达、扫地机导航、或者远距离测距,dToF是唯一选择。我去年帮客户选型做AGV避障,一开始选了iToF,结果在仓库里被货架反光干扰得不行,最后换成了dToF才搞定。
三、结构光 vs ToF:怎么选?
我整理了一个对比表,方便你快速决策:
| 维度 | 结构光(散斑) | 结构光(编码) | iToF | dToF |
|---|---|---|---|---|
| 测量范围 | 0.3-5米 | 0.1-3米 | 0.1-10米 | 0.1-100米+ |
| 精度 | 毫米级 | 亚毫米级 | 厘米级 | 厘米级 |
| 抗环境光 | 弱 | 弱 | 中 | 强 |
| 动态场景 | 中 | 差 | 好 | 好 |
| 分辨率 | 高(可达1080p) | 高 | 中(VGA~720p) | 低(QVGA) |
| 成本 | 低 | 中 | 中 | 高 |
| 典型应用 | 人脸识别、体感 | 3D扫描、检测 | 手势、AR/VR | 车载、机器人 |
嗯,这里要注意:没有完美的技术,只有合适的场景。我见过太多人拿着结构光去做户外导航,或者拿着dToF去做高精度扫描,结果都不理想。选型前,先把你的应用场景、工作距离、环境光照、精度要求列清楚,再对照这张表选。
四、核心逻辑框架图
下面我用一张SVG图,把结构光和ToF的核心逻辑串起来,方便你理解整个知识体系:
这张图把结构光和ToF的脉络理清楚了。你从顶部往下看,先选大类,再看子类,最后对应到应用场景。我建议你把这个图打印出来贴在工位上,选型时扫一眼就心里有数。
最后说一句:理论归理论,真正落地时,你还会遇到很多实际问题——标定精度、温度补偿、多机干扰、运动模糊...这些我在后面的章节会逐一展开。今天先把原理吃透,后面实战才不会慌。
公众号:蓝海资料掘金营,微信deep3321