首页 > 解决方案 > 如何检查 TIFF 文件是否真正具有 16 位深度

问题描述

假设我使用以下 ImageMagick 命令将 8 位 TIFF 图像转换为 16 位:

$ convert 8bit-image.tif -depth 16 16bit-image.tif

结果是一个文件被其他程序检测为具有 16 位深度的文件:

$ identify 16bit-image.tif
16bit-image.tif TIFF 740x573 740x573+0+0 16-bit sRGB 376950B 0.000u 0:00.000

自然地,这个文件没有“真正的”16 位,因为它是一个 8 位文件,只是简单地标记为 16 位。它没有真正的 16 位所期望的细微差别。如何区分真正的 16 位图像和只是“假装”的图像?

最好的,

贝拉

标签: image-processingimagemagick

解决方案


当你有一个 8 位图像时,像素值的范围是 0 到 255。对于 16 位图像,像素范围是 0 到 65535。所以你可以在 16 位中表达比在 8 位中更多的细微差别。

通常,当您的相机中有一个 16 位成像器时,它能够捕捉这些细微差别并将它们映射到完整的 16 位范围。8 位成像器将被限制在更小的范围内,因此与 16 位成像器相比,在拍照时会丢失一些信息。

现在,当您开始使用 8 位图像时,该信息已经丢失,因此转换为 16 位不会给您带来更大的细微差别,因为 ImageMagick 无法在没有信息的地方创造信息。

图像处理工具通常所做的是将 8 位图像的像素值填充复制到 16 位图像中,因此您的 16 位图像仍将仅包含 [0,255] 范围内的值。如果在您的示例中是这种情况,您可以检查 16 位图像的最亮像素是否大于 255。如果是,您可以假设它是原生 16 位图像。如果不是,它很可能是从 8 位转换而来的。

但是,不能保证 16 位图像真的是从 8 位转换而来的,因为它可能只是一个非常暗的原生 16 位图像,只是偶然使用了 8 位范围中最暗的像素。

编辑:有人可能使用完整的 16 位范围将 8 位图像转换为 16 位。这可能意味着值 0 的像素可能保持在 0,255 的像素现在可能处于 65535,并且其间的所有值将均匀分布到 16 位范围。

但是,由于无法发明新信息,因此所使用的像素值会存在间隙,例如,您的像素值可能为 0、255、510 等,但不会出现介于两者之间的值。

根据用于拉伸像素范围的算法,这些特定值可能会有所不同,但您可以通过查看图像的直方图来发现类似的转换:图像直方图 8 到 16 位

它将具有独特的梳状结构(图片取自http://www.northlight-images.co.uk/digital-black-and-white-working-in-16-bit/

因此,根据从 8 位到 16 位的转换是如何执行的,判断它是否是原生图像可能会有点复杂,即使这样也不能保证可靠地确定图像是否实际转换。


推荐阅读