仅在numpy数组的中心填充零值

g2ieeal7  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(119)

我正在使用一个rasterio光栅,我已经'读'到python中,所以它现在是一个numpy数组。np数组的外边缘全是零,内部全是1,除了中间的1偶尔是零,参见下面的示例数组。我想把所有的零都留在数组的外部(即,保持它们为零),但是想要转换完全被一包围的零(即,1的圆环中间的0)到1。不过,我真的不知道如何开始。
当前阵列:

import numpy as np
arr = np.array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 0, 0, 1, 1, 0],
[0, 1, 1, 0, 1, 1, 0, 0],
[0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]])

目标数组:

import numpy as np
arr = np.array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 0, 0],
[0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]])
j7dteeu8

j7dteeu81#

可以使用scipy.ndimage.**binary_fill_holes**

import numpy as np
from scipy.ndimage import binary_fill_holes

arr = np.array([[0, 0, 0, 0, 0, 0, 0, 0],
                [0, 1, 1, 1, 1, 1, 1, 0],
                [0, 1, 1, 0, 0, 1, 1, 0],
                [0, 1, 1, 0, 1, 1, 0, 0],
                [0, 1, 1, 1, 1, 1, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0]])

filled_arr = binary_fill_holes(arr).astype(int)

print(filled_arr)

输出:

[[0 0 0 0 0 0 0 0]
 [0 1 1 1 1 1 1 0]
 [0 1 1 1 1 1 1 0]
 [0 1 1 1 1 1 0 0]
 [0 1 1 1 1 1 0 0]
 [0 0 0 0 0 0 0 0]]

相关问题