Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 将点与图像上最近的对象配对_Algorithm_Image Processing - Fatal编程技术网

Algorithm 将点与图像上最近的对象配对

Algorithm 将点与图像上最近的对象配对,algorithm,image-processing,Algorithm,Image Processing,我有很多点和它们的坐标。我想分析只包含黑色对象的二值图像-这些对象近似为矩形-并为集合中的每个点指定最近的对象。我所知道的是,在我的集合中,每一点都有一个物体在它附近,我只是不知道在哪里 我的想法是找到图像上的对象,然后使用其中一种算法解决最近点对问题。 或者从我的集合中的某个点开始扫描图像以搜索该对象会更好吗?目标是找到这些黑色对象的位置和大小。我一直在寻找一种明显比我提到的算法更好的算法,但运气不好。我假设每个点都可以单独考虑,要么没有斑点最接近两个点,要么如果是这种情况,两个或多个点“识别

我有很多点和它们的坐标。我想分析只包含黑色对象的二值图像-这些对象近似为矩形-并为集合中的每个点指定最近的对象。我所知道的是,在我的集合中,每一点都有一个物体在它附近,我只是不知道在哪里

我的想法是找到图像上的对象,然后使用其中一种算法解决最近点对问题。
或者从我的集合中的某个点开始扫描图像以搜索该对象会更好吗?目标是找到这些黑色对象的位置和大小。我一直在寻找一种明显比我提到的算法更好的算法,但运气不好。

我假设每个点都可以单独考虑,要么没有斑点最接近两个点,要么如果是这种情况,两个或多个点“识别”同一个斑点是可以接受的

最简单的算法是从圆点开始,对半径不断增大的圆盘进行广度优先搜索,直到检测到黑色为止。这将查找最近的blob。您可以通过第一个接触点来识别blob,或者在blob上进行整体填充,以选择blob中的所有点(如果需要)


如果需要考虑处理时间,并且您对最小blob维度有一些期望,那么您可以通过在半径为R、2R、3R的圆中搜索黑色来加快处理过程(其中R是已知的最小blob维度)。一旦在某个nR处检测到黑色,则需要将搜索回溯到半径(n-1)R和nR之间的区域,以确保找到最近的blob。显然,如果你不能保证blob有最小的维度,那么你就可以跳过一个blob并检测下一个最近的blob,那么这就行不通了。除非典型的斑点距离较大,否则节省的成本可能不会很大。

在OpenCV中,有一个名为PointPolyContest的函数,可用于获取从点到最近轮廓边的有符号距离。因此,您只需对图像进行二值化即可提取黑色区域,并使用PointPolyMonTest距离对每个点的轮廓进行测试。

给我们看一张图像怎么样?告诉我们你在使用什么工具,在哪些操作系统上使用C++,OpenCV,Windows。这里有一个例子-我想找到黑色斑点的位置和大致大小,并将最近的黑色斑点分配给每个红点(我知道红点的坐标)。我建议每个红点都有一个BFS。这样,您就不必处理整个图像。您有没有想过如何定义最近的
?如果斑点的最近点离点最近,那么斑点是否靠近点?还是水滴质心到圆点的距离?或者我们正在尝试将斑点和点配对,以最小化所有斑点质心与其关联点之间的总组合距离?Nearest=斑点的最近点离点最近。我只需要取点,然后为每个点找到最近的斑点。请记住,我不知道斑点的位置或大小。每个点都有一个我应该分配给该点的斑点。不多也不少。我应该找出斑点的大小和位置,所以是的,一旦我找到第一个像素,我需要使用一些算法来找到斑点的大小和位置(中心点)和大小。我不需要所有像素的斑点,我可以得到大小和位置从轮廓只。我想这比在这里使用洪水填充要快。但是我需要找到每个黑色区域的轮廓,对吗?是的。你必须做一次,然后在每个点上使用此信息。好的。首先,我需要一个算法来实现这一点。有什么建议吗?我以为你在用OpenCV。在OpenCV中有一个函数findContours。