2012-10-03 50 views
-1
nspace1=rgb2ycbcr(ims); 
nspace2= rgb2ycbcr(imt); 
ms=double(nspace1(:,:,1)); 
mt=double(nspace2(:,:,1)); 
m1=max(max(ms)); 
m2=min(min(ms)); 
m3=max(max(mt)); 
m4=min(min(mt)); 
d1=m1-m2; 
d2=m3-m4; 

% Normalization 
dx1=ms; 
dx2=mt; 
dx1=(dx1*255)/(255-d1); 
dx2=(dx2*255)/(255-d2); 
[mx,my,mz]=size(dx2); 

回答

4

您正在以完全相同的方式處理兩張圖像(imsimt),我將嘗試描述每行的功能。你當然也可以此發現自己,如果你去翻自己的文檔/使用你的大腦/ execute the code step by step和檢查變量每一步..

nspace1=rgb2ycbcr(ims); 
ms=double(nspace1(:,:,1)); 

rgb2ycbcr documentation

ycbcrmap = rgb2ycbcr(圖)將映射中的RGB值轉換爲YCbCr色彩空間。地圖必須是M-by-3陣列。 ycbcrmap是M-by-3矩陣,它包含YCbCr亮度(Y)和色度(Cb和Cr)顏色值作爲列。

因此nspace1包含來自圖像ims的每個RGB輸入的YCbCr值。 第二行爲每個像素提取該YCbCR三元組的第一個元素,即上面可以讀取的亮度。

m1=max(max(ms)); 
m2=min(min(ms)); 

第一個max找到每列的最大值,所以它會留下一行。第二個max找到該結果行的最大值,這將使整個矩陣的絕對最大值保持不變。 min(min(...))同樣的事情。

d1=m1-m2; 

這就是亮度的數值範圍。

dx1=ms; 
dx1=(dx1*255)/(255-d1); 

應該是正常化的評論暗示,但它肯定看起來不像標準化。我想這應該是:

dx1 = (ms-m2)*255/d1; 

其中每一個亮度值轉變爲0和255

[mx,my,mz]=size(dx2); 

之間的值,我離開最後由你來弄清楚,不應該是硬。

+0

+1:更一般地,您可以通過以下方式線性地將亮度(或任何值的間隔)映射到兩個值之間的任何'range = [low high]'(範圍(2) - 範圍1))*(ms - m2)/ d1 + min(範圍)' – gevang

+0

@Mark Ransom比'255-d1'還要錯的那個..還是錯誤的imo –

+0

@GuntherStruyf當然你是對的,我會刪除我的評論。如果使用m1 = 255和m2 = 0,很容易看出它的失敗。 –