在MATLAB中使用bwlabel / bwconncomp提高对象计数的效率

时间:2014-08-13 23:05:11

标签: matlab image-processing

我正在尝试在MATLAB中计算图像中的对象。我正在使用for循环检查某些值的图像,并且具有此值的任何像素都变为白色(背景为黑色)。

for J = 1:n
    currentImageEqualsJ = 255*(originalImage == i);
    [~,num] = bwlabel(currentImageEqualsJ, 8);
    results_Array(J) = num;
end

这需要很长时间,我听说通过矢量化操作可以提高速度。但是,我不确定如何将其转换为一系列矩阵运算。

我尝试过使用bwconncomp(最终比bwlabel慢)。我很感激任何建议。

1 个答案:

答案 0 :(得分:3)

您可以使用arrayfun同时比较每个比例级别。

Img = randi(255,100,100);
CC = arrayfun(@(x) bwconncomp(bsxfun(@eq,Img,x)), 0:255);
Count = [CC.NumObjects];
bar(Count)

bsxfun用于替换较慢的Img==x操作。

如果除了对象数量之外你不需要bwconncomp的结果,你可以使用subsref <将CCCount合并为一行/ p>

Count = arrayfun(@(x) subsref(bwconncomp(bsxfun(@eq,Img,x)), ...
    struct('type', '.', 'subs', 'NumObjects')), 0:255);