如何扩展/扩展一个numpy数组?

时间:2019-06-24 11:53:47

标签: python numpy

我正在执行图像分析并以布尔array的形式生成种子:

import numpy as np

# Example output array
a = np.array([[False, False, False], [False, True, False], [False, False, False]])

>>> a
array([[False, False, False],
       [False,  True, False],
       [False, False, False]])

由于我想对True值周围的区域进行后续分析,因此我想将其扩展(扩展一定数量,例如像素)。这将导致以下结果:

>>> a
array([[False, True, False],
       [True, True, True],
       [False, True, False]])

有没有function或简单的方法可以解决我的“径向扩展”问题?

预先感谢, BBQuercus

3 个答案:

答案 0 :(得分:1)

使用scipy.signal.convolve2d的解决方案:

import numpy as np
from scipy.signal import convolve2d


# Example input
# [[False False False False False]
#  [False False  True  True False]
#  [False False False False False]
#  [False False False False False]
#  [False False False False  True]]
in_array = np.zeros((5, 5), dtype=bool)
in_array[1,2] = True
in_array[1,3] = True
in_array[4,4] = True

# Kernel: here you should define how much the True "dilates"

kernel = np.asarray([[False, True, False],
                     [True, True, True],
                     [False, True, False]])

# Convolution happens here
# Convolution is not possible for bool values though, so we convert to int and
# back. That works because bool(N) == True if N != 0.
result = convolve2d(in_array.astype(int), kernel.astype(int), mode='same').astype(bool)
print(result)

# Result:
# [[False False  True  True False]
#  [False  True  True  True  True]
#  [False False  True  True False]
#  [False False False False  True]
#  [False False False  True  True]]

答案 1 :(得分:1)

为什么不简单地使用 scipy.ndimage.binary_dilation

import numpy as np
from scipy import ndimage

a = np.array([[False, False, False], [False, True, False], [False, False, False]])
b = ndimage.binary_dilation(a, [[False, True, False], [True, True, True], [False, True, False]])

结果:

>>> a
array([[False, False, False],
       [False,  True, False],
       [False, False, False]])
>>> b
array([[False,  True, False],
       [ True,  True,  True],
       [False,  True, False]])

答案 2 :(得分:0)

我建议的一种简单方法是创建一个较大的数组并将较小的数组嵌入到其中,如以下所述:

How to "embed" a small numpy array into a predefined block of a large numpy array?

我刚刚开始尝试回答关于stackoverflow的问题,所以我是一个初学者。 因此,如果我的答案过于简单或不是您要找的答案,请原谅我。