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
C++ 求势最大圆_C++_Image Processing_Geometry_Computational Geometry_Image Recognition - Fatal编程技术网

C++ 求势最大圆

C++ 求势最大圆,c++,image-processing,geometry,computational-geometry,image-recognition,C++,Image Processing,Geometry,Computational Geometry,Image Recognition,我有一组2D点,我想找到潜在的最大空圆。我的意思不是要编写最大空圆算法 这里有一张图片试图解释我的话 正如你们所看到的,圆里面有点,所以我想要的是一个算法,给定一组2D点,可以计算出那个圆 这组点表示包含一个孔的下水道墙。问题是这个洞可能被塞住了,在圆圈的一个或多个侧面可能有一些污垢。所以,当你用激光探测那个部分时,你得到的不是一个完美的圆,而是一个半圆。我想找到的是原来的洞,干净的洞,当没有污垢。当我说势时,我指的是原始的洞。在图像中,绿色圆圈是原始孔,圆圈内的点是某种污垢。此操作的最终目

我有一组2D点,我想找到潜在的最大空圆。我的意思不是要编写最大空圆算法

这里有一张图片试图解释我的话

正如你们所看到的,圆里面有点,所以我想要的是一个算法,给定一组2D点,可以计算出那个圆

这组点表示包含一个孔的下水道墙。问题是这个洞可能被塞住了,在圆圈的一个或多个侧面可能有一些污垢。所以,当你用激光探测那个部分时,你得到的不是一个完美的圆,而是一个半圆。我想找到的是原来的洞,干净的洞,当没有污垢。当我说势时,我指的是原始的洞。在图像中,绿色圆圈是原始孔,圆圈内的点是某种污垢。此操作的最终目的是确定孔是干净的还是脏的(检测绿色圆圈内有多少点,并确定它有多脏)

现实生活中的另一个例子是:

在这里,你可以看到孔的底部有污垢(可能是孔的任何一侧),所以当你用激光检测它时,你不会得到圆,而是得到一堆点,圆的上部是空的。我想要的是从这些点中,你只能看到圆的上半部分是空的,重建原始的孔,就像清洁时一样

另外,我从两个不同的角度附加了两张点云图像,这样您就可以知道我在使用什么


我会找到孔的边界框,然后检查侧面。找到一个不是线性而是曲线的,并将其设置为圆边界。然后将圆仅安装到该侧。有关更多信息,请参阅:


如果您可以缩放坐标以将点绘制到图像中,下面是一个解决方案:

  • 将这些点绘制成图像
  • 使用所有点作为源点计算距离贴图
  • 然后,每个像素将包含到壁橱点的距离。因此,具有最高值的像素将是最大圆的中心,像素值将是圆的半径
  • 找到离圆心最近的点
  • 找到经过所有这些点的圆(Hough?)。解决方案可能不是唯一的

  • 你说的“潜在最大的空圈”是什么意思?图像中的那个既不是空的,也不是“最大的”,从任何明显的意义上说,它非常不清楚,至少对我来说,你的意思是什么。你能展示一些不同的点集以及每个点的答案是什么吗?对不起,但现在我比以前更困惑了。请在图片和问题陈述中清楚地描述你的问题。我认为如果样本图片代表实际源数据的质量,这可能是一项相当困难的任务,因为如果你连接自由边界上的点(),即使是人类也只能给出一个非常近似的答案,而这个答案只有在你至少能看到整个半径(即下半部分、上半部分或更多)的情况下才有效@FiReTiTi我不理解将点绘制成图像的概念。你这是什么意思。此外,我不知道我是否理解你的意思。例如,在此图像中,哪个点应该是圆的中心?我想说的是第六排的某个点。你的想法适用于那个例子吗?或者另一个更极端的例子:在这个图像中,只有一小部分原始圆是干净的。谢谢你,亚历克斯。把这些点画成一幅图像的想法,让你可以使用一个距离图(),它非常容易计算,并且可以给你圆心。但它给出了不包含任何点的圆的中心。现在我在你的例子中意识到,你想要一个圆(因为有很多圆)包含空区加上一些点。@FiReTiTi是的,我想要找到的是原始的孔,也就是说,包含空区加上一些点的圆(在现实生活中,这些点是孔中的污垢,所以激光会检测到它们)@avm_69:那么问题就不一样了。所以我编辑了我的解决方案。