14

我正在尝试使用 LibTIFF 编写 10,12 位 RGB TIFF 文件。

像素数据本地保存在unsigned short缓冲区(16 位)中

1) 如果我设置TIFFTAG_BITSPERSAMPLE为 10 或 12,则从缓冲区中读取的位不足,并且输出不正确。(我知道它只是读取每个组件 10 或 12 位,而不是 16 位,这就是问题所在)

2) 我尝试将这些位打包在缓冲区中,使其真正为 12-R、12-G、12-B。在这种情况下,我认为文件正在正确写入,但我找不到任何查看器可以正确显示此图像。

3)如果我设置TIFFTAG_BITSPERSAMPLE为16,观众可以显示TIFF图像,但是我有一个问题,我不知道图像最初是10位还是12位(如果我想以后用LibTIFF读取它)。此外,观看者期望动态范围为 16 位,而不是 10 或 12 位,这也会导致观看效果不佳。

4) 最烦人的部分是我在网上找不到一张 10、12 或 14 位的 TIFF 图像来查看标题应该是什么样子。

那么最后,将 10 位或 12 位图像数据写入 TIFF 文件的正确方法是什么??????

4

2 回答 2

12

TIFF 规范没有指定在图像中每个通道存储 10、12 或 14 位的方法。根据编码器和解码器的不同,可能仍然可以处理这些图像,但这实际上是一个实现细节,因为它们不需要这样做。

如果您希望 TIFF 中的精度超过 8 位,则唯一的选择是 16(或浮点,但那是另一回事)。

我不知道任何对这些位深度有特定支持的图像格式,因此如果您必须存储具有该特定位深度的图像,无论如何查看器都可能是个问题。我能想到的最简单的解决方法是存储为每像素 16 位并将原始位深度作为元数据(例如在 ImageDescription 标记中),但这完全取决于图像的用途以及您需要此信息的原因.

于 2011-08-15T18:13:49.037 回答
1

您可以将图像存储为多图像文件。例如,对于 12 位源,一个图像将是使用高 8 位和第二个 16 位灰度的 RGB(8) 图像,后者是低四位和四位填充的组合。这提供了一个可以在带有标准程序的监视器上查看的 TIFF,并且可以使用自定义软件检索额外的精度。

我不同意“异国情调”的位深度不好。这种格式会将图像大小减小 5/6。您甚至可以将第二张图像存储为重新缩放的版本,该版本将 4 位紧密打包而无需填充以减小 3/4 大小。对于非常大的数据集,这种节省可能非常显着,由于数据的性质,压缩不是一种选择。即,许多科学和机器视觉应用可能需要未掺杂的比特。从多图像 tiff 转换为 16 位 tiff 的能力将允许使用标准程序和图像库。

于 2020-06-04T15:48:21.393 回答