00001 #include <iostream> 00002 #include <pcl/point_types.h> 00003 #include <pcl/filters/conditional_removal.h> 00004 00005 int 00006 main (int argc, char** argv) 00007 { 00008 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); 00009 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>); 00010 00011 // Fill in the cloud data 00012 cloud->width = 5; 00013 cloud->height = 1; 00014 cloud->points.resize (cloud->width * cloud->height); 00015 00016 for (size_t i = 0; i < cloud->points.size (); ++i) 00017 { 00018 cloud->points[i].x = 1024 * rand () / (RAND_MAX + 1.0f); 00019 cloud->points[i].y = 1024 * rand () / (RAND_MAX + 1.0f); 00020 cloud->points[i].z = 1024 * rand () / (RAND_MAX + 1.0f); 00021 } 00022 00023 std::cerr << "Cloud before filtering: " << std::endl; 00024 for (size_t i = 0; i < cloud->points.size (); ++i) 00025 std::cerr << " " << cloud->points[i].x << " " 00026 << cloud->points[i].y << " " 00027 << cloud->points[i].z << std::endl; 00028 // build the condition 00029 pcl::ConditionAnd<pcl::PointXYZ>::Ptr range_cond (new 00030 pcl::ConditionAnd<pcl::PointXYZ> ()); 00031 range_cond->addComparison (pcl::FieldComparison<pcl::PointXYZ>::ConstPtr (new 00032 pcl::FieldComparison<pcl::PointXYZ> ("z", pcl::ComparisonOps::GT, 0.0))); 00033 range_cond->addComparison (pcl::FieldComparison<pcl::PointXYZ>::ConstPtr (new 00034 pcl::FieldComparison<pcl::PointXYZ> ("z", pcl::ComparisonOps::LT, 0.8))); 00035 00036 // build the filter 00037 pcl::ConditionalRemoval<pcl::PointXYZ> condrem (range_cond); 00038 condrem.setInputCloud (cloud); 00039 condrem.setKeepOrganized(true); 00040 00041 // apply filter 00042 condrem.filter (*cloud_filtered); 00043 00044 // display pointcloud after filtering 00045 std::cerr << "Cloud after filtering: " << std::endl; 00046 for (size_t i = 0; i < cloud_filtered->points.size (); ++i) 00047 std::cerr << " " << cloud_filtered->points[i].x << " " 00048 << cloud_filtered->points[i].y << " " 00049 << cloud_filtered->points[i].z << std::endl; 00050 return (0); 00051 }