gpt4 book ai didi

python - Numpy数组中两个 "islands"/"connected components"之间的成对距离

转载 作者:行者123 更新时间:2023-12-03 16:07:17 27 4
gpt4 key购买 nike

考虑以下图像,以numpy数组形式存储:

a = [[0,0,0,0,0,1,1,0,0,0],
[0,0,0,0,1,1,1,1,0,0],
[0,0,0,0,0,1,1,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,2,0,0,0,0],
[0,0,0,0,0,2,2,0,0,0],
[0,0,0,0,0,2,0,0,0,0],
[0,0,0,0,3,3,3,0,0,0],
[4,0,0,0,0,0,0,0,0,0],
[4,4,0,0,0,0,0,0,0,0],
[4,4,4,0,0,0,0,0,0,0]]

a = np.array(a)
零表示背景像素,1,2,3和4表示属于对象的像素。您可以看到对象始终在图像中形成连续的岛或区域。我想知道每对物体之间的距离。作为距离度量,我希望在对象的彼此最接近的像素之间具有最短的直线距离。示例: Distance(2,3) = 1,因为他们接触了。 Distance(1,2) = 2,因为恰好有一个背景像素将两个区域分开,换句话说,对象的最近像素相隔两个像素。
谁能告诉我在Python中如何解决这个问题?或将我链接到一些资源?

最佳答案

这是您需要的:

from scipy.spatial.distance import cdist
def Distance(a, m, n):
return cdist(np.argwhere(a==m),np.argwhere(a==n),'minkowski',p=1.).min()
或类似地按照@MaxPowers注释(声明: cityblock更快):
  return cdist(np.argwhere(a==m),np.argwhere(a==n),'cityblock').min()
找到孤岛的位置并计算位置的成对距离并获得最小值。我不确定您想要的距离100%,但是我认为您正在寻找 l1规范。如果没有,您可以将 cdist度量更改为所需的度量。
输出:
Distance(a,2,3)
1.0
Distance(a,2,1)
2.0
Distance(a,3,1)
5.0
Distance(a,4,3)
5.0

关于python - Numpy数组中两个 "islands"/"connected components"之间的成对距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62810872/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com