如何在matlab中计算图像中的颜色数量

时间:2012-12-15 06:15:58

标签: matlab image-processing colors

实际上,我是Matlab的新手。我不太了解它。 如何计算am图像中的颜色数?

例如,我有DNA微阵列图像(RGB图像),我想计算它有多少黄点,红点和绿点。

3 个答案:

答案 0 :(得分:0)

如果您使用RGB,那么它也取决于它是24位,32位还是64位。 例如对于24位图像,有256 * 256 * 256 = 16,777,216的RGB可能组合。 ;)

将颜色R,G,B分开是不是更容易,然后你计算每个分开的subplots? ;)

试试这个: 获取每个R,G,B通道。然后对其进行直方图计算每个R,G,B像素。

DNA = imread('peppers.png');
redChannel = DNA(:, :, 1);
greenChannel = DNA(:, :, 2);
blueChannel = DNA(:, :, 3);

For red:
[redCount grayCount] = imhist(redPlane);
subplot(2, 2, 2);
imshow( DNA(:,:,2));
>> redcount
ans = 38385 // SAMPLE count

如果您愿意,可以使用1:3的循环。

答案 1 :(得分:0)

如果您有单个像素点而“红色”,“黄色”和“绿色”意味着[255 0 0],[0 255 255]和[0 255 0],那么您的问题可以很简单地回答:

red_dots = (DNA(:,:,1)==255); 
n_red_dots = sum(red_dots(:));

yellow_dots = (DNA(:,:,2)==255 & DNA(:,:,3)==255);
n_yellow_dots = sum(yellow_dots(:));

green_dots = (DNA(:,:,2)==255); 
n_green_dots = sum(green_dots(:));

如果您的颜色不是那么精确,但仍然是单像素(或者它们大小相同,而您对粗略比例感兴趣),则可以进行阈值处理:

redish_dots = (DNA(:,:,1)>200 & DNA(:,:,2)<40 & DNA(:,:,3)<40);
n_redish_dots = sum(redish_dots(:));

依旧......

答案 2 :(得分:0)

如果我是你的形象,你可以使用它:

size(unique(reshape(I, [], 3), 'rows'), 1)

首先将图像重新整形为nx3,其中n代表图像中的像素数,应用唯一函数折叠相等的行(具有相同颜色的像素),最后得到的矩阵的大小将为您提供独特颜色的数量。