MATLAB:查找图像中特定rgb像素值的索引/计数

时间:2012-05-23 16:14:59

标签: matlab image-processing

我正在使用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还没有做到这一点。有帮助吗?

2 个答案:

答案 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设置的接近阈值。