2014-04-09 24 views
0

我正在嘗試使用imadjust,爲了做到這一點,我必須將我的圖像(灰度圖像)中的值歸一化爲0〜1。我曾嘗試以下:規格化imadjust的值

爲獲得最大/最小值:

minValue = min(I(:)); 
maxValue = max(I(:)); 

比我想在某些方面使用imadjust

Iadjusted = imadjust(I,[lowestValue/highestValue; highestValue/highestValue] ,[0 1]); 
Iadjusted = imadjust(I,[lowestValue/255; highestValue/255] ,[]); 
Iadjusted = imadjust(I,[double(lowestValue/highestValue); double(highestValue/highestValue)] ,[]); 

,但沒有一次成功。他們每個人都顯示錯誤/顯示原始圖像沒有任何改變。當我顯示最小/最大值的結果是正確的,但是當我試圖顯示正常化它總是顯示0或1.我做錯了什麼?

+0

如果需要使用'imadjust'然後如手冊所示,使用以下語法:'Imadjusted = imadjust(I,[minValue; maxValue],[0; 1])'或'Imadjusted = imadjust(I,[minValue; maxValue],[])'as '[0; 1]'是默認值。 –

+1

您只是使用錯誤的命令進行規範化。 imadjust用於將圖像強度修改爲相同類型的圖像。所以如果你現在正在嘗試你正在做的事情,你會得到一個0或1的圖像。簡單的im2double命令會生成像素值介於0和1之間的雙精度圖像。 –

回答

0

在MATLAB中默認使用uint8存儲圖像,因此在[0 1]中只能有兩個整數(即0和1)。要做你想做的事情,並得到範圍[0,1]的圖像,你必須使用雙打。

因此,如果你想使用imadjust:

I = double(I)/255; 
J = imadjust(I,[min(I(:)); max(I(:))],[0.0; 1.0]); 

(Imadjust與雙打希望一切是0和1之間。這是與雙打表示圖像一般如此)。

+0

我在刪除問題的第二部分時犯了一個錯誤。答案的第一部分(通緝的)依然成立。 – cifz

0

該功能調整的信號(可以是圖像)提供給範圍的圖像信號[0,1]

function normsig = normalize(sig) 
    sig = double(sig); 
    normsig = (sig-min(sig(:)))/(max(sig(:))-min(sig(:))) ; 
end 

用法:

img = imread('xxxx.jpg','jpg'); 
figure; imshow(img); 
normalizedimg = normalize(img); 
figure; imshow(normalizedimg);