【问题标题】:MATLAB: Find indices/count of specific rgb pixel values in imageMATLAB:查找图像中特定 RGB 像素值的索引/计数
【发布时间】:2025-12-08 05:00:02
【问题描述】:

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

读入 matlab 时图像为 RGBA (尽管我们可以忽略 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 还不够聪明,无法做到这一点。有什么帮助吗?

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    其实很简单。像这样的

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

    将为您提供此类像素的计数。如果需要,将 sum 替换为 find 以获取这些像素的索引。

    【讨论】:

    • 基于此我使用:count = length(find(im(:,:,1) == 255 & im(:,:,2) == 255 & im(:,:, 3) == 255) == 1);这正是我想要做的。谢谢!
    • 好吧,lengthfind 很好 - 但它会更贵。使用sum 很简单,做的事情完全相同,而且速度更快。当然,如果你想要索引,你需要find
    • 啊,我使用 sum 使用:R = sum(sum(im(:,:,1) == 0 & im(:,:,2) == 0 & im(:,:,3) == 0)); 单线。再次感谢
    【解决方案2】:

    您可以通过多种方式做到这一点。 一种方法是这样。 假设您的图像是 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 设置的接近程度的阈值。

    【讨论】:

    • 这是我试图采取的路线(逻辑掩码)但无法正常工作。为了简洁起见,必须向安萨里提供公认的答案,但谢谢! :)