Python Numpy:邻居的价值替代

Python Numpy:邻居的价值替代,python,numpy,neighbours,Python,Numpy,Neighbours,我需要根据相邻项的值更改numpy数组中项的值。 更具体地说,让我们假设一个表示图像的numpy中的每个项目只有3个可能的值。让我们假设我的numpy如下所示: [[1,1,1,1,1,1,1], [1,1,1,1,1,1,1], [1,1,1,2,1,1,1], [1,1,1,2,1,1,1], [1,1,1,1,1,1,1], [3,3,3,3,3,3,3], [3,3,3,3,3,3,3], [3,3,3,3,3,3,3] ] 我想要的是: 因为在这个例子中,包含值2的一组

我需要根据相邻项的值更改numpy数组中项的值。 更具体地说,让我们假设一个表示图像的numpy中的每个项目只有3个可能的值。让我们假设我的numpy如下所示:

[[1,1,1,1,1,1,1],
 [1,1,1,1,1,1,1],
 [1,1,1,2,1,1,1],
 [1,1,1,2,1,1,1],
 [1,1,1,1,1,1,1],
 [3,3,3,3,3,3,3],
 [3,3,3,3,3,3,3],
 [3,3,3,3,3,3,3]
]
我想要的是: 因为在这个例子中,包含值2的一组相邻项的大小小于(3 x 3)矩阵,所以我需要给它们分配相邻项的值:在这种情况下是1! 由此产生的numpy必须

[[1,1,1,1,1,1,1],
 [1,1,1,1,1,1,1],
 [1,1,1,**1**,1,1,1],
 [1,1,1,**1**,1,1,1],
 [1,1,1,1,1,1,1],
 [3,3,3,3,3,3,3],
 [3,3,3,3,3,3,3],
 [3,3,3,3,3,3,3]
]

我想要的是,消除“伪”元素(在以1值为主的区域中,只有两个单元格包含值2),并将其统一到它们出现的区域。我希望我已经解释过了。谢谢你能给我的任何信息。非常感谢。

在图像处理中,此操作称为。在您的情况下,您可以使用

输出:


在图像处理中,这种操作称为。在您的情况下,您可以使用

输出:


你对虚假物品的“邻域”的定义是什么?特别是在相邻的伪项不形成矩形的情况下?你能用这样的例子来编辑你的答案,并澄清“邻居”应该是什么吗?考虑一个5x5网格。假设其边界单元包含
2
——也就是说,它们形成了一个漂亮的
2
s的闭合“环”。假设下一个内圈有
1
s。这就离开了中央细胞。让我们假设中心单元有一个
2
。我们现在应该把中央
2
视为“伪环”,因为它被
1
s的中间环包围,还是应该把
1
s的中间环视为伪环,因为它们被
2
s的外环包围(更不用说有另一个
2
的中央单元了)?是的,当然。你说得对。我的想法是,如果你报告我,“伪”元素应该是包含内环1的元素,因为它被包含2的更大环包围。你对伪项的“邻域”的定义是什么?特别是在相邻的伪项不形成矩形的情况下?你能用这样的例子来编辑你的答案,并澄清“邻居”应该是什么吗?考虑一个5x5网格。假设其边界单元包含
2
——也就是说,它们形成了一个漂亮的
2
s的闭合“环”。假设下一个内圈有
1
s。这就离开了中央细胞。让我们假设中心单元有一个
2
。我们现在应该把中央
2
视为“伪环”,因为它被
1
s的中间环包围,还是应该把
1
s的中间环视为伪环,因为它们被
2
s的外环包围(更不用说有另一个
2
的中央单元了)?是的,当然。你说得对。我的想法是,如果您报告我,“伪”元素应该是包含内环1的元素,因为它被包含2的更大环包围。
import numpy as np
from skimage.morphology.grey import opening
from skimage.morphology import square

a = np.array(
[[1,1,1,1,1,1,1],
 [1,1,1,1,1,1,1],
 [1,1,1,2,1,1,1],
 [1,1,1,2,1,1,1],
 [1,1,1,1,1,1,1],
 [3,3,3,3,3,3,3],
 [3,3,3,3,3,3,3],
 [3,3,3,3,3,3,3]
])

opening(a, square(3))
[[1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1]
 [3 3 3 3 3 3 3]
 [3 3 3 3 3 3 3]
 [3 3 3 3 3 3 3]]