2

我正在使用 matlab 来获取图像中特定像素值的计数。

读入 matlab 时,图像为 RGBA <512x512x4 uint8>(尽管我们可以忽略 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来做到这一点。有什么帮助吗?

4

2 回答 2

4

其实很简单。像这样的东西

count = sum(im(:, :, 1) == 255 & im(:, :, 2) == 255 & im(:, :, 3) == 255);

会给你这些像素的数量。如果需要,请替换sum为以获取这些像素的索引。find

于 2012-05-23T16:36:56.797 回答
1

您可以通过多种方式做到这一点。一种方法是这样。假设您的图像是 HxWx3,使用您要搜索的 r 值创建一个 HxW 表,一个 HxW 用于 g,一个用于蓝色。您可以将所有这些表作为维度组合在 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 设置有多接近的阈值。

于 2012-05-23T16:34:44.023 回答