2015-04-21 68 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); –