深度相机原理:结构光、ToF、双目立体视觉原理对比

做RGBD相机标定,你首先得搞清楚一件事:深度是怎么来的?

市面上主流的深度相机,说白了就三种方案——结构光、ToF、双目立体视觉。我这些年三种都折腾过,踩过不少坑。今天咱们就掰开揉碎,把它们的原理、优缺点、适用场景聊透。

一、结构光:投影编码,三角测距

结构光的思路很直接:我主动往场景里投一个已知图案,然后用相机拍它。图案被物体表面调制后会发生变形,通过分析变形量就能算出深度。

举个例子,你拿一个手电筒照墙,手电筒和墙的距离变了,光斑大小也会变。结构光就是把这个思路做到极致——它投的不是简单光斑,而是精心设计的编码图案。

核心公式: 深度 Z = (基线距离 B × 焦距 f) / (视差 d)

嗯,和双目视觉的公式长得一模一样。区别在于:结构光的「视差」是通过图案匹配算出来的,而双目是靠自然纹理。

我在项目中用过Intel RealSense D415,它就是典型的主动立体视觉——本质上还是结构光,只不过把投影器和双目相机结合了。当时做机械臂抓取,遇到一个坑:强光下结构光基本废掉。户外阳光直射时,投影图案被环境光淹没,深度图全是黑洞。后来我加了个带通滤光片,勉强能用,但代价是帧率掉了一半。

避坑指南: 我曾经在玻璃幕墙前吃过亏。结构光遇到透明、高反光表面,深度数据会完全乱掉。如果你要测玻璃杯、镜面物体,趁早换方案。

二、ToF:光速飞行,直接测距

ToF(Time of Flight)的思路更暴力:我发射一束光,测它飞出去再反射回来的时间。光速是已知的,时间乘以光速再除以2,就是距离。

听起来简单对吧?但实际工程里,直接测光飞行时间太难了——光速太快,1纳秒才走30厘米。所以消费级ToF相机用的都是间接飞行时间(iToF),通过调制光的相位差来推算距离。

参数 iToF(间接) dToF(直接)
测距原理 相位差 脉冲飞行时间
典型芯片 PMD、EPC660 ST VL53L1X
精度 厘米级 毫米级(近距离)
适用场景 室内、中远距离 手机、短距测距

我最早接触ToF是2016年,用微软Kinect v2做人体姿态估计。那玩意儿在室内确实好用——不受纹理影响,纯色墙面也能出深度。但有个致命问题:多路径干扰。如果场景里有多个反射面,光信号会串扰,深度值就飘了。我记得有一次测一个金属柜子,深度图边缘全是毛刺,后来发现是柜门反射造成的。

注意: ToF相机普遍有「飞点」现象。运动物体边缘的深度值会突变,因为一个像素同时收到了前景和背景的反射光。做运动捕捉时,这个坑特别明显。

三、双目立体视觉:被动匹配,靠纹理吃饭

双目视觉是最「朴素」的方案——我不主动发光,全靠两个相机拍到的图像,找对应点,算视差。你想想看,这其实模拟了人眼的工作原理。

核心流程就三步:

  1. 图像校正——把左右图对齐到同一平面
  2. 立体匹配——找左右图中同一个点的位置差
  3. 三角测量——用视差算深度

这里面最难的步骤是第二步。我当年做双目测距时,最头疼的就是弱纹理区域。一面白墙,左右图看起来一模一样,算法根本找不到匹配点。后来我试过加纹理投影仪,但那就变成结构光了。

个人经验: 双目视觉的精度,很大程度上取决于基线距离。基线越长,深度分辨率越高,但视野重叠区域会变小。我做过一个实验:基线从5cm拉到20cm,深度误差从3%降到了1.2%。但代价是近处物体直接出了视场。

四、三种方案的核心对比

我把它们的关键差异整理成了一张表,方便你快速决策:

维度 结构光 ToF 双目立体视觉
主动/被动 主动(投影) 主动(发光) 被动
精度 高(亚毫米级) 中(厘米级) 中高(依赖纹理)
抗环境光
弱纹理表现
帧率 低(30fps) 高(60-90fps) 中(30fps)
功耗
典型代表 Kinect v1, RealSense Kinect v2, iPhone X ZED, 人眼

看到这张表,你应该能理解为什么不同场景要选不同方案了。我个人习惯是:室内静态场景用结构光,动态捕捉用ToF,户外环境用双目。当然,现在也有混合方案——比如苹果的LiDAR就是ToF+结构光的融合。

五、一张图看懂三种原理

下面这张SVG图,把三种方案的核心逻辑画出来了。你看一眼就能明白它们的本质区别:

三种深度相机原理对比 结构光 投影编码图案 相机拍摄变形图案 三角测量算深度 投影器 → 物体 相机 ← 物体 精度高,怕强光 怕透明/反光 ToF 发射调制光 测量相位差/飞行时间 直接算距离 发射光脉冲 接收反射光 帧率高,不受纹理影响 多路径干扰,精度一般 双目立体视觉 左右相机同时拍摄 立体匹配找对应点 三角测量算深度 目标点 被动方案,功耗低 弱纹理区域失效

这张图里,结构光走的是「主动投影+三角测量」路线,ToF走的是「主动发光+直接测距」路线,双目走的是「被动拍摄+三角测量」路线。说白了,结构光和双目本质都是三角测量,区别在于一个自己带灯,一个靠天吃饭。

六、实战中的选型建议

说了这么多理论,最后给点实在的。如果你现在要选一款深度相机做项目,我的建议是:

  • 做AR/VR手势识别 → 选ToF。帧率高,延迟低,手部快速运动也能跟上。
  • 做3D扫描建模 → 选结构光。精度高,细节丰富,但物体不能动。
  • 做自动驾驶/机器人导航 → 选双目。户外抗光性好,功耗低,适合长时间运行。
  • 做工业检测 → 看情况。透明物体用ToF,高精度测量用结构光,大范围用双目。
一个小技巧: 如果你预算有限又想快速验证,可以先用双目+主动纹理投影。我早期做项目时就这么干过——买两个工业相机,加一个便宜的激光投影器,效果居然还不错。当然,标定过程会麻烦一些。

嗯,关于三种深度相机原理的对比,今天就聊到这儿。下一节我们会深入结构光的标定方法,到时候我会把实际项目中遇到的标定参数调优经验全部分享出来。


公众号:蓝海资料掘金营,微信deep3321