计算图像中颜色的百分比数

时间:2015-04-21 05:13:59

标签: matlab

我已经完成了一项编程,通过使用从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));

1 个答案:

答案 0 :(得分:2)

您应该使用rgb2ind来帮助您实现目标 首先,创建一个64色的色彩图。通过将每个颜色通道(R,G和B)分成4个总共4 * 4 * 4 = 64种可能的颜色来创建该颜色图。 每个颜色通道的范围在0和1之间,因此箱的中心为0.1250,0.3750,0.6250和0.8750。或者用更多Matlab语言:(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 );