首页 > 解决方案 > 在python中通过均匀边距减少3D体积蒙版

问题描述

我正在使用屏蔽卷的 3D 布尔数组。我的目标是获取一个蒙版,并在所有维度上将蒙版的面积缩小一些边距,m。

有没有一种简单的方法可以使用一些常用库(numpy、scipy、pandas 等)来做到这一点?

我在网上找到了一些代码,它使用多个 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 空间中。感谢您的任何意见。

标签: pythonnumpyscipy

解决方案


您可能正在寻找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

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


推荐阅读