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

6

我正在进行图像分析,并生成了一组布尔类型的种子 数组:

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]])

有没有任何函数或简单的方法来解决我的“径向扩展”问题?

提前感谢,BBQuercus

3个回答

6
为什么不直接使用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]])

5

使用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]]

0

1
很遗憾,我无法将它嵌入到更大的数组中 - 所有图像的大小(像素)都相同。嵌入会导致进一步分析出现偏差/阻碍。但我仍然可能能够使用其中的一些内容。谢谢。 - BBQuercus

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