2017-01-10 57 views
0

以下代碼段結果爲doubleimage使用imshow時,uint8和雙重圖像之間的差異

f = imread('C:\Users\Administrator\Desktop\2.tif'); 
h = double(f); 
figure; 
imshow(h); 

而,該另一代碼段產生一個uint8image

f = imread('C:\Users\Administrator\Desktop\2.tif'); 
figure; 
imshow(f); 

雖然顯示這兩個數字,使用imshow這兩個圖像的顯示的結果是不同的,但什麼是這種差異背後的原因是什麼? double

+0

'uint'之前,使用標準化的mat2gray版本double! * unsigned * integer(不是'unit') –

回答

4

圖像被假定爲0和1,uint8圖像之間的值被假定爲有0和255之間的值,因爲您的double數據包含0和255之間的值(因爲你只需將它轉換爲double和不會執行任何縮放),因爲大多數值都大於1,所以它會顯示爲大多白色。

您可以使用第二個輸入到imshow來指示您想要忽略此假設並自動將顯示縮放爲數據的動態範圍

imshow(h, []) 

或者你也可以顯示圖像

h = mat2gray(h); 
imshow(h) 
+1

imshow的神奇行爲在非交互式設置中幾乎從不是一件好事。你可以通過將它包裝在一個檢查輸入類型和範圍假設的函數中來節省自己的驚喜和痛苦。 – welch