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

时间:2012-02-25 03:28:34

标签: python algorithm 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中的内容,而无需编写自己的Flood Fill算法。文档中的一些研究只发现了我所要求的1D version

1 个答案:

答案 0 :(得分:17)

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

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