-2

实际上,我是 Matlab 的新手。我对此了解不多。如何计算图像中的颜色数量?

例如,我有一张 DNA 微阵列的图像(这是一个 RGB 图像),我想计算它有多少个黄点、红点和绿点。

4

3 回答 3

1

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

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

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

于 2017-06-01T15:04:14.867 回答
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 的循环。

于 2012-12-15T06:26:04.937 回答
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(:));

等等...

于 2012-12-15T08:00:12.467 回答