有专门做试吃的网站吗,那个网站做苗木,网络营销的工作内容包括哪些,怎样在网站上做销售我们这次将学着使用ExtractIndices滤波器来从一个分割算法中导出点的下标。为了不把这个项目复杂化#xff0c;我们不会在这里解释分割算法。
我们先建一个extract_indices.cpp
代码
#include iostream#include pcl/ModelCoefficients.h#include pcl/i…我们这次将学着使用ExtractIndices滤波器来从一个分割算法中导出点的下标。为了不把这个项目复杂化我们不会在这里解释分割算法。
我们先建一个extract_indices.cpp
代码
#include iostream
#include pcl/ModelCoefficients.h
#include pcl/io/pcd_io.h
#include pcl/point_types.h
#include pcl/sample_consensus/method_types.h
#include pcl/sample_consensus/model_types.h
#include pcl/segmentation/sac_segmentation.h
#include pcl/filters/voxel_grid.h
#include pcl/filters/extract_indices.h
int
main (int argc, char** argv)
{
pcl::PCLPointCloud2::Ptr cloud_blob (new pcl::PCLPointCloud2), cloud_filtered_blob (new pcl::PCLPointCloud2);
pcl::PointCloudpcl::PointXYZ::Ptr cloud_filtered (new pcl::PointCloudpcl::PointXYZ), cloud_p (new pcl::PointCloudpcl::PointXYZ), cloud_f (new pcl::PointCloudpcl::PointXYZ);
// Fill in the cloud data
pcl::PCDReader reader;
reader.read (table_scene_lms400.pcd, *cloud_blob);
std::cerr PointCloud before filtering: cloud_blob-width * cloud_blob-height data points. std::endl;
// Create the filtering object: downsample the dataset using a leaf size of 1cm
pcl::VoxelGridpcl::PCLPointCloud2 sor;
sor.setInputCloud (cloud_blob);
sor.setLeafSize (0.01f, 0.01f, 0.01f);
sor.filter (*cloud_filtered_blob);
// Convert to the templated PointCloud
pcl::fromPCLPointCloud2 (*cloud_filtered_blob, *cloud_filtered);
std::cerr PointCloud after filtering: cloud_filtered-width * cloud_filtered-height data points. std::endl;
// Write the downsampled version to disk
pcl::PCDWriter writer;
writer.writepcl::PointXYZ (table_scene_lms400_downsampled.pcd, *cloud_filtered, false);
pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ());
pcl::PointIndices::Ptr inliers (new pcl::PointIndices ());
// Create the segmentation object
pcl::SACSegmentationpcl::PointXYZ seg;
// Optional
seg.setOptimizeCoefficients (true);
// Mandatory
seg.setModelType (pcl::SACMODEL_PLANE);
seg.setMethodType (pcl::SAC_RANSAC);
seg.setMaxIterations (1000);
seg.setDistanceThreshold (0.01);
// Create the filtering object
pcl::ExtractIndicespcl::PointXYZ extract;
int i 0, nr_points (int) cloud_filtered-points.size ();
// While 30% of the original cloud is still there
while (cloud_filtered-points.size () 0.3 * nr_points)
{
// Segment the largest planar component from the remaining cloud
seg.setInputCloud (cloud_filtered);
seg.segment (*inliers, *coefficients);
if (inliers-indices.size () 0)
{
std::cerr Could not estimate a planar model for the given dataset. std::endl;
break;
}
// Extract the inliers
extract.setInputCloud (cloud_filtered);
extract.setIndices (inliers);
extract.setNegative (false);
extract.filter (*cloud_p);
std::cerr PointCloud representing the planar component: cloud_p-width * cloud_p-height data points. std::endl;
std::stringstream ss;
ss table_scene_lms400_plane_ i .pcd;
writer.writepcl::PointXYZ (ss.str (), *cloud_p, false);
// Create the filtering object
extract.setNegative (true);
extract.filter (*cloud_f);
cloud_filtered.swap (cloud_f);
i;
}
return (0);
代码解释
首先我们用体元栅格滤波器来对数据进行降低采样。在这里更少的点意味着花费更少的时间进行计算。 pcl::VoxelGridpcl::PCLPointCloud2 sor;
sor.setInputCloud (cloud_blob);
sor.setLeafSize (0.01f, 0.01f, 0.01f);
sor.filter (*cloud_filtered_blob);
下一个代码块将处理参数分割。 pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ());
pcl::PointIndices::Ptr inliers (new pcl::PointIndices ());
// Create the segmentation object
pcl::SACSegmentationpcl::PointXYZ seg;
// Optional
seg.setOptimizeCoefficients (true);
// Mandatory
seg.setModelType (pcl::SACMODEL_PLANE);
seg.setMethodType (pcl::SAC_RANSAC);
seg.setMaxIterations (1000);
seg.setDistanceThreshold (0.01);
下面这行 pcl::ExtractIndicespcl::PointXYZ extract;
和 extract.setInputCloud (cloud_filtered);
extract.setIndices (inliers);
extract.setNegative (false);
extract.filter (*cloud_p);
代表了导出的滤波器后的真实的下标。为了处理多个模型我们把这个教程在一个循环中进行处理对于每一个被导出的模型我们返回去获取指定的点并且进行迭代inliers(正常的好的点云)这个将在分割处理后获取。
运行结果
PointCloud before filtering: 460400 data points.
PointCloud after filtering: 41049 data points.
PointCloud representing the planar component: 20164 data points.
PointCloud representing the planar component: 12129 data points.