深度图生成方法概览
说到深度图生成,我最早接触这个领域是在做3D结构光项目的时候。那时候刚入行,觉得深度图嘛,不就是一张灰白图片嘛。后来踩了不少坑才明白——深度图是计算机视觉里最基础也最核心的数据之一。没有它,三维重建、SLAM、AR这些应用都玩不转。
今天咱们把主流的四种深度图生成方法捋一遍。说白了,就是看看这些方法各自怎么工作的,适合什么场景,有什么坑要注意。
核心观点:没有万能的方法,只有最适合场景的方案。选方法前,先搞清楚你的应用要什么——精度?速度?成本?还是环境适应性?
四种方法速览
我习惯把这四种方法分成两类:主动式和被动式。结构光和ToF是自己发射信号去探测,属于主动式。立体匹配和单目深度估计是靠摄像头拍回来的图像算出来的,属于被动式。
下面这张图是我自己画的,把四种方法的核心逻辑串起来了:
立体匹配(Stereo Matching)
立体匹配的原理其实很直观——模拟人眼。两只眼睛看同一个物体,角度不同,看到的图像位置就有差异。这个差异就是视差,有了视差就能算出深度。
我记得刚做立体匹配那会儿,最头疼的就是纹理缺失的问题。你想想看,一面白墙,左右两张图看起来一模一样,怎么匹配?根本找不到对应点。
我的经验:做立体匹配时,尽量保证场景里有足够的纹理信息。如果场景太单调,可以考虑投影一些随机纹理光斑。我在一个工业检测项目里就这么干过,效果立竿见影。
立体匹配的流程大致分四步:
- 代价计算——比较左右图像中像素块的相似度
- 代价聚合——把局部信息整合起来,减少噪声
- 视差计算——选相似度最高的位置作为匹配点
- 视差优化——后处理,去掉错误匹配
常用的算法有SGM(半全局匹配)和基于CNN的端到端方法。SGM在嵌入式设备上跑得动,CNN方法精度更高但需要GPU。
注意:立体匹配对光照很敏感。左右两张图的曝光不一致,匹配质量会直线下降。我曾经在一个户外项目里吃过这个亏,后来加了自动曝光同步才解决。
结构光(Structured Light)
结构光的方法,说白了就是主动投影已知图案,然后用摄像头拍下图案的变形情况,通过三角测量算出深度。
最典型的例子就是微软的Kinect v1。它投影的是红外散斑,摄像头拍到的散斑位置变了,就能算出每个点的深度。
结构光的优势很明显:
- 精度高,能达到亚毫米级别
- 不受纹理影响,白墙也能测
- 计算量相对小
但缺点也很突出:
- 室外基本不能用——太阳光里的红外成分会淹没投影信号
- 投影距离有限,远了图案就散了
- 对反光表面效果差
避坑指南:我曾经做过一个结构光的人脸识别项目,一开始用的散斑投影,结果发现眼镜片反光导致深度图全是空洞。后来换了编码条纹投影,配合多帧融合,才把这个问题解决掉。
飞行时间法(ToF)
ToF的原理更直接——发射光脉冲,测量光往返的时间。光速是已知的,时间测出来了,距离就出来了。
ToF传感器现在在手机上很常见,比如iPhone的LiDAR。它有几个让我特别喜欢的特点:
- 计算简单,不需要复杂的匹配算法
- 帧率高,能做实时深度流
- 距离范围大,几米到几十米都能测
但ToF也有自己的问题。我印象最深的是多路径干扰——光在场景里来回反射,传感器收到的不只是直接反射回来的光,还有二次反射的,这就导致深度值偏大。
| 方法 | 精度 | 范围 | 帧率 | 室外可用 |
|---|---|---|---|---|
| 立体匹配 | 中等(mm-cm) | 取决于基线 | 中等 | ✅ 可用 |
| 结构光 | 高(亚mm) | 0.1-5m | 高 | ❌ 受限 |
| ToF | 中等(cm级) | 0.1-50m | 高 | ✅ 可用 |
| 单目深度估计 | 低-中 | 无限制 | 取决于模型 | ✅ 可用 |
单目深度估计(Monocular Depth Estimation)
这个方法最神奇——只用一张图,就能算出深度。听起来像变魔术对吧?其实它靠的是深度学习,从大量数据里学出了"什么物体大概多远"的先验知识。
我刚开始接触单目深度估计时,觉得这东西不靠谱。一张图怎么可能知道深度?后来试了MiDaS和DPT这些模型,发现效果还真不错。尤其是场景里有明显的透视关系时,比如走廊、街道,深度估计的准确度相当高。
但它的局限性也很明显:
- 尺度模糊——单目深度估计只能给出相对深度,不知道绝对距离
- 对没见过的东西效果差——训练集里没有的物体,深度估计会乱来
- 对光照和纹理敏感
我的建议:单目深度估计最适合做辅助信息。比如在SLAM里,它可以帮助初始化地图。或者在AR里,它能让虚拟物体大致放在正确的位置上。但如果你需要高精度的绝对深度,还是老老实实用主动式方法吧。
怎么选?
嗯,说了这么多,到底该用哪种?我个人的经验是:
- 室内、高精度、短距离 → 结构光
- 室外、中远距离、实时性要求高 → ToF
- 硬件成本敏感、有纹理的场景 → 立体匹配
- 只有单张图、不需要绝对尺度 → 单目深度估计
当然,现在很多方案是融合使用的。比如手机上的深度系统,往往是ToF加双目再加AI,三种方法互补。这也是未来的趋势——没有一种方法能搞定所有场景,但组合起来就能覆盖大部分情况。