通过python中的均匀余量减少3D体积蒙版

时间:2018-08-30 03:10:18

标签: python numpy scipy

我正在使用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空间中。谢谢您的投入。

1 个答案:

答案 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

请注意,这也会腐蚀内表面