网站建设销售求职,商业类网站的设计与制作,迅睿cms建站,免费建立自己的网站K近邻搜索#xff08;K Nearest Neighbors#xff09;
K近邻搜索是一种基于点数量的搜索方法#xff0c;它会找到指定点附近最接近的K个邻居点。K近邻搜索中的K值是一个参数#xff0c;您需要指定要搜索的邻居数量。该方法适用于需要查找固定数量邻居点的情况#xff0c;…K近邻搜索K Nearest Neighbors
K近邻搜索是一种基于点数量的搜索方法它会找到指定点附近最接近的K个邻居点。K近邻搜索中的K值是一个参数您需要指定要搜索的邻居数量。该方法适用于需要查找固定数量邻居点的情况例如K最近邻分类器和最近邻插值等。 /// summary/// kdtree的k近邻索引/// /summary/// param namecloud需要所有的点云/param/// param namesearchPoint需要索引的点/param/// param namek索引的个数/param/// returns返回索引出点的编号数组/returns
std::vectorint PclTool::kdtreeKSearch(const pcl::PointCloudpcl::PointXYZ::Ptr cloud, const pcl::PointXYZ searchPoint, const unsigned int k)
{// 创建KdTreeFLANN对象并把创建的点云设置为输入,searchPoint变量作为查询点pcl::KdTreeFLANNpcl::PointXYZ kdtree; // 设置搜索空间kdtree.setInputCloud(cloud);std::vectorint pointIdxNKNSearch(k); // 存储查询点近邻索引std::vectorfloat pointNKNSquaredDistance(k); // 存储近邻点对应距离平方// 打印相关信息std::cout K nearest neighbor search at ( searchPoint.x searchPoint.y searchPoint.z ) with K k std::endl;if (kdtree.nearestKSearch(searchPoint, k, pointIdxNKNSearch, pointNKNSquaredDistance) 0) // 执行K近邻搜索{return pointIdxNKNSearch; 打印所有近邻坐标//for (size_t i 0; i pointIdxNKNSearch.size(); i)//{// std::cout cloud-points[pointIdxNKNSearch[i]].x cloud-points[pointIdxNKNSearch[i]].y cloud-points[pointIdxNKNSearch[i]].z (squared distance: pointNKNSquaredDistance[i] ) std::endl;//}}else{return std::vectorint();}
}截取出兔子耳朵的部分
半径R内近邻搜索Radius Neighbors
半径R内近邻搜索是一种基于距离阈值的搜索方法它会找到距离指定点在半径R范围内的所有邻居点。R是搜索半径指定了要搜索的邻居点的最大距离。该方法适用于需要查找在一定距离范围内的邻居点的情况例如密度估计和聚类等。 /// summary/// kdtree的半径近邻索引/// /summary/// param namecloud需要所有的点云/param/// param namesearchPoint需要索引的点/param/// param nameradius索引半径/param/// returns返回索引出点的编号数组/returnsstatic std::vectorint kdtreeRadiusSearch(const pcl::PointCloudpcl::PointXYZ::Ptr cloud, const pcl::PointXYZ searchPoint, const float radius){// 创建KdTreeFLANN对象并把创建的点云设置为输入,searchPoint变量作为查询点pcl::KdTreeFLANNpcl::PointXYZ kdtree;kdtree.setInputCloud(cloud);std::vectorint pointIdxRadiusSearch; // 存储近邻索引std::vectorfloat pointRadiusSquaredDistance; // 存储近邻对应距离的平方if (kdtree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) 0) // 执行半径R内近邻搜索方法{return pointIdxRadiusSearch;}else{return std::vectorint();}
}截取出兔子上半身