PCL常用代码总结(二):kdtree & octree

本文深入探讨点云处理中的关键技术,包括KdTree和Octree的近邻搜索方法,Octree点云压缩技巧,以及Octree无序点云差异检测算法。通过详细示例,阐述了这些技术在点云数据处理中的应用。

1. kdtree近邻搜索

#include <pcl/point_cloud.h> //定义PointCloud格式点云
#include <pcl/kdtree/kdtree_flann.h> //KdTreeFLANN是一种KD-tree结构,使用FLANN( 快速最近邻逼近搜索函数库)实现高效搜索

//【1】定义kdtree对象
pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;
//将点云集输入到kdtree中
kdtree.setInputCloud (cloud);

//【2】设置搜索目标点
pcl::PointXYZ searchPoint;
searchPoint.x=1024.0f* rand () / (RAND_MAX +1.0f);
searchPoint.y=1024.0f* rand () / (RAND_MAX +1.0f);
searchPoint.z=1024.0f* rand () / (RAND_MAX +1.0f);

//【3】K近邻搜索
int K =10; //搜索近邻个数
std::vector<int>pointIdxNKNSearch(K); //存放近邻点在原点云集的索引
std::vector<float>pointNKNSquaredDistance(K); //对应近邻的平方距离
std::cout<<"K nearest neighbor search at ("<<searchPoint.x
<<" "<<searchPoint.y
<<" "<<searchPoint.z
<<") with K="<< K <<std::endl;

// 开始kdtree K近邻搜索
if ( kdtree.nearestKSearch (searchPoint, K, pointIdxNKNSearch, pointNKNSquaredDistance) >0 )
  {
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;
  }

//【4】或者在半径r内搜索
float radius =256.0f* rand () / (RAND_MAX +1.0f); //设置搜索半径
std::vector<int> pointIdxRadiusSear
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值