簡體   English   中英

32位TIFF圖像顯示為白色,與RAW不同

[英]32-bit TIFF image appears white and different from RAW

我在使用LibTIFF庫保存圖像時遇到問題。

在我的代碼中,我有一個浮點數組,表示圖像的像素值。 當我將這些值保存到RAW文件時,它看起來很好。 但是,當我嘗試使用LibTIFF庫將其保存為TIFF文件時,當我在ImageJ中打開它時,圖像看起來非常好,但是當我在Photoshop或Windows中打開它時,它看起來很奇怪(如下所示),Gimp顯示完全透明的圖像(就像圖像中根本沒有數據一樣)。

我使用ImageJ打開RAW文件,圖像類型設置為32位 - 勾選實數和小端字節順序。

左邊是RAW,右邊是TIFF

這是我用來保存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);

我很確定我保存文件的方式有問題 - 但我不知道是什么。 非常感謝你的幫助!

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

    TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP);

然后你不應該對可以讀取浮點圖像的程序有任何問題。

我懷疑你保存它的方式有什么問題 - 只是Windows Image Viewer無法正確處理32位的TIFF。 不知道任何關於LibTIFF的事情,我假設您可以通過將代碼中的相應行調整為8而不是32來更改創建的TIFF的bitdepth,因此它如下所示:

TIFFSetField (tif, TIFFTAG_BITSPERSAMPLE, 8);

但是,請注意,如果原始數據的強度值大於8位可表示的強度值,則會導致信息丟失。 我不知道LibTIFF如何在那里擴展。

但僅僅因為Windows / Gimp / Photoshop沒有正確顯示它們並不意味着TIFF文件被破壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM