问题 识别2D numpy数组中的连续区域


我有一个大的 numpy 我已应用过滤器的数组。我想识别这个蒙版数组中的连续区域。对于任何索引,我在这里定义一个连续的区域 (x1,y1) 到任何其他指数 (x2,y2),如果有一条路径,它们属于同一地区 True 沿轴的相等整数步长的值(对角线是有效步骤)。

这可能不如简单图片那么清晰。鉴于面具:

0010000
0100000
0110000
0000011
1000010

应该确定三个区域,使输出类似

[ [[0,2],[1,1],[2,1],[2,2]], [[3,5],[3,6],[4,5]], [[4,0]] ]

我想用内置的东西 numpy,而不是写我自己的 洪水填充 算法。文档中的一些研究只发现了一个 1D版本 我在问什么


11754
2018-02-25 03:28


起源



答案:


您正在寻找 scipy.ndimage.label, 更多信息 这里label 返回一个与输入相同的数组,其中每个“唯一特征具有唯一值”,因此如果您想要这些特征的索引,您可以执行以下操作:

labels, numL = label(array)
label_indices = [(labels == i).nonzero() for i in xrange(1, numL+1)]

15
2018-02-25 05:11