2014-02-11 264 views
1

我正試圖編寫一個程序,該程序將圖像轉換爲MATLAB中的chromaticity圖像。將圖像轉換爲色度圖像

據我瞭解,實現色度,必須從R,G,B計算r,g,b,通過:

equations

所以,我已經做到了這一點(或者至少嘗試過),但它只是一個返回黑色圖像...

這是我的計劃:

img = double(imread('ref_images/foliage.jpg')); 
    %temp 
    chrom_Img = zeros(size(img, 1), size(img, 2)); 

    %split channels 
    R_ = img(:,:,1); 
    G_ = img(:,:,2); 
    B_ = img(:,:,3); 

    %sum RGB channels (R+G+B) 
    s_RGB = R_ + G_ + B_; 

    %calc r g b with r = R/sum etc 
    r_ = R_./s_RGB; 
    g_ = G_./s_RGB; 
    b_ = B_./s_RGB; 

    %assign to chrom_Img 
    %chrom_Img = cat(3, r_, g_, b_); %also tried this 
    chrom_Img(:,:,1) = r_; 
    chrom_Img(:,:,2) = g_; 
    chrom_Img(:,:,3) = b_; 

我缺少或實施我不正確的發生這種情況?

要查看示例圖像,請參閱here

回答

4

你的問題是數據類型。當與整數處理任何分數小於一個是零:

>> uint8(10)/uint8(100) 
ans = 
    0 

當你做的一切r_ = R_./s_RGB;變爲零。

而且,代替人工總和(s_RGB = R_ + G_ + B_;),你可以這樣做:

s_RGB = sum(double(img),3); 

這將總結了第三個維度。

轉換img翻倍了前面,它應該很好地工作:

chrom_Img = bsxfun(@rdivide,double(img),sum(double(img),3)); 

結果(基於this image):

enter image description here

+2

真棒。感謝發佈。很好的答案。我很高興這很簡單。再次感謝:D – Reanimation