从一个点云中提取索引
来源:互联网 发布:中国国际形势印度知乎 编辑:程序博客网 时间:2024/06/14 07:18
附课本代码:
#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>intmain (int argc, char** argv){ sensor_msgs::PointCloud2::Ptr cloud_blob (new sensor_msgs::PointCloud2), cloud_filtered_blob (new sensor_msgs::PointCloud2); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>), cloud_p (new pcl::PointCloud<pcl::PointXYZ>), cloud_f (new pcl::PointCloud<pcl::PointXYZ>); // 填入点云数据 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; // 创建滤波器对象:使用叶大小为1cm的下采样 pcl::VoxelGrid<sensor_msgs::PointCloud2> sor; sor.setInputCloud (cloud_blob); sor.setLeafSize (0.01f, 0.01f, 0.01f); sor.filter (*cloud_filtered_blob); // 转化为模板点云 pcl::fromROSMsg (*cloud_filtered_blob, *cloud_filtered); std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height << " data points." << std::endl; // 将下采样后的数据存入磁盘 pcl::PCDWriter writer; writer.write<pcl::PointXYZ> ("table_scene_lms400_downsampled.pcd", *cloud_filtered, false); pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ()); pcl::PointIndices::Ptr inliers (new pcl::PointIndices ()); // 创建分割对象 pcl::SACSegmentation<pcl::PointXYZ> seg; // 可选 seg.setOptimizeCoefficients (true); // 必选 seg.setModelType (pcl::SACMODEL_PLANE); seg.setMethodType (pcl::SAC_RANSAC); seg.setMaxIterations (1000); seg.setDistanceThreshold (0.01); // 创建滤波器对象 pcl::ExtractIndices<pcl::PointXYZ> extract; int i = 0, nr_points = (int) cloud_filtered->points.size (); // 当还有30%原始点云数据时 while (cloud_filtered->points.size () > 0.3 * nr_points) { // 从余下的点云中分割最大平面组成部分 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.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.write<pcl::PointXYZ> (ss.str (), *cloud_p, false); // 创建滤波器对象 extract.setNegative (true); extract.filter (*cloud_f); cloud_filtered.swap (cloud_f); i++; } return (0);}
相关对象函数说明:
1、pcl::PointIndices
This is the complete list of members for pcl::PointIndices, including all inherited members.
ConstPtr typedefpcl::PointIndices headerpcl::PointIndices indicespcl::PointIndices PointIndices()pcl::PointIndices Ptr typedefpcl::PointIndices2、SACSegmentation对象
(1)
void pcl::SACSegmentation<PointT >::setOptimizeCoefficients(bool optimize)Set to true if a coefficient refinement is required.//设置对估计的模型参数进行优化处理
- Parameters:
- [in]optimizetrue for enabling model coefficient refinement, false otherwise
The type of model to use (user given parameter).
- Parameters:
- [in]modelthe model type
The type of sample consensus method to use (user given parameter).
- Parameters:
- [in]methodthe method type
* SAC_RANSAC - RANdom SAmple Consensus
* SAC_LMEDS - Least Median of Squares
* SAC_MSAC - M-Estimator SAmple Consensus
* SAC_RRANSAC - Randomized RANSAC
* SAC_RMSAC - Randomized MSAC
* SAC_MLESAC - Maximum LikeLihood Estimation SAmple Consensus
* SAC_PROSAC - PROgressive SAmple Consensus
(4)void pcl::SACSegmentation< PointT >::setMaxIterations(int max_iterations)Set the maximum number of iterations before giving up.
Distance to the model threshold (user given parameter). //设置判断是否为模型内点的距离阈值
(6)
Provide a pointer to the input dataset.
- Parameters:
- cloudthe const boost shared pointer to a PointCloud message
Base method for segmentation of a model in a PointCloud given by <setInputCloud (), setIndices ()>
- Parameters:
- [in]inliersthe resultant point indices that support the model found (inliers)[out]model_coefficientsthe resultant model coefficients
Provide a pointer to the vector of indices that represents the input data.
(2)
Provide a pointer to the input dataset.
Parameters:
(3)
Set whether the regular conditions for points filtering should apply, or the inverted conditions.
Calls the filtering method and returns the filtered dataset in output.
void pcl::FilterIndices< sensor_msgs::PointCloud2 >::filter(std::vector< int > & indices)Calls the filtering method and returns the filtered point cloud indices.
- 从一个点云中提取索引
- 从一个点云中提取索引
- 从一个点云中提取索引
- 第一个lucene程序,把一个信息写入到索引库中、根据关键词把对象从索引库中提取出来、lucene读写过程分析
- 从文件中随机提取一个字符串
- 从一个字符串中提取中文字符
- 从一个文件夹提取普片到另一个文件夹
- 从一个XML树提取相关信息
- 从一个url字符串里提取参数值
- 从PHP手册中提取的一个加密/解密函数
- 实现--从文件中随机提取一个字符串
- 一个从NDK中提取独立工具链的脚本
- 正则表达式,从一个字符串中提取链接地址
- 使用javascript从一个字符串提取自字符串
- 【caffe:从一个预训练模型中提取特征】
- 从一个网址中提取视频转换成Mp3
- 编写一个函数,从一个字符串中提取一个子字符串
- C语言 编写一个函数,它从一个字符串中提取一个子字符串
- quick-cocos2d-x 在 Mac 下的编译环境(安卓移植)
- 开始iOS 7中自动布局教程(二)
- java Jconsole调优
- (总结)Web性能压力测试工具之Siege详解
- SendKeys 语句
- 从一个点云中提取索引
- 光电耦合器简介以及作用
- PowerShell为什么强大
- POJ 2987: Firing
- 一学就会之ado.net(一)
- 21.4 实例:读取目录下指定类型的文件的内容
- Linux 命令行操作(二)文件操作
- 抛弃LCDS和FMS,在tomcat下开发Red5应用(第五篇)-客户端和服务器端方法调用的参数传递
- Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读