我有一个很大的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。
答案 0 :(得分:17)
您正在寻找scipy.ndimage.label
,更多信息here。 label
返回一个与输入形状相同的数组,其中每个“唯一特征具有唯一值”,因此如果您想要这些特征的索引,您可以执行以下操作:
labels, numL = label(array)
label_indices = [(labels == i).nonzero() for i in xrange(1, numL+1)]