我已经完成了一项编程,通过使用从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 :(得分: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);
如果您想计算64个分档中每个分区的像素数,您只需使用hist
count = hist( double(qImg(:)), 64 );