我正在尝试在MATLAB中计算图像中的对象。我正在使用for循环检查某些值的图像,并且具有此值的任何像素都变为白色(背景为黑色)。
for J = 1:n
currentImageEqualsJ = 255*(originalImage == i);
[~,num] = bwlabel(currentImageEqualsJ, 8);
results_Array(J) = num;
end
这需要很长时间,我听说通过矢量化操作可以提高速度。但是,我不确定如何将其转换为一系列矩阵运算。
我尝试过使用bwconncomp(最终比bwlabel慢)。我很感激任何建议。
答案 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
<将CC
和Count
合并为一行/ p>
Count = arrayfun(@(x) subsref(bwconncomp(bsxfun(@eq,Img,x)), ...
struct('type', '.', 'subs', 'NumObjects')), 0:255);