Guest User

Untitled

a guest
Nov 23rd, 2017
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. struct BoundingBox{ 
  2.         pcl::PointXYZ min_point_OBB; 
  3.         pcl::PointXYZ max_point_OBB; 
  4.         pcl::PointXYZ position_OBB; 
  5.         Eigen::Matrix3f rotational_matrix_OBB; 
  6.         pcl::PointXYZ center; 
  7.         pcl::PointXYZ x_axis; 
  8.         pcl::PointXYZ y_axis; 
  9.         pcl::PointXYZ z_axis; 
  10.  
  11. }; 
  12. BoundingBox getOBB(pcl::PointCloud<pcl::PointXYZ>::Ptr  cloud,BoundingBox OBB ) 
  13.   pcl::MomentOfInertiaEstimation <pcl::PointXYZ> feature_extractor; 
  14.   feature_extractor.setInputCloud (cloud); 
  15.   feature_extractor.compute (); 
  16.   feature_extractor.getOBB (OBB.min_point_OBB, OBB.max_point_OBB, OBB.position_OBB, OBB.rotational_matrix_OBB); 
  17.  return OBB; 
  18. }   
  19.  
  20. int main(void){ 
  21. BoundingBox OBB; 
  22. OBB=getOBB(Npoints,OBB);                   //Npoints is a part of the whole cloud 
  23. Eigen::Quaternionf quat (OBB.rotational_matrix_OBB); 
  24. Eigen::Vector3f position (OBB.position_OBB.x, OBB.position_OBB.y, OBB.position_OBB.z); 
  25.  pcl::visualization::PCLVisualizer viewer; 
  26. pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> points_color_handler (cloud, 255, 255, 255); 
  27.  viewer.addCube (position, quat, OBB.max_point_OBB.x - OBB.min_point_OBB.x, OBB.max_point_OBB.y - OBB.min_point_OBB.y, OBB.max_point_OBB.z - OBB.min_point_OBB.z,"OBB"); 
  28. viewer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_REPRESENTATION, pcl::visualization::PCL_VISUALIZER_REPRESENTATION_WIREFRAME,"OBB"); 
  29. ////////////////above result is correct//////////////////// 
  30.  Eigen::Vector4f max_point_OBB(OBB.max_point_OBB.x,OBB.max_point_OBB.y,OBB.max_point_OBB.z,1.0); 
  31. Eigen::Vector4f min_point_OBB(OBB.min_point_OBB.x,OBB.min_point_OBB.y,OBB.min_point_OBB.z,1.0); 
  32. pcl::PointCloud<pcl::PointXYZ>::Ptr cloudOut (new pcl::PointCloud<pcl::PointXYZ>); 
  33. pcl::CropBox<pcl::PointXYZ> boxfilter; 
  34. boxfilter.setMax(max_point_OBB);         
  35. boxfilter.setMin(min_point_OBB); 
  36. Eigen::Vector3f v = quat.vec(); 
  37. boxfilter.setTranslation(position); 
  38. boxfilter.setRotation(v); 
  39. boxfilter.setInputCloud(cloud); 
  40. boxfilter.filter (*cloudOut); 
  41.  /////////cloulOut includes much less points than Npoints///////// 
Add Comment
Please, Sign In to add comment