我正在使用3D布尔数组来掩盖一个体积。我的目标是制作一个遮罩,并在所有尺寸上将遮罩的面积减小一定的距离m。
是否可以使用一些常用的库(numpy,scipy,pandas等)来实现此目的?
I found some code online使用多个for循环将遮罩扩展一维。这适用于扩展情况,但我觉得这里有一个更紧凑的方法。
这是我在2D中寻找的内容的最小示例。
原始
array([[0., 0., 1., 0., 0.],
[0., 1., 1., 1., 0.],
[1., 1., 1., 1., 1.],
[0., 1., 1., 1., 0.],
[0., 0., 1., 0., 0.]])
均匀缩小1个像素
array([[0., 0., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 1., 1., 1., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 0., 0.]])
但是我希望它在3D空间中。谢谢您的投入。
答案 0 :(得分:2)
您可能正在寻找scipy.ndimage.binary_erosion(a)
:
a = np.array([
[0., 0., 1., 0., 0.],
[0., 1., 1., 1., 0.],
[1., 1., 1., 1., 1.],
[0., 1., 1., 1., 0.],
[0., 0., 1., 0., 0.]
])
b = scipy.ndimage.binary_erosion(a) # returns an array of bool
请注意,这也会腐蚀内表面