从节点云中查找几何(形状)

时间:2013-04-24 18:07:06

标签: python matlab numpy geometry scipy

我正在研究一些需要基于节点云识别一些相当基本的几何的代码。我有兴趣检测:

  • 板块(简单的有界平面)
  • 气缸(两个节点回路)
  • 半圆柱(圆弧+直线+圆弧+直线)
  • 圆顶(n *环+顶部节点)

我尝试搜索“来自节点云的几何体”,“从节点中获取几何体”,但我找不到一个很好的参考。这可能有一个完整的领域,有人能指出我的方式吗?我已经开始编写一些东西,但我觉得要重新发明轮子......

2 个答案:

答案 0 :(得分:3)

一个好的开始是获得节点的凸包(可以包围节点云的最紧密的多边形),使用Grahams algorithmQuickHull。请注意,QuickHull更容易编码,可能更快,除非你真的不走运。有一个纯粹的python implementation of QuickHull here.但我确信快速谷歌搜索会显示许多其他结果。

通常凸壳是大多数其他形状识别算法的起点,如果你的云可以描述为一系列笔画,那么有许多算法和方法:

Recognizing multistroke geometric shapes: an experimental evaluation

这可能会更好,一旦你有了凸包,将多边形分解成顶点对并运行这个算法以根据与训练数据的相似性进行匹配:

Hierarchical shape recognition using polygon approximation and dynamic alignment

这两篇文章都相当陈旧,所以你可以使用谷歌学者来看看谁引用了这些论文,并且你有一个很好的文献记录试图解决这个问题。

有许多不同的方法和方法,这在文献中得到了很好的研究,你采取的方法实际上取决于你希望达到的准确度,以及你想要识别的形状数量,以及作为您的输入数据集。

无论哪种方式,使用凸包算法从点云产生多边形是第一步,通常输入更复杂的算法。

修改

我没有考虑3D案例,因为他们在计算机图形学方面做了很多非常有趣的工作,专注于此,例如本文Efficient RANSAC for Point-Cloud Shape Detection

摘自摘要:

  
    

我们提出了一种自动算法来检测无组织点云中的基本形状。该算法将点云分解为固有形状和一组剩余点的简明混合结构。每个检测到的形状用作一组对应点的代理。我们的方法基于随机抽样并检测平面,球体,圆柱体,圆锥体和圆环...我们证明了该算法即使在存在许多异常值和高度噪声的情况下也是稳健的...此外,该算法在概念上是简单的并且易于实施......

  

答案 1 :(得分:1)

补充Josiah的答案 - 因为您没有说明在您的点云中是否有一个这样的对象被检测到 - 一个好的解决方案可以是使用(通用的)Hough transform

这个想法是每个点都会在你正在考虑的形状的参数空间中投票给一组候选者。例如,如果您认为当前对象是圆柱体,则您有一个7D参数空间,包括圆柱体中心(3D),方向(2D),高度(1D)和半径(1D),以及点云中的每个点将投票赞成与观察该点相符的所有参数。这样做允许通过获取具有最高投票数的参数集来找到实际汽缸的参数。 对飞机,球体等做同样的事情,会给你最好的匹配形状。

此方法的优势在于它允许同一点云中的多个对象。