2016-12-30 78 views
0

我讀的圖像使用以下命令:將圖像轉換爲double類型

lefty = imread('sintra2.JPG'); 

imshow();給了我一個很好的resault。但如果我嘗試使用:

lefty = double(imread('sintra2.JPG')); 

imshow()給了我一個白色的圖像。我正在與一個相對較大的圖像shared here。有連接嗎?

如果完全有必要,我該如何轉換爲雙倍?有人告訴我,在MATLAB中處理圖像處理和計算機視覺時最好加倍工作。

回答

6

當讀出的圖像,其類型是uint8因此lefty包含的值從0到255(2 = 256)。當您使用double時,它將類別從uint8轉換爲double,但值保持相同,即0-255。

這裏您需要im2double,它不僅可以將值轉換爲雙精度值,還可以通過將輸入的所有條目除以輸入數據類型的最大可能值來重新縮放0-1範圍內的值。因此,在您的情況下,由於輸入數據類型爲uint8,其最大可能值爲255,因此所有值將除以255.請注意,圖像數據中的最大值可能不是255,但由於最大值的uint8可能值是255,那麼所有的值將由255

劃分所以下面是你在找什麼:

lefty = imread('sintra2.JPG'); 
imshow(lefty) 
figure 
imshow(im2double(lefty)) 
+1

我會考慮重新說明這一點:*「但也重新調整0和1之間的值」*。人們可能會有這樣的誤解:如果圖像數據不能覆蓋數據類型的整個動態範圍(例如,'uint8'的最小值和最大值分別爲32和128),那麼'im2double'會縮放此圖像,最小值爲0,最大值爲1.所有'im2double'都會檢測圖像的類型,並通過輸入類型的最大可能值來分割輸入中的所有條目。除了除法之外,沒有額外的縮放比例。這只是我,我喜歡挑剔。 – rayryeng

+1

@rayryeng對於我來說,在看過你的評論和其他答案之後,現在看起來很明顯,我同意你的看法。按照您的建議進行編輯。謝謝 –

+1

太棒了。從我這裏得到讚賞。 – rayryeng

3

問題出在imshow要求的數據類型。如果圖像類型爲int,則其範圍應介於0和255之間。如果是雙倍 - 介於0.0和1.0之間。嘗試:

lefty = imread('sintra2.JPG'); 
imshow(lefty) 

或:

lefty = imread('sintra2.JPG'); 
imshow(double(lefty)/double(max(lefty(:)))) 
+0

所以基本上圖像細膩轉換爲double和唯一的問題是'imshow()'表示? – havakok

+1

是的你是對的 – desa

+0

@havakok爲了避免將來出現這樣的問題,讓'imshow'爲你縮放圖像:'imshow(lefty,[]);'第二個參數指定最小和最大強度映射到通過'[]'縮放圖像數據,使得最小強度爲0,對於'雙'型圖像,最大強度爲1。 – rayryeng