有组织的三维点云数据中的连通组件

3

你好!

我已经准备好了一个Kinect传感器的点云。假设我有一张沙发和桌子的有序点云。我想要获得两个点云:沙发和桌子。

我正在寻找一些算法以获取连接组件。是否有人有伪代码或论文?或者可能是一些代码(Matlab)。

我目前的想法:我可以使用2D信息来获取相邻点的像素。接下来,我可以检查到相邻像素之间的欧几里得距离。如果距离低于阈值,则该像素属于同一簇。...

谢谢


2
你的想法听起来类似于DBSCAN聚类算法。当然,这不仅限于2D,数据可以是多维的(只要你正确计算欧几里得距离)。 - Amro
2个回答

4

正如@Amro所指出的那样,DBSCAN是你应该学习的算法。这是一种基于“密度连接”组件的聚类算法。

另外,请注意GDBSCAN变体(广义DBSCAN)。您不仅限于原始距离(如欧几里德距离),而且可以将“邻域”定义得像您想要的那样复杂。

Matlab可能不是最好的选择。为了使DBSCAN真正快速,您需要支持索引加速。最近的scikit-learn(确切地说是0.14)刚刚获得了DBSCAN的基本索引加速,而ELKI已经有了多年的索引加速。 ELKI似乎更“灵活”,因为它具有GDBSCAN,并且具有易于使用自定义距离函数扩展的索引结构。 sklearn可能只加速了一些内置距离。


1

您可以使用CloudCompare软件中的“工具>分割>标记连接组件”插件进行连接组件分割。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接