首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从二进制python数组中删除邻域小于N的元素

从二进制python数组中删除邻域小于N的元素
EN

Stack Overflow用户
提问于 2018-06-29 03:33:54
回答 1查看 68关注 0票数 0

假设我有这样的结果:

代码语言:javascript
复制
import numpy as np
x = np.zeros((10,16), dtype=np.int)
x[6:8,3:11] = 1
x[4:6,5:7] = 1
x[2:4,4:8] = 1
x[4:6,9:11] = 1
x[7,2] = 1
x[6,11] = 1
x[8,3] = 1
print(x)

输出:

代码语言:javascript
复制
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0]
 [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0]
 [0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0]
 [0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0]
 [0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0]
 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

我想对它进行过滤,这样4个邻域(即上、上、左、右、下)中少于2个邻域的元素就会被删除。所以,我最终会得到(最后三个位置被设置为一个删除):

代码语言:javascript
复制
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0]
 [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0]
 [0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0]
 [0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0]
 [0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

我尝试使用scipy.ndimage.morphology.binary_closingscipy.ndimage.morphology.binary_openingscipy.ndimage.morphology.binary_dilationscipy.ndimage.morphology.binary_erosion,但结果不是我想要的。我可以创建2个for循环,遍历数组的每个元素,检查相邻元素,但我觉得有更好的方法来做这件事。我说错了吗?

我更感兴趣的是这种特定的情况(4个邻域,保持2个邻域),但是是否容易将其推广到另一个邻域或多个邻域(假设是二进制数组)?

EN

回答 1

Stack Overflow用户

发布于 2018-06-29 04:09:03

我设法做到了这一点:

代码语言:javascript
复制
from scipy.signal import convolve2d
kernel = [[0,1,0],[1,1,1],[0,1,0]]
filtered = convolve2d(x, kernel, mode='same')
x[filtered<=2] = 0

已过滤:

代码语言:javascript
复制
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0]
 [0 0 0 1 3 4 4 3 1 0 0 0 0 0 0 0]
 [0 0 0 1 3 5 5 3 1 1 1 0 0 0 0 0]
 [0 0 0 0 2 4 4 2 1 3 3 1 0 0 0 0]
 [0 0 0 1 2 4 4 2 2 4 4 2 0 0 0 0]
 [0 0 2 3 4 5 5 4 4 5 5 2 1 0 0 0]
 [0 1 2 5 4 4 4 4 4 4 3 2 0 0 0 0]
 [0 0 2 2 2 1 1 1 1 1 1 0 0 0 0 0]
 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]]

我得到了我想要的输出。谢谢你@user3080953

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51090121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档