d10070dd

kdtree_search-1.6.0

Nov 12th, 2013
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.66 KB | None | 0 0
  1. #include <pcl/point_cloud.h>
  2. #include <pcl/kdtree/kdtree_flann.h>
  3. #include <pcl/search/kdtree.h>
  4.  
  5. #include <iostream>
  6. #include <vector>
  7. #include <ctime>
  8.  
  9. int
  10. main (int argc, char** argv)
  11. {
  12.   srand (time (NULL));
  13.  
  14.   pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
  15.  
  16.   // Generate pointcloud data
  17.   cloud->width = 1000;
  18.   cloud->height = 1;
  19.   cloud->points.resize (cloud->width * cloud->height);
  20.  
  21.   for (size_t i = 0; i < cloud->points.size (); ++i)
  22.   {
  23.     cloud->points[i].x = 1024.0f * rand () / (RAND_MAX + 1.0f);
  24.     cloud->points[i].y = 1024.0f * rand () / (RAND_MAX + 1.0f);
  25.     cloud->points[i].z = 1024.0f * rand () / (RAND_MAX + 1.0f);
  26.   }
  27.  
  28.   pcl::search::KdTree<pcl::PointXYZ> kdtree;
  29.  
  30.   kdtree.setInputCloud (cloud);
  31.  
  32.   pcl::PointXYZ searchPoint;
  33.  
  34.   searchPoint.x = 1024.0f * rand () / (RAND_MAX + 1.0f);
  35.   searchPoint.y = 1024.0f * rand () / (RAND_MAX + 1.0f);
  36.   searchPoint.z = 1024.0f * rand () / (RAND_MAX + 1.0f);
  37.  
  38.   // K nearest neighbor search
  39.  
  40.   int K = 10;
  41.  
  42.   std::vector<int> pointIdxNKNSearch(K);
  43.   std::vector<float> pointNKNSquaredDistance(K);
  44.  
  45.   std::cout << "K nearest neighbor search at (" << searchPoint.x
  46.             << " " << searchPoint.y
  47.             << " " << searchPoint.z
  48.             << ") with K=" << K << std::endl;
  49.  
  50.   if ( kdtree.nearestKSearch (searchPoint, K, pointIdxNKNSearch, pointNKNSquaredDistance) > 0 )
  51.   {
  52.     for (size_t i = 0; i < pointIdxNKNSearch.size (); ++i)
  53.       std::cout << "    "  <<   cloud->points[ pointIdxNKNSearch[i] ].x
  54.                 << " " << cloud->points[ pointIdxNKNSearch[i] ].y
  55.                 << " " << cloud->points[ pointIdxNKNSearch[i] ].z
  56.                 << " (squared distance: " << pointNKNSquaredDistance[i] << ")" << std::endl;
  57.   }
  58.  
  59.   // Neighbors within radius search
  60.  
  61.   std::vector<int> pointIdxRadiusSearch;
  62.   std::vector<float> pointRadiusSquaredDistance;
  63.  
  64.   float radius = 256.0f * rand () / (RAND_MAX + 1.0f);
  65.  
  66.   std::cout << "Neighbors within radius search at (" << searchPoint.x
  67.             << " " << searchPoint.y
  68.             << " " << searchPoint.z
  69.             << ") with radius=" << radius << std::endl;
  70.  
  71.  
  72.   if ( kdtree.radiusSearch (searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0 )
  73.   {
  74.     for (size_t i = 0; i < pointIdxRadiusSearch.size (); ++i)
  75.       std::cout << "    "  <<   cloud->points[ pointIdxRadiusSearch[i] ].x
  76.                 << " " << cloud->points[ pointIdxRadiusSearch[i] ].y
  77.                 << " " << cloud->points[ pointIdxRadiusSearch[i] ].z
  78.                 << " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << std::endl;
  79.   }
  80.  
  81.  
  82.   return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment