2012-02-25 32 views
10

我有一个大的numpy数组,我已经应用了一个过滤器。我想确定这个蒙版阵列中的连续区域。在这里,如果对于任何其他索引(x2,y2)的索引(x1,y1),如果存在沿着轴的相等整数步长的值的路径(对角线是有效步骤),则它们属于相同区域,所以我将该区域定义为连续的。识别二维numpy阵列中的连续区域

这可能不像一张简单的照片那样清晰。鉴于面膜:

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

回答

14

您正在寻找scipy.ndimage.label,更多详情herelabel返回数组相同的形状,其中每个“独特的功能,具有独特的价值”的输入,所以如果你想要的功能指标,你可以这样做:

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