实际上,我是 Matlab 的新手。我对此了解不多。如何计算图像中的颜色数量?
例如,我有一张 DNA 微阵列的图像(这是一个 RGB 图像),我想计算它有多少个黄点、红点和绿点。
实际上,我是 Matlab 的新手。我对此了解不多。如何计算图像中的颜色数量?
例如,我有一张 DNA 微阵列的图像(这是一个 RGB 图像),我想计算它有多少个黄点、红点和绿点。
如果我是你的形象,你可以使用这个:
size(unique(reshape(I, [], 3), 'rows'), 1)
首先将图像重塑为 nx3,其中 n 代表图像中的像素数,应用 unique 函数折叠相等的行(具有相同颜色的像素),最后生成矩阵的大小将为您提供唯一的数量颜色。
如果您使用的是 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 的循环。
如果您有单个像素点,并且“红色”、“黄色”和“绿色”正好表示 [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(:));
等等...