【问题标题】:32-bit TIFF image appears white and different from RAW32 位 TIFF 图像显示为白色且与 RAW 不同
【发布时间】:2014-07-06 10:32:09
【问题描述】:

我在使用 LibTIFF 库保存图像时遇到问题。

在我的代码中,我有一个浮点数组,表示图像的像素值。当我将这些值保存到 RAW 文件时,它看起来很好。但是,当我尝试使用 LibTIFF 库将其保存为 TIFF 文件时,当我在 ImageJ 中打开它时,图像看起来非常好,但是当我在 Photoshop 或 Windows 中打开它时,它看起来很奇怪(如下所示),并且 Gimp 显示完全透明的图像(就像图像中根本没有数据一样)。

我使用 ImageJ 打开 RAW 文件,图像类型设置为 32bit - Real 和 Little-endian 字节顺序打勾。

这是我用来保存 TIFF 图像的代码:

TIFF *tif= TIFFOpen(name, "w");

TIFFSetField (tif, TIFFTAG_IMAGEWIDTH, width);
TIFFSetField (tif, TIFFTAG_IMAGELENGTH, height);
TIFFSetField (tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField (tif, TIFFTAG_SAMPLESPERPIXEL, 1);
TIFFSetField (tif, TIFFTAG_ROWSPERSTRIP, 1);
TIFFSetField (tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
TIFFSetField (tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
TIFFSetField (tif, TIFFTAG_BITSPERSAMPLE, 32);
TIFFSetField (tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);

tsize_t strip_size = TIFFStripSize (tif);
tstrip_t strips_num = TIFFNumberOfStrips (tif); 

float* strip_buf=(float*)_TIFFmalloc(strip_size);
for (unsigned int s=0; s<strips_num; s++) {
    for (unsigned int col=0; col<width; col++) {
        strip_buf[col]=image[s][col];
    }
    TIFFWriteEncodedStrip (tif, s, strip_buf, strip_size);

}
_TIFFfree(strip_buf);
TIFFClose(tif);

我很确定我保存文件的方式有问题 - 但我不知道是什么问题。非常感谢您的帮助!

【问题讨论】:

    标签: c tiff imagej libtiff


    【解决方案1】:

    您可能需要添加以下行以指示图像是浮动 32 位的。

        TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP);
    

    然后你应该对可以读取浮动图像的程序没有任何问题。

    【讨论】:

    • 你救了我!常见的可用 libtiff-tutorials 中没有这样有价值的提示。
    【解决方案2】:

    我怀疑您保存它的方式有问题 - 只是 Windows 图像查看器无法正确处理 32 位的 TIFF。不了解 LibTIFF,我假设您可以通过将代码中的相应行调整为 8 而不是 32 来更改创建的 TIFF 的位深度,所以它的内容如下:

    TIFFSetField (tif, TIFFTAG_BITSPERSAMPLE, 8);
    

    但是,请注意,如果您的原始数据的强度值多于 8 位可以表示的值,这将导致信息丢失。而且我不知道 LibTIFF 是如何在那里进行缩放的。

    但仅仅因为 Windows / Gimp / Photoshop 不能正确显示它们并不意味着 TIFF 文件已损坏。

    【讨论】:

    • 看看你截图中的右图,我猜这只是 32 位 TIFF 文件中的低 8 位。所以这可能是 Windows 图像查看器在遇到只能部分理解的内容时所做的事情;)
    猜你喜欢
    • 2014-04-21
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多