pcl::EuclideanClusterExtraction 对比 pcl::Kmeans

pcl::EuclideanClusterExtraction vs pcl::Kmeans

在PCL教程中,我们可以学习如何分割平面和提取欧氏簇点云。所以现在,在我使用 pcl::EuclideanClusterExtraction 算法之后。我需要每个簇的质心或平均位置。

使用 pcl::EuclideanClusterExtraction 我需要用 for 循环计算质心。经过我的搜索,我发现 pcl::Kmeans 直接提供了一个函数 get_centroids() 来获取簇的质心:https://pointclouds.org/documentation/classpcl_1_1_kmeans.html#a8788bd4098ea370e018119fc516a5eb4

现在,我有点困惑。 pcl::EuclideanClusterExtractionpcl::Kmeans 之间的实际应用有什么不同?分析源码后,pcl::EuclideanClusterExtraction为我们提供了基于三个参数的聚类。 pcl::Kmeans 如果我们确定要生成多少个集群,则使用 pcl::Kmeans,因为构造函数中的参数 Kmeans (unsigned int num_points, unsigned int num_dimensions).

这是真的吗?还有其他情况吗?

这是两种截然不同的算法:

  1. k-means clustering 迭代查找球形点簇(通常为 high-dimensional),其中簇亲和力基于到簇中心的距离。从数学的角度来看:它选择的质心将最小化聚类点到质心的平方距离 - 如前所述,每个点都属于具有最近质心的聚类。
  2. cluster_extraction是一种基于最近邻的贪心区域增长算法。集群亲和力基于到集群任意点的距离(集群容差参数)。

聚类提取,公差大于blue/black点之间的距离,但小于黑点和蓝点之间的距离:

k-means 且 k=2