Uniform sampling은 동작 방법은 동일하지만 결과값으로 인덱스(indices)를 출력하여 이후 식별자 정보등으로 활용 가능
The UniformSampling class creates a 3D voxel grid (think about a voxel grid as a set of tiny 3D boxes in space) over the input point cloud data. Then, in each voxel (i.e., 3D box), all the points present will be approximated (i.e., downsampled) with their centroid. This approach is a bit slower than approximating them with the center of the voxel, but it represents the underlying surface more accurately.
#include<iostream>#include<pcl/io/pcd_io.h>#include<pcl/point_types.h>#include<pcl/filters/uniform_sampling.h>//https://github.com/PointCloudLibrary/pcl/blob/master/test/filters/test_uniform_sampling.cpp//https://blog.csdn.net/qq_34839823/article/details/103843021//The UniformSampling class creates a 3D voxel grid (think about a voxel grid as a set of tiny 3D boxes in space) over the input point cloud data. Then, in each voxel (i.e., 3D box), all the points present will be approximated (i.e., downsampled) with their centroid. This approach is a bit slower than approximating them with the center of the voxel, but it represents the underlying surface more accurately.
//http://docs.pointclouds.org/1.8.1/classpcl_1_1_uniform_sampling.html#details//https://github.com/PointCloudLibrary/pcl/blob/master/tools/uniform_sampling.cppintmain (int argc,char** argv){ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>); // *.PCD 파일 읽기 (https://raw.github.com/PointCloudLibrary/data/master/tutorials/table_scene_lms400.pcd) pcl::io::loadPCDFile<pcl::PointXYZ> ("table_scene_lms400.pcd",*cloud); // 포인트수 출력 std::cout <<"Loaded :"<<cloud->width *cloud->height << std::endl; // 오프젝트 생성 pcl::UniformSampling<pcl::PointXYZ> filter ; filter.setInputCloud (cloud) ; // 입력 filter.setRadiusSearch (0.01F) ; // 탐색 범위 0.01Ffilter.filter (*cloud_filtered) ; // 필터 적용 // 포인트수 출력 std::cout <<"Filtered :"<<cloud_filtered->width *cloud_filtered->height << std::endl; // 생성된 포인트클라우드 저장 pcl::PCDWriter writer;writer.write<pcl::PointXYZ> ("uniform_sampling.pcd",*cloud_filtered,false);return (0);}
다운샘플링은 구조체(PCLPointCloud2)에서만 진행 하여야 하나??
Convert
pcl::PCLPointCloud2::Ptrcloud_blob (new pcl::PCLPointCloud2); pcl::PointCloud<pcl::PointXYZ>::Ptrcloud_filtered (new pcl::PointCloud<pcl::PointXYZ>) // Convert to the templated PointCloud pcl::fromPCLPointCloud2 (*cloud_filtered_blob,*cloud_filtered);