在 OpenCV python 中测量点到掩模的距离

smt*_*tsp 6 python algorithm opencv mask image-processing

假设我有一个物体和一个点的掩模。我想找到对象蒙版最接近该点的点。

例如,在我的绘图中,有一个对象,图像中的蓝色形状(假设内部也是对象蒙版的一部分)。红点是我想要找到距对象蒙版最近距离的点。

图像

所以,我想找到粗绿线,因为它是到面罩的最短距离,而不是其他线(粉色、橙色等)。我可以使用以下方法之一来执行此操作:

  • 一种低效的方法是使用类似的方法(暴力)找到所有像素到该点的距离。
  • 另一种方法是创建许多朝向掩模的具有 epsilon 角度差的线,并找到该线上最近的点,这也不是很好。
  • 我可以在边缘上创建线条,并找到对象边界上每条线条的最近点。(这可能没有我想象的那么容易,首先我需要找到外边框等)

但这些方法都不是优雅的。我想知道什么是更优雅、最有效的方法来确定这一点?

Jul*_*ien 1

您可以进行某种二分搜索:

  • 让我们将 P 称为你的点并考虑以 P 为中心的圆
  • 在蒙版上选取任意点 M,穿过 M 的圆将与蒙版相交
  • 现在重复直到收敛,如果圆与掩模相交,则减小半径,否则增加半径(按二分搜索类型量)

如果你的面具没有很好地连接,这将不起作用,但如果不是这种情况,我怀疑你能比暴力做得更好......

对于二分搜索的圆形掩模相交检查时间日志来说,总成本应该是线性的。