深度感知技术原理:三角测量、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米以内)可以做到亚毫米级。但缺点也很明显——怕反光。我在做玻璃瓶尺寸测量时,结构光直接废了,镜面反射让图案完全变形。

关键步骤:

  1. 投影编码图案到物体表面
  2. 相机采集变形后的图案
  3. 解码图案,计算每个像素的偏移量
  4. 根据标定参数,将偏移量转换为深度值

四、双目立体视觉原理——模拟人眼

双目立体视觉,其实就是模仿人眼的工作方式。两个相机从不同角度拍摄同一场景,然后找到左右图像中的对应点,计算视差,最后得到深度。

这里有个核心问题:怎么找到对应点?也就是立体匹配。我做过不少立体匹配的算法优化,说实话,这是整个流程中最难的一环。纹理丰富的区域还好,遇到白墙这种无纹理区域,匹配基本就废了。

我的建议:如果场景纹理不足,可以考虑主动投射纹理。我在一个仓储机器人项目中,就是在双目相机上加了一个红外散斑投射器,效果立竿见影。

为什么会这样?因为立体匹配本质上是一个病态问题。同一个像素可能在另一张图里有多个候选点,怎么选?这就需要用到极线约束、唯一性约束、连续性约束等条件来缩小搜索范围。

知识体系总览

下面这张图,是我自己整理的四种深度感知技术的对比框架。你可以看到,它们各有各的适用场景,没有哪一种能通吃所有情况。

深度感知技术四大原理对比 三角测量 基线 + 角度 → 深度 精度:中等 范围:0.1m - 100m 典型:双目、激光三角 依赖特征匹配 飞行时间法 光速 × 时间差 / 2 精度:厘米级 范围:0.1m - 10m 典型:LiDAR、手机ToF 怕强环境光 结构光 投影图案 → 变形 → 深度 精度:亚毫米级 范围:0.1m - 5m 典型:Face ID、Kinect 怕镜面反射 双目立体视觉 左右匹配 → 视差 → 深度 精度:中等 范围:0.1m - 50m 典型:机器人、自动驾驶 依赖纹理 选型建议 • 高精度近距离(<1m):结构光 > 双目 > ToF > 三角测量 • 中距离(1-5m):双目 ≈ ToF > 结构光 > 三角测量 • 远距离(>5m):三角测量(激光)> 双目 > ToF • 户外强光:三角测量 > 双目 > ToF > 结构光 • 弱光/无光:ToF > 结构光(主动)> 双目(需补光)

你看,没有银弹。每种技术都有自己的舒适区。我在做项目选型时,一般会先问三个问题:测量距离是多少?环境光照条件如何?目标物体表面特性怎样?这三个问题问完,基本就能锁定一到两种候选方案了。

总结一下:

  • 三角测量:经典可靠,适合远距离,但需要特征点
  • ToF:直接快速,适合中距离,但怕环境光
  • 结构光:精度之王,适合近距离,但怕反光
  • 双目立体视觉:灵活通用,适合中距离,但依赖纹理

好了,这四种原理咱们就聊到这儿。下一节咱们会深入讲讲每种技术的具体实现细节和代码示例。记住,理论是基础,但真正上手做项目时,你会发现坑比想象的多得多。保持耐心,多动手调试,慢慢就熟了。

专注资料整理