pcl形态学滤波器实现地面点分割
来源:互联网 发布:淘宝网看女装 编辑:程序博客网 时间:2024/04/30 08:54
ProgressiveMorphologicalFilter类实现了A Progressive Morphological Filter for Removing Nonground Measurements from Airborne LIDAR Data文章中的算法,下面用一个例子演示其用法:
#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#include <pcl/filters/extract_indices.h>#include <pcl/segmentation/progressive_morphological_filter.h>intmain(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>); pcl::PointIndicesPtr ground(new pcl::PointIndices); pcl::PCDReader reader; reader.read<pcl::PointXYZ>("samp11-utm.pcd", *cloud); std::cerr << "Cloud before filtering: " << std::endl; std::cerr << *cloud << std::endl; // 创建形态学滤波器对象 pcl::ProgressiveMorphologicalFilter<pcl::PointXYZ> pmf; pmf.setInputCloud(cloud); // 设置过滤点最大的窗口尺寸 pmf.setMaxWindowSize(20); // 设置计算高度阈值的斜率值 pmf.setSlope(1.0f); // 设置初始高度参数被认为是地面点 pmf.setInitialDistance(0.5f); // 设置被认为是地面点的最大高度 pmf.setMaxDistance(3.0f); pmf.extract(ground->indices); // Create the filtering object pcl::ExtractIndices<pcl::PointXYZ> extract; extract.setInputCloud(cloud); extract.setIndices(ground); extract.filter(*cloud_filtered); std::cerr << "Ground cloud after filtering: " << std::endl; std::cerr << *cloud_filtered << std::endl; pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered_RGB(new pcl::PointCloud<pcl::PointXYZRGB>); cloud_filtered_RGB->resize(cloud_filtered->size()); cloud_filtered_RGB->is_dense = FALSE; for (size_t i = 0 ; i < cloud_filtered->points.size() ; ++i) { cloud_filtered_RGB->points[i].x = cloud_filtered->points[i].x; cloud_filtered_RGB->points[i].y = cloud_filtered->points[i].y; cloud_filtered_RGB->points[i].z = cloud_filtered->points[i].z; cloud_filtered_RGB->points[i].r = 0; cloud_filtered_RGB->points[i].g = 255; cloud_filtered_RGB->points[i].b = 0; } pcl::io::savePCDFileBinary("cloud_groud.pcd", *cloud_filtered_RGB); // 提取非地面点 extract.setNegative(true); extract.filter(*cloud_filtered); std::cerr << "Object cloud after filtering: " << std::endl; std::cerr << *cloud_filtered << std::endl; pcl::io::savePCDFileBinary("No_groud.pcd", *cloud_filtered); return (0);}
阅读全文
0 0
- pcl形态学滤波器实现地面点分割
- PCL滤波器
- PCL点云分割(2)
- PCL点云分割(1)
- PCL点云分割(1)
- 5.4用形态学滤波器检测边缘和角点
- 基于改进形态学滤波器的点云分类算法
- 常用的PCL滤波器
- PCL: Segmentation模块之SACSegmentation点云分割
- 利用PCL处理Realsense点云数据-使用VoxelGrid滤波器对点云进行下采样
- 形态学滤波实现角点检测
- KinectV2 qt pcl 实现点云显示
- Terrascan去除地面点
- 有关opencv的学习(17)—形态学滤波器检测边缘和角点
- 在PCL中使用直通滤波器对点云进行滤波处理
- 在PCL中使用VoxelGrid滤波器对点云进行滤波
- PCL中使用直通滤波器对点云进行滤波处理
- 在PCL中如何实现平面模型分割
- rest
- java项目工程规约
- 有关使用cJSON包解析或者创建JSON时遇到的错误和解决办法
- 一维数组
- Java中获得文件路径的几种方式
- pcl形态学滤波器实现地面点分割
- java项目数据库规约
- 信息学奥赛培训流程
- 变量
- 主要的推荐算法简介
- 坐看云起时
- Java 实现导出excel表 POI
- 数据类型
- codeforces 574B 暴力+复杂度分析