这段代码的功能是从一个点云中找到与给定点最近的点,并提取出该点的聚类。

首先,定义了一个名为 'yq' 的指向 pcl::PointCloudpcl::PointXYZ 类型的智能指针。然后,创建了一个名为 'centroid1' 的 pcl::PointXYZ 类型的对象,并将其 x、y、z 坐标设置为 clouds[i]->points[j] 的对应坐标。

接下来,创建了一个名为 'kdtree' 的 pcl::KdTreeFLANNpcl::PointXYZ 类型的对象,并将其输入点云设置为 'cloud3'。然后,定义了两个 vector,'pointIdxNKNSearch' 用于存储最近点的索引,'pointNKNSquaredDistance' 用于存储最近点与给定点的距离的平方。调用 'kdtree' 的 'nearestKSearch' 方法,找到最近的点的索引,并将结果存储在 'pointIdxNKNSearch' 和 'pointNKNSquaredDistance' 中。

然后,创建了一个 pcl::ExtractIndicespcl::PointXYZ 类型的对象 'extract',并将其输入点云设置为 'cloud3'。接着,创建了一个名为 'inliers' 的 pcl::PointIndices::Ptr 类型的智能指针,并将最近点的索引添加到 'inliers' 中。

然后,调用 'extract' 的 'setIndices' 方法,将 'inliers' 设置为提取的索引。接着,将 'extract' 的 'setNegative' 设置为 false,表示只提取 'inliers' 中的点,并调用 'filter' 方法,将提取的结果存储在 'yq' 中。

最后,通过循环遍历 'yq' 中的每个点,并打印出其坐标。

pcl::PointCloud<pcl::PointXYZ>::Ptr yq = yenn[j];
	pcl::PointXYZ centroid1;
	centroid1.x = clouds[i]->points[j].x;
	centroid1.y = clouds[i]->points[j].y;
	centroid1.z = clouds[i]->points[j].z;

	//pcl::PointCloud<pcl::PointXYZ>::Ptr cluster(new pcl::PointCloud<pcl::PointXYZ>);
	//kMeansClustering(clouds[i], xj, yj, zj, r, yenn);

		// 创建KD树对象
	pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;
	kdtree.setInputCloud(cloud3);
	std::vector<int> pointIdxNKNSearch(1);
	std::vector<float> pointNKNSquaredDistance(0.008);
	kdtree.nearestKSearch(centroid1, 1, pointIdxNKNSearch, pointNKNSquaredDistance);
	// 获取最近点的索引
	int nearestPointIndex = pointIdxNKNSearch[0];
	// 创建提取索引对象
	pcl::ExtractIndices<pcl::PointXYZ> extract;
	extract.setInputCloud(cloud3);
	// 创建点云索引对象
	pcl::PointIndices::Ptr inliers(new pcl::PointIndices());
	inliers->indices.push_back(nearestPointIndex);

	// 提取最近点的聚类
	extract.setIndices(inliers);
	extract.setNegative(false);
	extract.filter(*yq);

	for (size_t i = 0; i < yq->size(); ++i)
	{
		std::cout << "Point " << i + 1 << " coordinates" << "("
			<< yq->points[i].x << ", "
			<< yq->points[i].y << ", "
			<< yq->points[i].z << ")" << std::endl;
	}
PCL 点云库中查找最近点并提取聚类代码详解

原文地址: https://www.cveoy.top/t/topic/fCVa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录