2015-04-21 100 views
2

我已經完成了一個編程,可以通過使用從000到111的RGB方法計算圖像中的8種顏色。我需要對其進行一些修改。到目前爲止,我聲明的數字,如果128以上將等於1 &低於128將是0.它會計數8種顏色。如何增加顏色數量?下面是代碼的一個例子數到8種顏色:計算圖像中顏色的百分比數

rgbImage = imread('football.jpg'); 
imshow(rgbImage); 
[w,h,d] = size(rgbImage) 
redChannel = rgbImage(:,:, 1); 
greenChannel = rgbImage(:,:, 2); 
blueChannel = rgbImage(:,:, 3); 
quantizedImage=zeros(size(rgbImage)); 
count=zeros(1,8); 
for i = 1:w 
    for j = 1:h   
     if redChannel(i,j) > 128, 
      aredChannel2 = 1; 
     else 
      aredChannel2=0; 
     end 
     quantizedImage(i,j,1)=aredChannel2*255; 
     if greenChannel(i,j) > 128, 
     agreenChannel2 = 1; 
     else 
     agreenChannel2=0; 
     end 
     quantizedImage(i,j,2)=agreenChannel2*255; 
     if blueChannel(i,j) > 128, 
     ablueChannel2 = 1; 
     else 
     ablueChannel2=0; 
     end 
     quantizedImage(i,j,3)=ablueChannel2*255; 
     bin=4*aredChannel2+2*agreenChannel2+ablueChannel2+1; 
     count(bin)=count(bin)+1; 
    end 
end 
figure, imshow(uint8(quantizedImage)); 
+0

正如上面的代碼最多隻能計算8種顏色。假設我想將顏色數增加到64個顏色數。 –

+0

@rayryeng你能幫我解決這個問題嗎? –

回答

2

您應該使用rgb2ind來幫助你實現你的目標。
首先,創建一個64色的色彩地圖。通過將每個顏色通道(R,G和B)分成4個箱子共4 * 4 * 4 = 64種可能的顏色來創建該顏色圖。 每個顏色通道的範圍在0和1之間,因此分箱的中心爲0.1250,0.3750,0.6250和0.8750。或者使用更多的Matlab-ish語言:(0:.25:.75)+0.125
我使用meshgrid所有可能的區間之間的創建笛卡爾乘積:

[C{1:3}] = meshgrid((0:.25:.75)+0.125); 
cmp = [C{1}(:) C{2}(:) C{3}(:)]; 

一旦你擁有64色顏色表可以量化圖像

qImg = rgb2ind(rgbImage, cmp, 'nodither'); 

這就是它!

這是你的輸出

figure;imagesc(qImg);colormap(cmp); 

enter image description here

如果你要計算在每個64個箱的像素數,你可以簡單地使用hist

count = hist(double(qImg(:)), 64); 
+0

我在如何計算它時遇到一些錯誤。對不起 –

+0

@RabaniAhmadTasman你必須更加具體 – Shai

+0

以及我得到這個代碼錯誤: 數= HIST(qImg(:),64); –