深度感知技术原理:三角测量、ToF、结构光与双目立体视觉
大家好,我是你们的老朋友。今天咱们来聊聊深度感知技术的四大核心原理。说实话,这四种方法我都在实际项目中摸爬滚打过,踩过不少坑,也积累了一些心得。咱们一个一个来看。
一、三角测量原理——最朴素的测距思想
三角测量,说白了就是利用几何关系算距离。你想想看,如果我们知道两个点之间的基线长度,以及目标物体相对于这两个点的角度,那距离不就出来了嘛。
我在做工业检测项目时,经常用这个原理。比如测量传送带上零件的尺寸,架两台相机,标定好基线距离,然后通过特征点匹配就能算出深度。
核心公式:
Z = (f × B) / d
其中 Z 是深度,f 是焦距,B 是基线长度,d 是视差。
我的经验:基线长度很关键。基线太短,精度不够;基线太长,视野重叠区域变小。我一般建议基线取工作距离的 1/10 到 1/5。
二、飞行时间法(ToF)——直接测光速
ToF 的原理其实特别直观:发射一束光,等它反射回来,算时间差。光速是已知的,时间差乘以光速再除以二,就是距离。
嗯,这里要注意。ToF 分为直接 ToF 和间接 ToF 两种。直接 ToF 用脉冲光,间接 ToF 用连续波调制。我最早接触 ToF 是在手机的人脸识别模组上,那时候觉得这东西真神奇,后来发现它也有短板。
避坑指南:我曾经在一个户外项目中用 ToF 传感器,结果大太阳底下直接失效了。环境光干扰太强,尤其是红外成分多的场景。所以 ToF 更适合室内或弱光环境。
| 参数 | 直接 ToF | 间接 ToF |
|---|---|---|
| 精度 | 厘米级 | 毫米级 |
| 抗干扰 | 较强 | 较弱 |
| 典型应用 | 激光雷达 | 手机深度相机 |
三、结构光原理——投影编码图案
结构光,说白了就是主动投射已知图案到物体表面,然后通过相机观察图案的变形来推算深度。我习惯把结构光分成两类:散斑结构和条纹结构。
散斑结构光,就是投射随机斑点,通过匹配斑点位置算视差。苹果的 Face ID 用的就是这种。条纹结构光呢,投射的是正弦条纹,通过相位解算得到高精度深度。
我个人觉得,结构光最大的优势是精度高,尤其是在近距离(1米以内)可以做到亚毫米级。但缺点也很明显——怕反光。我在做玻璃瓶尺寸测量时,结构光直接废了,镜面反射让图案完全变形。
关键步骤:
- 投影编码图案到物体表面
- 相机采集变形后的图案
- 解码图案,计算每个像素的偏移量
- 根据标定参数,将偏移量转换为深度值
四、双目立体视觉原理——模拟人眼
双目立体视觉,其实就是模仿人眼的工作方式。两个相机从不同角度拍摄同一场景,然后找到左右图像中的对应点,计算视差,最后得到深度。
这里有个核心问题:怎么找到对应点?也就是立体匹配。我做过不少立体匹配的算法优化,说实话,这是整个流程中最难的一环。纹理丰富的区域还好,遇到白墙这种无纹理区域,匹配基本就废了。
我的建议:如果场景纹理不足,可以考虑主动投射纹理。我在一个仓储机器人项目中,就是在双目相机上加了一个红外散斑投射器,效果立竿见影。
为什么会这样?因为立体匹配本质上是一个病态问题。同一个像素可能在另一张图里有多个候选点,怎么选?这就需要用到极线约束、唯一性约束、连续性约束等条件来缩小搜索范围。
知识体系总览
下面这张图,是我自己整理的四种深度感知技术的对比框架。你可以看到,它们各有各的适用场景,没有哪一种能通吃所有情况。
你看,没有银弹。每种技术都有自己的舒适区。我在做项目选型时,一般会先问三个问题:测量距离是多少?环境光照条件如何?目标物体表面特性怎样?这三个问题问完,基本就能锁定一到两种候选方案了。
总结一下:
- 三角测量:经典可靠,适合远距离,但需要特征点
- ToF:直接快速,适合中距离,但怕环境光
- 结构光:精度之王,适合近距离,但怕反光
- 双目立体视觉:灵活通用,适合中距离,但依赖纹理
好了,这四种原理咱们就聊到这儿。下一节咱们会深入讲讲每种技术的具体实现细节和代码示例。记住,理论是基础,但真正上手做项目时,你会发现坑比想象的多得多。保持耐心,多动手调试,慢慢就熟了。