在一个二进制的numpy数组中提取连续为1的区域。

3
我正在寻找一种方法来提取二进制numpy数组中的连续1区域,并将其替换为不同的值。例如,对于以下数组:
x=[[0,1,1,0,0,0],
   [0,1,1,0,0,0],
   [0,1,0,0,0,0],
   [0,0,0,1,1,0],
   [0,0,1,1,1,0],
   [0,0,0,0,0,0]]

期望的结果:

x=[[0,2,2,0,0,0],
   [0,2,2,0,0,0],
   [0,2,0,0,0,0],
   [0,0,0,3,3,0],
   [0,0,3,3,3,0],
   [0,0,0,0,0,0]]
1个回答

2
使用 scipy.ndimage.label
x=[[0,1,1,0,0,0],
   [0,1,1,0,0,0],
   [0,1,0,0,0,0],
   [0,0,0,1,1,0],
   [0,0,1,1,1,0],
   [0,0,0,0,0,0]]

a = np.array(x)

from scipy.ndimage import label
b = label(a)[0]

输出:

# b
array([[0, 1, 1, 0, 0, 0],
       [0, 1, 1, 0, 0, 0],
       [0, 1, 0, 0, 0, 0],
       [0, 0, 0, 2, 2, 0],
       [0, 0, 2, 2, 2, 0],
       [0, 0, 0, 0, 0, 0]], dtype=int32)

从2开始标记:

b = (label(a)[0]+1)*a

输出:

array([[0, 2, 2, 0, 0, 0],
       [0, 2, 2, 0, 0, 0],
       [0, 2, 0, 0, 0, 0],
       [0, 0, 0, 3, 3, 0],
       [0, 0, 3, 3, 3, 0],
       [0, 0, 0, 0, 0, 0]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接