我的坐标有很多点。我想分析一个只包含黑色物体的二进制图像 - 这些对象大致是矩形 - 对于我的集合中的每个点,分配最近的对象。我所知道的是,对于我的集合中的每个点,在它附近的地方只有一个对象,我只是不知道在哪里。
我的想法是在图像上找到对象,然后使用其中一种算法来获得最接近的点对问题。 或者从我搜索该对象的一个点开始以某种方式开始扫描图像会更好吗?目标是找到这些黑色物体的位置和大小。一直在寻找一种比我提到的算法明显更好的算法,但没有太多运气。
答案 0 :(得分:1)
我假设每个点都可以单独考虑,因为没有blob最接近两个点,或者如果是这样的话,可以接受两个或多个点来识别'同样的blob。
最简单的算法是在点上增加半径的光盘上进行广度优先搜索,直到检测到黑色。这会找到最近的blob。您可以通过第一个接触点识别斑点,或者然后可以在斑点上执行泛光填充,以便在需要时选择斑点中的所有点。
如果关注处理时间,并且您对最小斑点尺寸有一些期望,那么您可以通过在半径为R,2R,3R的圆圈中搜索黑色来加速该过程(其中R是已知的最小斑点尺寸)。一旦在某个nR处检测到黑色,则需要将搜索回溯到半径(n-1)R和nR之间的区域,以确保找到最近的斑点。显然,如果你不能保证blob具有一些最小尺寸,那么你就可以工作了,因为你可以跳过一个blob并检测下一个最接近的blob。除非典型的斑点距离很大,否则节省的费用可能并不显着。
答案 1 :(得分:0)
在OpenCV中,有一个名为 pointPolygonTest 的函数,可用于获取从点到最近轮廓边的有符号距离。因此,您只需要对图像进行二值化以提取黑色区域,并使用pointPolygonTest距离测试每个点与轮廓的对比。