Octave之TIFF格式影象儲存格式猜測
阿新 • • 發佈:2018-11-11
今天在處理TIF(tiff)格式的影象時,發現這樣顯示的影象是一片黑:
I = imread("forest.tif");
imshow(I);
並提示了這樣的警告:
大概翻譯一下:你當前版本的影象處理工具限制每個畫素為16bit。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
慣性思維,反正是警告,沒怎麼理會,反正能顯示:
誒?這是什麼鬼?怎麼全是黑色的?黑色森林?(csdn水印請忽略)
後來檢視知道是這樣顯示的:
%讀入森林圖片
[I2,M2] = imread("forest.tif");
imshow(I2,M2);
這樣就正確了
為什麼這樣才可以呢?JPG的圖片那樣也可以啊?
我們輸出了影象資訊
info = imfinfo("forest.tif");
disp(info);
中間有兩個資訊很有用:colorType = indexed bitDepth = 16scalar 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 ....
分別是:顏色型別為索引型別,位深為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;
顯示
果然如此。