cv.cm

AI · AI绘画

深度图是什么?AI怎么从一张照片生成深度图?

阅读约 6 分钟

简短回答

深度图是一张灰度图,每个像素的亮度代表它到相机的距离,而不是颜色。Depth Anything 等AI模型通过识别形状、透视和遮挡,从单张照片估计出深度图。大多数模型给出的是相对深度(哪里更近),而不是真实的米数,这对 3D 视差、背景虚化和 ControlNet 已经够用。

打开深度图生成

一张图看懂深度图

拍一张人站在大楼前的照片。这张照片的深度图和它宽高相同,但每个像素里存的是一个数:那个点离相机有多远。显示成图像时,人是一种灰度,大楼是另一种,天空则是最极端的一种。

哪种灰度代表近,并没有统一规则,要看你所用每个工具的约定:

约定近处看起来远处看起来常见场合
逆深度(类视差)亮暗大多数AI深度估计模型、ControlNet 深度图
距离(z 深度)暗亮3D 渲染通道、雾效、部分游戏引擎
度量深度数值小(米)数值大机器人、AR、LiDAR、16 位或浮点文件
伪彩色映射(Turbo、Magma)色板的一端色板的另一端仅用于可视化预览,不适合继续处理

如果 3D 效果看起来是反的,背景朝你扑过来,说明深度图的约定相反。把图像反相(白变黑)通常就能解决。

AI怎样从一张照片估计深度

有双摄像头或 LiDAR 传感器的手机可以测量深度,普通的单张照片却不行:同一张画面既可能是近处的玩具车,也可能是远处的真车。单目深度估计的做法和人一样,靠学来的线索。

  • 透视:道路、铁轨等平行线在远处汇聚。
  • 已知大小:人脸、门、汽车都有典型尺寸,它在画面中的大小暗示了距离。
  • 遮挡:挡住别的物体的,就在前面。
  • 纹理密度与雾霾:越远,草地和瓷砖看起来越细密,颜色也越淡。
  • 明暗和焦外模糊,它们提示了表面形状。

深度网络用数以百万计、答案已知或已估计出的图像来训练。目前许多工具使用的 Depth Anything V2,先从精确的合成(渲染)图像中学习,再从由更大的教师模型标注的海量真实照片中学习。作者选择合成数据,部分原因是真实的深度传感器测不准透明和反光表面,所以真实标签恰恰在照片最难处理的地方噪声最大。

模型处理的是缩放后的图像副本(Depth Anything V2 训练时短边为 518 像素),为每个像素输出一个值。工具再把它放大回照片尺寸,并映射到 0 至 255,得到 8 位图像。

相对深度与度量深度

大多数通用深度模型预测的是相对深度。例如 Depth Anything V2 的基础模型预测的是仿射不变的逆深度。通俗地说,远近顺序和比例是有意义的,但缩放和偏移未知。深度图能告诉你人在大楼前面,却不能告诉你人离你 3.2 米。

这种设计源自在许多相机和单位各不相同的数据集上训练。MiDaS 的工作表明,忽略尺度的损失函数可以让模型同时从所有数据集中学习,因此在随机的网络照片上稳健得多。

度量深度模型是针对“米”微调的版本,通常只针对一类场景(室内房间或街道驾驶)。需要测量或做机器人应用时用它们。创意类用途则要用相对深度,因为它泛化更好,而且效果只需要远近顺序正确。

深度图能做什么

用途深度如何使用提示
2.5D 视差视频虚拟相机移动时,近处像素比远处像素移动得多镜头移动幅度要小,才能掩盖被拉伸的边缘
人像模式虚化离对焦平面越远,虚化越强边缘要羽化;头发常会和背景一起被虚化
ControlNet 深度深度图引导新生成图像的布局使用“近处亮”的深度图;降低控制权重可获得更多自由度
3D 与 AR像素被推出为网格或点云相对深度给出形状,而非真实尺寸
雾效、重新打光、合成深度作为基于距离的效果蒙版工具支持时,导出 16 位

例如 cv.cm 的深度图工具可以在浏览器里把照片变成灰度图(近处为亮)或彩色预览,cv.cm 的照片转视频工具则用同类深度图让虚拟相机在静态照片中穿行。在后一种情况下,是镜头在动、主体不动:这是视差,而不是让人物动起来的模型。

ControlNet 证明,扩散模型可以用边缘、姿态、分割和深度等条件来引导。深度条件保留构图(前景和背景在哪里),而提示词则改变风格、光线或材质。

AI深度估计在哪里会出错

  • 玻璃、镜子和水面:模型可能给出倒影的深度,或玻璃后面物体的深度。
  • 天空和极远处:全都落在远端,所以那里的视差是平的。
  • 细小结构:头发、栅栏、树枝和电线在模型的工作分辨率下会与背景糊在一起。
  • 画作、海报和屏幕:对一幅画拍的照片,可能被赋予虚假的 3D 深度,因为画里的内容看起来像一个真实场景。
  • 非常规视角:垂直向下的航拍、微距照片和鱼眼图像在训练数据中比较少见。
  • 远近交界的边缘:深度图在那里是平滑过渡的,所以视差效果会把像素拉成一条橡胶般的条带。

怎样得到更好的深度图

  1. 选择前景、中景、背景层次分明的照片。平淡的场景,例如一张脸贴着墙占满画面,深度可用的信息很少。
  2. 在你关心的区域避开强反光和大面积窗户。
  3. 确认下一个工具读取的是同一种约定。如果近处该亮却是暗的,就把深度图反相。
  4. 让深度图与照片保持相同的尺寸和裁剪。裁剪或缩放方式不同的深度图无法对齐。
  5. 做视差之前,把深度图略微模糊或向外扩展一点,以减少边缘撕裂,并让镜头移动保持轻柔。

常见问题

深度图和法线贴图是一回事吗?

不是。深度图存的是每个像素的距离;法线贴图用 RGB 颜色存的是每个表面朝向的方向,用于光照计算。从深度图大致可以推出法线,反过来则会丢失尺度。

AI能给任何照片生成深度图吗?

可以,单目模型总会输出一张深度图,但质量取决于场景。远近物体层次清楚的照片效果好;玻璃、镜子、平整的墙面和翻拍的画面则不行。

深度图和视差图有什么区别?

视差是同一个点在两张立体图像之间的位移量,越近的物体位移越大,所以它的行为就像逆深度。许多AI模型输出的就是类视差的逆深度,这就是近处物体显得更亮的原因。

我的视差视频为什么在主体边缘出现拉伸?

虚拟相机移动时,会露出原照片里被主体挡住的背景。那里本来没有像素,渲染器只能拉伸周围的像素。减小镜头移动幅度、把深度边缘柔化,都能缓解这个问题。

iPhone 的人像模式用到深度图吗?

是的。带双摄像头或深度传感器的手机会记录深度图或视差图,用来虚化背景;很多手机还会用机器学习进一步优化。深度信息可以和图像一起存进照片文件。

全部AI教程