我正在使用matlab来获取图像中特定像素值的计数。
图像是RGBA< 512x512x4 uint8>当读入matlab时(尽管我们可以忽略alpha通道)。
除了;
[width, height, depth] = size(im);
for x = 1 : width;
for y = 1: height;
r = im(x,y,1);
g = im(x,y,2);
b = im(x,y,3);
...
end
end
有没有办法可以使用矩阵运算来做到这一点?有点像:
X = find(im(:,:,1) == 255 && im(:,:,2) == 255 && im(:,:,3) == 255);
count = length(X);
% Count being the number of pixels with RGB value (255,255,255) in the image.
我猜这里有多种方法可以做到这一点(看看相交的,独特的函数)但是我还不够聪明,而matlab还没有做到这一点。有帮助吗?
答案 0 :(得分:4)
实际上非常简单。像这样的东西
count = sum(im(:, :, 1) == 255 & im(:, :, 2) == 255 & im(:, :, 3) == 255);
将为您提供此类像素的计数。如果需要,请将sum
替换为find
以获取这些像素的索引。
答案 1 :(得分:1)
您可以通过多种方式实现这一目标。 一种方法是这样。 假设你的图像是HxWx3 创建一个HxW表,其中包含您要搜索的r值,一个HxW表示g,另一个表示蓝色。您可以将所有thos表组合为HxWx3表F中的维度。 从im中减去F并使用find()函数得到归零值的索引。
F(:,:,1)=R*ones(H,W); F(:,:,2)=G*ones(H,W); F(:,:,3)=B*ones(H,W);
然后,如果你做im-F,你就会在想要的位置获得零
d=F-im; [r,c]=find((d(:,:,1))==0)
这样你就可以输入你希望rgb设置的接近阈值。