python - 在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 空间中。感谢您的任何意见。
解决方案
您可能正在寻找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
请注意,这也会侵蚀内表面
推荐阅读
- python - Pycharm 警告:预期为“collection.iterable”,改为使用迭代器
- excel - 如何通过将 N/A 值视为零来执行多个 VLOOKUP 值的求和?
- php - 如何使用在数组中创建的超链接中的图像并使用 _GET 将它们放在同一页面上
- c# - Crystal Reports中如何管理多个明细部分?
- java - 将 C++ 应用程序(没有接口,只有算法)移植到 Android?
- json - 从 Json 响应中动态设置制表符标题和字段值
- c++ - 未找到重载的成员函数,类在header中
- c# - WPF ComboBox:将 SelectedItem 绑定到类成员
- assembly - 如何使用循环终止递归函数?
- javascript - 达到存储限制时如何自动为本地 Pouch 数据库腾出空间?