我正在尝试用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文件的正确方法是什么?????
答案 0 :(得分:8)
The TIFF specification未指定在图像中为每个通道存储10,12或14位的方法。根据编码器和解码器的不同,它仍然可以使用这些图像,但它实际上是一个实现细节,因为它们不需要这样做。
如果你想要一个TIFF超过8位的精度,你唯一的选择是16(或浮点,但这是一个不同的故事)。
我不知道任何具有这些bitdepth特定支持的图像格式,因此如果您必须使用特定的bitdepth存储图像,那么观看者可能会成为问题。我能想到的最简单的解决方法是将每个像素存储为16位并将原始bitdepth作为元数据(例如,在ImageDescription标记中),但这一切都取决于图像的用途以及为什么需要此信息
答案 1 :(得分:0)
您可以将图像存储为多图像文件。例如,对于12位源,一个图像将是使用高8位和第二16位灰度的RGB(8)图像,该灰度是低四位和四位填充的组合。这样就可以使用标准程序在监视器上查看TIFF,并且可以使用自定义软件来检索额外的精度。
我不同意“奇异”位深度不好。这种格式会将图片大小减少5/6。您甚至可以将第二张图像存储为重新缩放版本,该版本将紧紧填充4位而不用填充以缩小3/4尺寸。对于非常大的数据集,这种节省可能非常可观,由于数据的性质,压缩是不可选择的。即,许多科学和机器视觉应用程序可能需要没有掺杂的位。从多图像tiff转换为16位tiff的能力将允许使用标准程序和图像库。