2015-11-02 43 views
1

在對圖像執行2倍下采樣時,下采樣圖像爲灰色。我應該怎麼做才能將所有顏色分量添加到縮減採樣實現中,以便它成爲彩色圖像?爲什麼下采樣顯示爲灰色圖像?

I = imread('lena.gif','gif'); 
    [j k] = size(I) 


    x_new = j./2; 
    y_new = k./2; 


    x_scale = j./x_new; 
    y_scale = k./y_new; 


    M = zeros(x_new,y_new); 


    for count1 = 1:x_new 
    for count2 = 1:y_new 
    M(count1,count2) = I(count1.*x_scale,count2.*y_scale); 
    end 
    end 


    figure,imshow(I); 
    title('Original Image'); 
    M = uint8(M); 
    figure,imshow(M); 
    title('Downsample'); 
+0

'M'只有一個層,有沒有RGB信息,所以結果是灰色的是有道理的。如果輸入圖像,您應該使用全部3層。 – NKN

+0

如何將RGB信息添加到M呢?我是圖像處理新手:/ @NKN – Blu

+0

爲什麼不使用'imresize'? – bla

回答

2

GIF圖像是什麼被稱爲索引圖像。這意味着您在imread中讀到的值是索引到顏色映射。每個索引都會爲您生成一種獨特的顏色,這就是GIF圖像的存儲方式。他們從一組預定義的顏色中進行選擇,並且GIF圖像中的每個像素都來自顏色映射中的一種顏色。

您首先需要將圖像轉換爲RGB,然後使用ind2rgb來完成此操作。但是,您需要先閱讀色彩映射表,然後輸入imread的雙輸出版本。您還希望將圖像uint8好做法轉化與im2uint8

[X,map] = imread('lena.gif'); 
I = im2uint8(ind2rgb(X,map)); 

你下一步需要做的是什麼@NKN建議。您必須將算法應用於所有通道。因此,只需製作一個具有三個通道的輸出矩陣,並將算法獨立應用於每個平面即可。如果我可以提出建議,在縮減採樣後以這種方式訪問​​像素時,請確保您的圖像座標爲floorround,這樣您就不會無意中指定未定義的位置 - 例如(13.8,25.5)。圖像像素位置是整數,所以你需要確保座標也是整數。


[X,map] = imread('lena.gif'); 
I = im2uint8(ind2rgb(X,map)); 

j = size(I,1); %// Change 
k = size(I,2); 

x_new = j./2; 
y_new = k./2; 


x_scale = j./x_new; 
y_scale = k./y_new; 


M = zeros(x_new,y_new,size(I,3)); %// Change 


for jj = 1 : size(I,3) %// Change 
    for count1 = 1:x_new 
    for count2 = 1:y_new 
     M(count1,count2,jj) = I(floor(count1.*x_scale),floor(count2.*y_scale),jj); %// Change 
    end 
    end 
end 


figure,imshow(I); 
title('Original Image'); 
M = uint8(M); 
figure,imshow(M); 
title('Downsample'); 

爲了測試這一點,我使用了mandrill數據集的MATLAB的一部分。它是帶有相關顏色映射的索引圖像。這些都不約而同地存儲在Xmap恭敬的道:

load mandrill; 
I = im2uint8(ind2rgb(X,map)); 

運行修改後的代碼,我得到這兩個數字:

enter image description here

enter image description here

+1

問題是他沒有下載的代碼! – NKN

+0

@NKN你是對的!我需要修復那個 – rayryeng

+1

@NKN好吧,看起來我已經修復它不經意間哈哈。 – rayryeng

1

當你讀它包含了3層,RGB(原始圖像通過@rayryeng的建議:

[X,map] = imread('lena.gif'); 
I = ind2rgb(X,map); 
size(I) 

ans = 

     768  1024   3 

你應該對所有的層進行縮小處理:

您提供的代碼不會縮減採樣。簡單的縮減採樣示例如下:

imshow(I(1:2:end,1:2:end,:)) 
+2

這不是完整的故事。您還需要從GIF圖像中讀入色彩圖。但是,對於將算法應用到每個平面的主要觀點來說+1。 – rayryeng

+0

感謝@NKN – Blu

+0

@rayryeng! – NKN

相關問題