计算图像遮罩中点到一组点的最小距离

2024-04-20 00:31:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的图像掩码(differenceM): enter image description here

每一个白色像素(像素值!=0),我想计算从这个像素到一组点的最小距离。点集是外部轮廓上的点,它将被存储为一个numpy数组[x\u val y\u val]。我在考虑这样做:

...
def calcMinDist(dilPoints):
    ...

#returns 2d array (same shape as image)
def allMinDistDil(dilMask):
    dilPoints = getPoints(dilMask)
    ...
    return arrayOfMinValues

#more code here

blkImg = np.zeros(maskImage.shape,dtype=np.uint8)
blkImg.fill(0) 

img_out = np.where(differenceM,allMinDistDil(dilatedMask),blkImg)

....

但问题是,为了计算从一个像素点到一组点的最小距离(从getPoints函数获得),我需要传入像素点(index?)也。但是(如果我的理解是正确的,)对于这个where函数,它只检查第一个参数中的真值和假值……所以我编写np.哪里()函数不起作用。在

我考虑过使用嵌套的for循环来解决这个问题,但是我尽量避免使用for循环,因为我有很多图像要处理。在

我可以征求一下解决这个问题的建议吗?任何帮助将不胜感激!在


Tags: 函数图像距离defnpval像素where
2条回答

而不是使用np.哪里()函数要查找不为零的特定像素,我应用了:

diffMaskNewArray = np.transpose(np.nonzero(binaryThreshMask))

获取值不是零的点。对于这个点数组,我迭代了这个数组中的每个点,并将它与掩码的边界点数组进行了比较,并使用了:

^{pr2}$

求点与边界点集之间的最小距离。在

(没有足够的代表来评论)至于你可能想要的距离scipy.spatial.distance.cdist( X, Y )。您可以使用以下方法计算最小距离:

from scipy.spatial import distance

def min_distance(points, set_of_points):
    return distance.cdist(np.atleast_1d(point), set_of_points).min()

至于np.哪里你能提供更多关于你的数据结构的信息吗?大多数时候,一个简单的布尔掩码就可以完成这项工作。。。在

相关问题 更多 >