顯示

2013-04-25 51 views
0

我來到一個matlab代碼,其中它首先讀取圖像並將其如下轉換爲double圖像:顯示

I = double(imread(img)); 

在此之後,它示出了圖像,如下所示:

imshow(I/max(I(:))) 

那是什麼意思?特別是當我刪除max部分時,我只得到一個白色背景的圖像。這種劃分的目標是什麼?而且,爲什麼它在完成後正確顯示圖像,並且如果直接顯示讀取的圖像而沒有通過max除法,則無法正確顯示圖像?

謝謝。

回答

3

表達:

I/max(I(:)) 

只是正常化的像素值的範圍內0..1.0。它將所有像素值除以最大值。

+0

感謝您的回覆。這種情況是我有一個灰度圖像,其中最小值是'77',最大值是'113'。爲什麼如果我不規範我沒有得到預期的輸出? – Simplicity 2013-04-25 10:02:41

+1

如果您將'double'值傳遞給'imshow',它們需要在範圍0 .. 1 - 請參閱@ Nick的答案以獲取更多詳細信息。 – 2013-04-25 10:03:47

+0

例如,如果我們的值爲'77',不會簡單地將它設置爲'77.0'?在這種情況下,「double」意味着什麼? – Simplicity 2013-04-25 10:13:54

2

max(I(:))似乎是一個歸一化步驟

documentation遵循imshow需要具有0至1.0之間和

imshow(I)值的輸入矩陣顯示圖像I中的手柄Graphics®圖,其中我 是灰度,RGB(真彩色)或二進制圖像。對於二進制圖像, imshow顯示值爲0(零)的像素爲黑色,1爲 白色。

+0

感謝您的回覆。這種情況是我有一個灰度圖像,其中最小值是'77',最大值是'113'。爲什麼如果我不規範我沒有得到預期的輸出? – Simplicity 2013-04-25 10:03:33

+2

因爲您的值不在0..1.0範圍內,所以您需要對此進行更正。值113將顯示爲白色,而0將顯示爲黑色。你也可以使用'imshow(I,[low high])',在這裏你可以設置範圍。 – Nick 2013-04-25 10:06:42

0

I是一個2D或3D矩陣(取決於灰度或顏色)。 I(:)是將矩陣的所有值寫入列中的向量,就像它們排列在內存中一樣;你也可以通過reshape來完成。請閱讀Matlab documentation中有關冒號操作符的更多信息,這是Matlab絕對的基本概念。

max爲您提供了一個向量上的最大值,即max(I(:))爲您提供了整個圖像的最大值。

這是一個圖像的範圍從0開始。因此,你可以通過將其除以max(I(:))圖像的值映射到[0,1]一個不成文的定律。在Matlab中它是這樣做的:myMatrix/myScalar

所以I/max(I(:))爲您提供的圖像的值爲[0,1],您要用imshow顯示的雙重圖像需要什麼。

請注意:

(1)你可以寫imshow(I,[])代替它會顯示你拉伸到[0,1]值圖像(差到你的最低版本映射到0以及)。

(2)在我看來,您應該映射圖像的值以便僅在特殊情況下才可視化。它可以給你錯誤的圖像印象(例如,一個非常黑暗的圖像將被視爲完整的對比圖像)。嘗試最大化原始值範圍(通常爲255,4095或65535)。例如:

img = imread('some12bit.png'); 
img = double(img); 
img = img/4095; % [0,4095] -> [0,1] 
imshow(img); 

(3)在不將圖像映射到[0,1]所有值> 1將被解釋爲1。這就是爲什麼您的圖像顯示爲白色圖像,而未將其映射到[0,1]之前。