1、原理
三维空间欧氏距离聚类算法中,涉及到唯一距离参数d。当点之间距离小于距离d 时,表明两点局部相连,属于同一簇点集。其中点之间相连满足如下性质:若点A 与点B 相连,点B 与点C 相连,则点A 与点C 也相连。下图展示了基于欧氏距离聚类的原理,当距离阈值设置合理时,使用空间欧氏距离聚类算法对点进行聚类,所有的点被划分成左右两簇点集,并且两簇点云中任意两点相连。即对于一簇点中任意点,总能从该簇点中找到离该点距离小于d的另外一点。对于左边点集中C点,右边点集中距离C点最近的D点,两点之间距离大于距离阈值,经过聚类后C点与D点归属于两簇不同的点集。
2、源代码展示
PCL中有自带的欧氏聚类函数,下面是自己编写的源代码,思路还是很清晰的。理解了可以自己编写其他带约束条件的欧氏聚类,如法向量约束、曲率约束等。
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/io/pcd_io.h>
using namespace std;
#include<vector>
#include <fstream>
#include<iostream>
vector<vector<pcl::PointXYZ>> EucliClusters(vector<pcl::PointXYZ> points, double dis)
{
vector<vector<pcl::