深度相机原理:结构光、ToF、双目立体视觉原理对比
做RGBD相机标定,你首先得搞清楚一件事:深度是怎么来的?
市面上主流的深度相机,说白了就三种方案——结构光、ToF、双目立体视觉。我这些年三种都折腾过,踩过不少坑。今天咱们就掰开揉碎,把它们的原理、优缺点、适用场景聊透。
一、结构光:投影编码,三角测距
结构光的思路很直接:我主动往场景里投一个已知图案,然后用相机拍它。图案被物体表面调制后会发生变形,通过分析变形量就能算出深度。
举个例子,你拿一个手电筒照墙,手电筒和墙的距离变了,光斑大小也会变。结构光就是把这个思路做到极致——它投的不是简单光斑,而是精心设计的编码图案。
嗯,和双目视觉的公式长得一模一样。区别在于:结构光的「视差」是通过图案匹配算出来的,而双目是靠自然纹理。
我在项目中用过Intel RealSense D415,它就是典型的主动立体视觉——本质上还是结构光,只不过把投影器和双目相机结合了。当时做机械臂抓取,遇到一个坑:强光下结构光基本废掉。户外阳光直射时,投影图案被环境光淹没,深度图全是黑洞。后来我加了个带通滤光片,勉强能用,但代价是帧率掉了一半。
二、ToF:光速飞行,直接测距
ToF(Time of Flight)的思路更暴力:我发射一束光,测它飞出去再反射回来的时间。光速是已知的,时间乘以光速再除以2,就是距离。
听起来简单对吧?但实际工程里,直接测光飞行时间太难了——光速太快,1纳秒才走30厘米。所以消费级ToF相机用的都是间接飞行时间(iToF),通过调制光的相位差来推算距离。
| 参数 | iToF(间接) | dToF(直接) |
|---|---|---|
| 测距原理 | 相位差 | 脉冲飞行时间 |
| 典型芯片 | PMD、EPC660 | ST VL53L1X |
| 精度 | 厘米级 | 毫米级(近距离) |
| 适用场景 | 室内、中远距离 | 手机、短距测距 |
我最早接触ToF是2016年,用微软Kinect v2做人体姿态估计。那玩意儿在室内确实好用——不受纹理影响,纯色墙面也能出深度。但有个致命问题:多路径干扰。如果场景里有多个反射面,光信号会串扰,深度值就飘了。我记得有一次测一个金属柜子,深度图边缘全是毛刺,后来发现是柜门反射造成的。
三、双目立体视觉:被动匹配,靠纹理吃饭
双目视觉是最「朴素」的方案——我不主动发光,全靠两个相机拍到的图像,找对应点,算视差。你想想看,这其实模拟了人眼的工作原理。
核心流程就三步:
- 图像校正——把左右图对齐到同一平面
- 立体匹配——找左右图中同一个点的位置差
- 三角测量——用视差算深度
这里面最难的步骤是第二步。我当年做双目测距时,最头疼的就是弱纹理区域。一面白墙,左右图看起来一模一样,算法根本找不到匹配点。后来我试过加纹理投影仪,但那就变成结构光了。
四、三种方案的核心对比
我把它们的关键差异整理成了一张表,方便你快速决策:
| 维度 | 结构光 | ToF | 双目立体视觉 |
|---|---|---|---|
| 主动/被动 | 主动(投影) | 主动(发光) | 被动 |
| 精度 | 高(亚毫米级) | 中(厘米级) | 中高(依赖纹理) |
| 抗环境光 | 差 | 中 | 好 |
| 弱纹理表现 | 好 | 好 | 差 |
| 帧率 | 低(30fps) | 高(60-90fps) | 中(30fps) |
| 功耗 | 中 | 高 | 低 |
| 典型代表 | Kinect v1, RealSense | Kinect v2, iPhone X | ZED, 人眼 |
看到这张表,你应该能理解为什么不同场景要选不同方案了。我个人习惯是:室内静态场景用结构光,动态捕捉用ToF,户外环境用双目。当然,现在也有混合方案——比如苹果的LiDAR就是ToF+结构光的融合。
五、一张图看懂三种原理
下面这张SVG图,把三种方案的核心逻辑画出来了。你看一眼就能明白它们的本质区别:
这张图里,结构光走的是「主动投影+三角测量」路线,ToF走的是「主动发光+直接测距」路线,双目走的是「被动拍摄+三角测量」路线。说白了,结构光和双目本质都是三角测量,区别在于一个自己带灯,一个靠天吃饭。
六、实战中的选型建议
说了这么多理论,最后给点实在的。如果你现在要选一款深度相机做项目,我的建议是:
- 做AR/VR手势识别 → 选ToF。帧率高,延迟低,手部快速运动也能跟上。
- 做3D扫描建模 → 选结构光。精度高,细节丰富,但物体不能动。
- 做自动驾驶/机器人导航 → 选双目。户外抗光性好,功耗低,适合长时间运行。
- 做工业检测 → 看情况。透明物体用ToF,高精度测量用结构光,大范围用双目。
嗯,关于三种深度相机原理的对比,今天就聊到这儿。下一节我们会深入结构光的标定方法,到时候我会把实际项目中遇到的标定参数调优经验全部分享出来。
公众号:蓝海资料掘金营,微信deep3321