有没有一个函数与binary_dilation
相反?我希望从0和1的数组中删除“孤岛”。也就是说,如果2D数组中的值1没有至少1个相邻的邻居也为1,则其值将设置为0(而不是像binary_dilation
中那样将其邻居的值设置为1)。例如:
test = np.zeros((5,5))
test[1,1] = test[1,2] = test[3,3] = test[4,3] = test[0,3] = test[3,1] = 1
test
array([[0., 0., 0., 1., 0.],
[0., 1., 1., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 1., 0., 1., 0.],
[0., 0., 0., 1., 0.]])
我要寻找的函数将返回:
array([[0., 0., 0., 0., 0.],
[0., 1., 1., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 1., 0.]])
请注意,位置[0,3]和[3,1]中的值从1更改为0,因为它们没有值等于1的相邻值(对角线不算作相邻值)。你知道吗
您可以创建一个包含单元格的掩码来检查,并使用
test
进行二维卷积,以识别与其相邻的1
单元格。卷积和test
的逻辑与应该产生所需的输出。你知道吗首先定义你的面具。由于只查找上/下和左/右邻接,因此需要以下内容:
如果您想包含对角线元素,只需更新
mask
以在角点中包含1
。你知道吗现在应用
test
和mask
的二维卷积。这将两个矩阵的值相乘和相加。使用此掩码,将返回每个单元格的所有相邻值之和。你知道吗必须指定
mode='same'
,以便结果与第一个输入(test
)的大小相同。请注意,要从test
中删除的两个单元格在卷积输出中是0
。你知道吗最后,使用此输出和
test
执行按元素的and
操作以查找所需的单元格:更新
在最后一步中,您还可以
clip
将0和1之间的卷积中的值进行逐元素乘法。你知道吗相关问题 更多 >
编程相关推荐