1. 程式人生 > >Octave之TIFF格式影象儲存格式猜測

Octave之TIFF格式影象儲存格式猜測

今天在處理TIF(tiff)格式的影象時,發現這樣顯示的影象是一片黑:

I = imread("forest.tif");
imshow(I);
並提示了這樣的警告:

warning: your version of GraphicsMagick limits images to 16 bits per pixel
warning: called from
    imformats>default_formats at line 256 column 11
    imformats at line 79 column 3
    imageIO at line 92 column 11
    imread at line 106 column 30
    ex1_tif at line 2 column 8
大概翻譯一下:你當前版本的影象處理工具限制每個畫素為16bit。

慣性思維,反正是警告,沒怎麼理會,反正能顯示:

誒?這是什麼鬼?怎麼全是黑色的?黑色森林?(csdn水印請忽略)

後來檢視知道是這樣顯示的:

%讀入森林圖片
[I2,M2] = imread("forest.tif");
imshow(I2,M2);
這樣就正確了


為什麼這樣才可以呢?JPG的圖片那樣也可以啊?

我們輸出了影象資訊

info = imfinfo("forest.tif");
disp(info);
scalar structure containing the fields:

    Filename =  ...\octave-4.0.3\workspace\image_ex1\forest.tif
    FileModDate =  4-Dec-2000 13:57:58
    FileSize =  124888
    Format = TIFF
    FormatVersion =
    Width =  447
    Height =  301
    BitDepth =  16
    ColorType = indexed
    DelayTime = 0
    DisposalMethod =
    LoopCount = 0
    ByteOrder = undefined
    Gamma = 0
    Chromaticities = [](1x0)
    Comment = Carmanah Ancient Forest, British Columbia, Canada
    Quality =  75
    Compression = undefined
    Colormap =

       1.00000   1.00000   1.00000
       0.00000   1.00000   1.00000
....
中間有兩個資訊很有用:colorType = indexed  bitDepth = 16

分別是:顏色型別為索引型別,位深為16位。

imreade格式為 [X,Map] = imread(filename,format);

這個Map是什麼東西?

檢視workspace


可以看到M2為256*3的矩陣,double型別。經搜尋3列標識rgb值。256,?

嗯似乎和16有著什麼關係?

又想著之前的警告,每個畫素限制到16位,這裡的位深也是16位,16*16=256不好解釋啊,

索引點陣圖?

I2中每個值都小於256?

似乎猜到了什麼?

所以猜測:由於限制到每個位為16bit,可能是I2儲存顏色的索引值,Map表示著256種顏色

I2中存的為Map中的行數,(不過0對應map中的第一行)

測試:

把顏色1:置為黑色,

%把I2中前20行索引置為0,第一行
I2([1:1:20],:)=0;
%顏色1置為黑色
M2(1,:) = 0;
顯示


果然如此。