kd-tree搜索近邻点
2016-03-11 02:03
344 查看
#include <pcl/point_cloud.h> #include <pcl/kdtree/kdtree_flann.h> #include <iostream> #include <vector> #include <ctime> using namespace pcl; using namespace std; void main() { srand(time(NULL)); PointCloud<PointXYZ>::Ptr cloud(new PointCloud<PointXYZ>); cloud->width=1000; cloud->height=1; cloud->resize(cloud->width*cloud->height); for (size_t i=0;i<cloud->size();++i) { cloud->points[i].x=1024*rand()/(RAND_MAX+1.0f); cloud->points[i].y=1024*rand()/(RAND_MAX+1.0f); cloud->points[i].z=1024*rand()/(RAND_MAX+1.0f); } KdTreeFLANN <PointXYZ> kdtree;//创建kdtree对象 kdtree.setInputCloud(cloud);//设置搜索空间 PointXYZ searchPoint;//定义查询点并设随机值 searchPoint.x=1024*rand()/(RAND_MAX+1.0f); searchPoint.y=1024*rand()/(RAND_MAX+1.0f); searchPoint.z=1024*rand()/(RAND_MAX+1.0f); cout<<"K近邻搜索:\n" ; int K=10; vector<int> pointIndexNKNSearch(K);//存储查询点近邻索引 vector<float> pointNKNSquaredDistance(K); cout<<"K nearest neighbor search at ("<<searchPoint.x<<" "<<searchPoint.y<<" "<<searchPoint.z<<")with K"<<K<<endl; if (kdtree.nearestKSearch(searchPoint,K,pointIndexNKNSearch,pointNKNSquaredDistance)>0) { for(size_t i=0;i<pointIndexNKNSearch.size();++i) { cout<<" "<<cloud->points[pointIndexNKNSearch[i]].x<<" "<<cloud->points[pointIndexNKNSearch[i]].y<<" "<<cloud->points[pointIndexNKNSearch[i]].z <<"(squrared distance:"<<pointNKNSquaredDistance[i]<<")"<<endl; } } //半径r内近邻搜索 cout<<"半径r内近邻搜索:\n" ; vector<int> pointIdxRadiusSearch; vector<float> pointRadiusSquaredDistance;//搜索近邻对应的距离平方 float radius=256.0f*rand()/(RAND_MAX+1.0f); if (kdtree.radiusSearch(searchPoint,radius,pointIdxRadiusSearch,pointNKNSquaredDistance)>0) { for (size_t i=0;i<pointIndexNKNSearch.size();++i) { cout<<" "<<cloud->points[pointIndexNKNSearch[i]].x<<" "<<cloud->points[pointIndexNKNSearch[i]].y<<" "<<cloud->points[pointIndexNKNSearch[i]].z<< "(square distance:"<<pointIndexNKNSearch[i]<<")"<<endl; } } system("pause") ; }
相关文章推荐
- 等式填空
- 1104. Sum of Number Segments (20)
- Java堆、栈、方法区、常量池
- 循环笑脸迷宫
- Activity跨进程访问
- 设置UITextField的placeholder的颜色及字体
- POJ-1422-Air Raid-求最小路径覆盖(匈牙利算法)
- 设计模式
- 全排列
- 阶段计划
- kernel 中的红黑树
- 我为什么从Angular转向React?
- 搭建linux服务器之Vim配置
- Clang 宏定义初探(二)
- JavaScript学习笔记(九)—— JS 理解闭包
- hadoop 排序
- 判断当前应用程序处于前台还是后台 ANDROID
- ELM的算法及伪代码
- [并查集] hdu1272 小希的迷宫
- 我与小娜(33):AlphaGo又胜一局