快速找到点云中的特定形状

时间:2011-03-02 18:38:29

标签: data-structures tree spatial point-clouds

我有一个点云,并希望在我的代码中检测到某些点模式的出现。

假设我在3d空间中有1000个点,并且我想要检测形成“L”形状的3个点的所有实例,其中L的每个段具有特定长度。点云可能没有完全匹配,但可能非常接近(即在点云中,“L”段的长度可能比理想值略长/短)

我最初的想法是这样的:

  1. 记录我们试图检测的形状中所有点之间的距离
  2. 创建一个空的'潜在形状'
  3. 对于我们潜在形状中的每个点,检查在第1部分中找到的距离处/附近的所有点。
  4. 如果我们找到一个点,将它添加到我们的潜在形状,并重复第3部分,直到我们得到所有点。然后检查点之间的角度以验证形状确实是正确的。如果不正确,我们将继续下一步并重新开始
  5. 问题是这种方法的运行时间最糟糕。理想情况下,我希望有一些数据结构来加速我的查询'查找距离给定点之间的distanceMin和distanceMax之间的所有点。有人能指出一些可能有用的有用数据结构。

    我正在考虑将所有点放在八叉树中以加快访问时间。

    关于如何改善运行时间的其他建议?启发式的启发式方法?

    注意:我想要找到的形状是可变的。他们不会总是'L'。我尝试查看霍夫变换,但它们似乎只对检测特定的预定形状(如线/圆)很有用。

1 个答案:

答案 0 :(得分:1)

在PCL库中有 Sample consensus 模块,直接引用文档:

  

拥有像RANSAC这样的SAmple Consensus(SAC)方法以及平面和圆柱等模型。这些可以自由组合,以便在点云中检测特定模型及其参数。

也许您可以创建一些组合这些基元的形状并在云中搜索它们。