在Matlab中查找固体对象的顶面

时间:2018-10-15 21:39:57

标签: matlab vectorization

我在名为mask1000x1000x1000 uint16)的Matlab 3D数组中对实体对象进行了二进制分割。我需要提取顶表面,即每个列向量的第一个非零元素(在第二维和第三维上)。我可以使用以下代码段进行此操作:

s = zeros(1000,1000); 
for y=1:1000
    for x=1:1000
        s(x,y) = find(mask(:,x,y),1);
    end 
end

有没有一种方法可以对代码进行矢量化处理并避免for循环?

1 个答案:

答案 0 :(得分:2)

查找maximum值的索引(在您的情况下为1)。 Squeeze这些索引可删除单例尺寸并转换为所需的形式(s)。

[~, ind] = max(mask); 
s = squeeze(ind);