NumPy仅在一个方向上进行

时间:2015-09-03 07:15:57

标签: python numpy scipy scikit-image

我的二进制图像如下:

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

对于具有0s值的像素,我想仅向南方向延伸2个像素。 预期结果将是:

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

我该怎么做?

我在下面看到了相关的问题和答案:

Create buffer zone within a Numpy array

result = np.int64(convolve2d(data, np.ones((5, 5)), mode='same') > 0)

但是,我想只朝一个方向卷入

1 个答案:

答案 0 :(得分:4)

使用scipy.ndimage.binary_erosion()

from scipy import ndimage

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

kernel = [[1], [1], [1], [0], [0]]
ndimage.binary_erosion(data, kernel, border_value=1).astype(np.uint8)