孔检测算法

时间:2016-03-29 08:52:27

标签: image-processing graphics geometry computational-geometry image-recognition

我有一组代表下水道的3D点。这些点是通过激光识别产生的。我想要实现的是一组点,检测下水道上的洞(下水道的一面墙应该有一个洞)。一旦找到那个洞,就决定是否清洁(当一个洞几乎为圆形时,据说它是干净的(见下图))。

第一幅图像从鸟瞰图中表示下水道的一组点

enter image description here

第二张图显示了侧视图,其中可以部分看到孔

enter image description here

最后,我附上并展示了洞应该是什么样的图像(圆形或一边或多边不是圆形)

enter image description here

我想到计算每对连续点的角度(它们产生的线的角度)。在这种情况下,我可以确定下水道的四面墙并删除角落,因为它们没用。完成后,将每个墙的每组点投影到一个平面,并使用最大的空圆算法。在洞壁中,它会检测到最大半径,因此我知道洞在哪个墙上。

这只是一个想法,可能无效。我非常感谢有关如何关注这个问题的一些想法,任何类型的信息都会非常有用。

我正在使用Visual Studio和PCL以防万一。

我不是在寻找一种能够获得距离其他点最远的点的算法。我想要任何可以解决我问题的解决方案。

谢谢你,Alex。

1 个答案:

答案 0 :(得分:0)

看起来您正在直接使用点云。如果首先对其进行三角剖分以创建曲面,则可能会更容易。您可能需要先进行清理以除去异常值并进行一些本地过滤。然后,您可以非常轻松地计算边界-仅连接到一个三角形的边。这将有助于您确定潜在的孔,因为这些孔将被边界边缘包围。

您可以通过计算圆度度量来检测“干净”的孔。例如,对于闭合曲线,您可以计算最大直径D =最远点对与区域A之间的距离-使用此formula。那么比率(pi D ^ 2)/(4 A)应该接近1。