对于每个单个白色像素(像素值!= 0),我想计算从该像素到一组点的最小距离。该组点是外部轮廓上的点,这些点将存储为[x_val y_val]的numpy数组。我正在考虑这样做:
...
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函数获得),我也需要传递像素点(索引?)。但是(如果我的理解是正确的)使用where函数,它将仅检查第一个参数中的true和false值...因此,我编写np.where()函数的方式将不起作用。
我已经考虑过使用嵌套的for循环来解决此问题,但是我试图避免使用for循环,因为我要处理很多图像。
我可以要求解决此问题的建议吗?任何帮助将不胜感激!
答案 0 :(得分:1)
(评论不足)对于距离,您可能需要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。在哪里可以提供更多数据结构?多数情况下,一个简单的布尔型掩码会完成此任务...
答案 1 :(得分:0)
我没有使用np.where()函数查找不为零的特定像素,而是应用了:
diffMaskNewArray = np.transpose(np.nonzero(binaryThreshMask))
获取值不为零的点。使用该点数组,我遍历了该数组中的每个点,并将其与蒙版的边界点数组进行了比较,并使用:
shortestDistDil = np.amin(distance.cdist(a, b, 'euclidean'))
查找点与边界点集之间的最小距离。