2026-09-12 · 2026-09-13 更新

16 位深度图:修复条带断层并验证 PNG 精度

深度图出现阶梯状条带或前后颠倒?通过可复现的 8 位与 16 位 PNG 实验、文件检查脚本和 Blender 导入清单,逐步找出精度丢失的环节。

16 位深度图:修复条带断层并验证 PNG 精度

最后更新:2026 年 9 月 13 日。下文的编码测量使用合成渐变,并不是 AI 深度估计精度的基准测试。

深度图在浏览器里看起来很平滑,可一用于置换,表面就出现一级一级的台阶。你改成导出“16 位 PNG”,结果毫无变化。在重新生成图像或提高网格密度之前,先查清数值是在哪一步变成阶梯状的。仅凭文件扩展名,无法回答这个问题。

快速回答:如何避免深度图出现条带?

如果下一个应用支持,请使用直接从模型浮点深度值导出的 16 位灰度 PNG。不要让深度图经过 8 位预览、截图、JPEG 或照片压缩工具。然后在测试置换之前,检查文件的采样深度、数值范围和不同数值的数量。

16 位容器无法找回已经丢失的精度。在我们可复现的实验中,直接编码为 16 位的渐变保留了 4,096 个不同数值,而先存为 8 位再另存为 16 位的渐变只剩 256 个。两个 16 位文件报告的采样深度相同,数值范围也都是完整的。

这套方法能解决什么,不能解决什么

这套流程处理的是导出精度和常见的导入错误。它不能把 AI 估计的相对深度变成实测距离,不能还原被遮挡的几何形状,不能修正错误的轮廓,也不能保证得到可用于加工制造的浮雕。场景深度估计和专门雕刻的高度场,用途并不相同。

基础概念请阅读我们的深度图入门。需要实际导出时,深度图生成器默认输出 16 位灰度 PNG,会标明白色代表近处还是远处,并提供反转选项。

它的 AI 处理路径会一直保留浮点数值,直到最后的编码步骤。如果工具提示改用了基于边缘和模糊的备用算法,该算法从 8 位数值起步,因此即使导出 16 位 PNG,最多也只有 256 个层级。

应该选择 8 位、16 位还是浮点深度?

下一步任务 支持时优先选择 继续之前要检查
快速蒙版或粗略预览 8 位灰度 PNG 效果能否接受肉眼可见的数值台阶
基于归一化深度的平滑置换 直接导出的 16 位灰度 PNG 源数据是否早已降为 8 位
需要原始浮点数值的流程 应用文档指定的浮点格式,通常是 EXR 单位、无效值、归一化方式和导入约定
只接受 8 位图像的工具 保留高精度母版,另导出一份 8 位副本 其预览和最终输出能否保留足够细节

PNG 的采样深度按每个通道计算,而不是把所有通道加起来。所谓“32 位”RGBA PNG,是四个通道各存 8 位,所以把同一个灰度值复制到每个通道,依然只有 256 个层级。W3C PNG 规范规定灰度图像的采样深度可以是 1、2、4、8 和 16 位;PNG 没有浮点采样格式。

对比 8 位灰度的 256 个层级与 16 位灰度的 65,536 个层级的示意图

这张图展示的是编码容量,不代表模型精度,也不代表每张图像都必须包含这么多数值。一个完全平坦的表面只用一个数值也完全正常。文件更大,同样不能证明估计更好。

我们的 8 位与 16 位实验测量了什么?

我们创建了一条 4,096 × 64 的水平渐变,从 0 到 1 均匀分布 4,096 个数值。然后用 NumPy 和 Pillow 以三种方式编码,重新打开每个 PNG,测量它的文件头、不同数值数量、数值范围,以及相对原始渐变的最大归一化误差。

编码路径 PNG 采样深度 解码后的不同数值 最大归一化误差 文件字节数
浮点渐变 → 8 位 8 256 0.001953602 528
浮点渐变 → 16 位 16 4,096 0.000007602 848
浮点渐变 → 8 位 → 16 位 16 256 0.001953602 819

第三条路径把每个 8 位整数乘以 257。这样 0 仍是 0,255 变成 65,535,所以数值范围看起来没有问题。但第一次转换时丢失的中间值,依然无法重建。这正是只看“16 位”标记或最亮像素,会漏掉一种重要故障的原因。

实测不同数值的条形图:8 位为 256,直接 16 位为 4,096,8 位另存为 16 位仍为 256

这些文件由重复的行组成,极易压缩,所以体积特别小。它们的字节数不能用来预测照片的文件大小。该实验只隔离了量化问题,没有比较深度模型,没有测试 Blender 渲染,也没有测量实际雕刻质量。本页中的 WebP 插图是说明性图表,并不是可供下载的高精度深度图。

如需复现这三个文件,请在 Python 环境中安装 NumPy 和 Pillow,然后运行:

import numpy as np
from PIL import Image

ramp = np.tile(np.linspace(0, 1, 4096), (64, 1))
a8 = np.rint(ramp * 255).astype(np.uint8)
a16 = np.rint(ramp * 65535).astype(np.uint16)
wrapped = a8.astype(np.uint16) * 257
for name, values in [("ramp-8", a8), ("ramp-16", a16),
                     ("ramp-8-in-16", wrapped)]:
    Image.fromarray(values).save(name + ".png")

如何检查你下载的 PNG?

请在其他应用重新保存之前,直接对下载的原始文件运行下面的脚本。它使用与实验相同的 Python 包,要求输入单通道 PNG。如果传入的是 RGB 预览图,脚本会刻意停止,而不是悄悄把预览图转换成看似有效的深度数据。

from pathlib import Path
import numpy as np
from PIL import Image

path = Path("depth.png")
raw = path.read_bytes()
assert raw[:8] == b"\x89PNG\r\n\x1a\n"
assert raw[12:16] == b"IHDR"
print("PNG sample depth:", raw[24])
print("PNG color type:", raw[25])  # 0 = grayscale
values = np.asarray(Image.open(path))
assert values.ndim == 2, "Inspect the grayscale export, not an RGB preview"
print("Range:", int(values.min()), int(values.max()))
print("Distinct values:", np.unique(values).size)
  • 确认检查的是灰度下载文件,而不是彩色预览图。
  • 如果选择了 16 位导出,采样深度应为 16。
  • 检查数值范围是否适合你的流程。
  • 结合图像内容判断不同数值的数量,不存在通用的合格线。
  • 查看平滑的斜坡区域,那里最容易发现意外的平台。
  • 每做一次可能降低精度的转换,都重新检查一遍。

一张看起来细节丰富、却只有 256 个数值的图像值得排查,但这只是线索,不是结论。刻意做成平坦的蒙版,本来就可能只需要更少的数值。反过来,插值可以从 8 位源数据中生成成千上万个数值,却无法恢复原始预测。检查文件,无法证明它的全部处理历史。

几乎全黑的预览同样需要正确解读。存储在很窄数值范围内的原始深度,对于要读取它的软件来说可能是有效的。只有当下一个工具要求归一化深度时,才对副本做归一化;原文件和任何比例元数据都要保留。关于尺寸和格式的基础检查,图像尺寸检查指南解释了普通文件属性能说明什么、不能说明什么。

为什么没问题的文件在 Blender 里仍然显示异常?

把深度图当作数值数据处理。在 Image Texture 节点中,把色彩空间设为 Non-Color,避免套用显示用的颜色变换。将图像连接到合适的高度或置换输入,检查材质的置换方式,并确认网格有足够的几何细分来实现真正的置换。

Blender 置换文档区分了只改变明暗效果的凹凸贴图,以及真正移动表面、因此需要精细细分几何体的置换。凹凸无法改变轮廓。菜单位置因版本而异,请参照与你安装版本对应的文档。

三步诊断:先比对源估计,再检查导出的 PNG,最后检查导入设置

症状 优先排查 下一步有效测试
平缓斜坡上出现规律台阶 量化,或中途被转换为 8 位 比较原始下载文件和导入后的文件
前景主体变成凹陷 近/远约定或置换方向 反转一次,并与已知的前景点比较
深度图平滑,但轮廓呈块状 几何细分不足或置换模式不对 在一小块网格区域增加几何细分测试
玻璃、头发或反光形成怪异形状 模型对场景的理解 将估计结果与原照片对照
深度图在查看器中几乎全黑 数值范围或显示处理 调整色阶前先检查原始最小值和最大值

测试时把置换强度保持在较低水平。在增加细节之前,先确认 Midlevel、UV 映射、裁切和宽高比。一次改动所有设置,就很难判断究竟是哪一步导致了错误。

从导出到导入的可靠检查清单

导出之前:

  1. 把源照片和原始深度图下载文件放在一起保存。
  2. 选择前景与背景分离清晰的图像。
  3. 选择导出格式前,先检查物体边界。
  4. 在兼容的深度流程中,直接导出 16 位灰度 PNG。
  5. 记录这次导出中,亮像素代表近处还是远处。

下载之后:

  1. 检查已保存文件的文件头、数值范围和不同数值数量。
  2. 以数据方式导入,并用已知位置的场景点验证方向。
  3. 完整渲染前,先用合适的几何细分测试一小块区域。
  4. 做任何兼容性转换之前,先保留高精度母版。
  5. 保存有效的设置,方便与之后的导出结果对比。

不要让深度母版经过常规的图像压缩流程。体积更小的显示图像和可靠的数值场,要求完全不同。同样,通用 AI 放大工具可能凭空生成纹理,一旦被当作高度解读,就会变成多余的几何起伏。

如果最终用于浮雕或雕刻应用,请另行核实该应用文档中说明的采样处理方式和灰度方向。本文没有测试加工设备的输出。仅凭相对于相机的深度,无法确定浮雕厚度、物理单位或加工参数。

常见问题

16 位深度会让 AI 估计更准确吗?

不会;它能保留更精细的输出数值,但无法纠正模型对场景理解上的错误。

把 8 位 PNG 转成 16 位能消除条带吗?

只更换容器无法找回丢失的数值;平滑处理可以弱化台阶,但也会改变深度数据本身。

为什么 16 位 PNG 只有 256 个不同数值?

它可能经过了 8 位处理环节;不过内容简单的图像,本来也可能只有这么少的数值。

深度图中白色一定代表近处吗?

不一定;各工具约定不同,请查看导出工具的近/远标注,并用已知的前景点加以验证。

可以用 JPEG 作为置换贴图吗?

渲染器也许能接受,但有损编码使它不适合作为保存精确深度值的母版。

32 位 RGBA PNG 比 16 位灰度 PNG 更精确吗?

对灰度深度图来说并不会;“32 位”RGBA 指四个 8 位通道,除非工具刻意把深度拆分编码到多个通道,否则每个灰度值仍只有 256 个层级。

为什么两个文件在浏览器预览中看起来一样?

显示转换可能掩盖额外的数值精度,因此应检查原始数据,并在目标应用中实际测试。

这张深度图能提供精确的真实世界测量值吗?

不能;归一化的相对估计既不能确定物理距离,也不能恢复看不见的几何形状。

阅读指南的同时,欢迎使用这些免费工具。

Convert HEIC to JPG:免费工具和批量方法对比比较 的封面图片

2026-07-26

Convert HEIC to JPG:免费工具和批量方法对比比较

使用免费的Web、Mac、Windows、iPhone和命令行工具,将HEIC格式的iPhone照片转换为JPG。本文详细对比了不同工具在速度、批量处理支持以及适用场景方面的差异,帮助您选择最佳转换方案。

转换JPG到PDF:了解免费方法及适用场景指引 的封面图片

2026-07-26

转换JPG到PDF:了解免费方法及适用场景指引

本文教您如何将JPG照片轻松转换为PDF格式,完美适配表格填写、专业作品集展示和打印需求。我们提供针对所有设备的详细操作步骤指南,指导您选择合适的最佳分辨率,并推荐一系列能确保图片质量不受损的免费工具。

PNG转JPG转换指南:掌握何时切换格式和正确操作流程 的封面图片

2026-07-26

PNG转JPG转换指南:掌握何时切换格式和正确操作流程

了解如何将PNG转换为JPG,从而实现文件大小减少80%以上。本文详细介绍了何时保留PNG的透明度信息、如何高效处理复杂的背景图层,并提供了专业的批量转换步骤,确保在格式切换过程中最大限度地保持原始画质和细节。