基本上我有一个图像蒙版,我想找到每列中图像的宽度。有没有办法将其矢量化以提高速度?我试图用arrayfun找到一种方法,但还没有找到任何东西。
r = zeros(1,cols);
for i = 1 : cols
r(i) = range(find(img(:,i)));
end
答案 0 :(得分:2)
以下代码以矢量化方式与您的代码相同:
imglog = img~=0; %// convert to 0 and 1 values
[~, i1] = max(imglog); %// i1 is the position of the first 1
[~, i2] = max(flipud(imglog)); %// size(img,1)+1-i2 is the position of the last 1
r = size(img,1)+1-i2 - i1;
它利用了max
的第二个输出给出了第一个最大化器(对于每一列)的位置这一事实。
答案 1 :(得分:1)
我不确定这是否更快,但num2cell
+ cellfun
似乎是对列上的常规函数进行矢量化的唯一方法:
r = cellfun(@(x)range(find(x)),num2cell(img,1));
答案 2 :(得分:1)