作用: 过滤掉指定字段上用户定义范围空间内的点集。

原理:首先,指定字段及该字段下的取值范围;其次,遍历点云中的每个点,删除取值不在值域内的点;最后,遍历结束,留下的点即构成滤波后的点云

效果: 简单高效,适用于消除背景等操作。

关键成员函数:

void setFilterFieldName (const std : :string &field_name)
设置限定字段的名称字符串 field_name ,若输入点云类型为PointXZY, 则field_name 可以为x 或 y 或z 但务必小写。

void setFilterLimits (const double &limit_min, const double & limit_max)
设置滤波限制条件,包括最小值 limit_min 和最大值 limit_max。 该函数与 setFilterFieldName( )一起使用,点云中所有点的setFilterFieldName( )设置的字段的值未在用户所设定区间范围外的点将被删除。参数 limit_min 为允许的区间范围的最小值,默认为 DBL_ MIN , limit_ max 为允许的区间范围的最大值,默认为DB L_MAX.

void setFilterLimitsNegative (bool &!imit_negative):
设置返回滤波限制条件外的点还是内部点, limit_negative 默认值为 false,输出点云为在设定字段的设定范围内的点集,如果设置为 true 则刚好相反 。

代码展示: 

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/filters/passthrough.h>
#include <pcl/visualization/pcl_visualizer.h>using namespace std;int main() {pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);// 随机生成点云cloud->width  = 20;cloud->height = 1;cloud->points.resize (cloud->width * cloud->height);for (auto& point: *cloud){point.x = 1024 * rand () / (RAND_MAX + 1.0f);point.y = 1024 * rand () / (RAND_MAX + 1.0f);point.z = 1024 * rand () / (RAND_MAX + 1.0f);}cout << " Cloud before filtering: " << cloud->points.size() << endl;// 创建滤波器对象pcl::PassThrough<pcl::PointXYZ> pass;pass.setInputCloud(cloud);pass.setFilterFieldName("z");//设置过滤时所需要的点云Z字段pass.setFilterLimits(0.0, 1.0);//设置在过滤字段上的范围pass.setNegative(true);//设置保留范围内的还是过滤掉范围内的pass.filter(*cloud_filtered);cout << "Cloud after filtering: " << cloud_filtered->points.size() << endl;pcl::visualization::PCLVisualizer::Ptr view(new pcl::visualization::PCLVisualizer("ShowCloud"));// 创建两个视口: 第一个用于显示原始点云, 第二个用于显示滤波后的点云int v1(0);view->createViewPort(0.0, 0.0, 0.5, 1.0, v1);view->setBackgroundColor(0, 0, 0, v1);view->addText("Raw point clouds", 10, 10, "v1_text", v1);int v2(0);view->createViewPort(0.5, 0.0, 1, 1.0, v2);view->setBackgroundColor(0.1, 0.1, 0.1, v2);view->addText("filtered point clouds", 10, 10, "v2_text", v2);view->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud", v1);view->addPointCloud<pcl::PointXYZ>(cloud_filtered, "cloud_filtered", v2);// 设置点云的渲染颜色view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1, 0, 0, "sample cloud", v1);view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 1, 0, "cloud_filtered", v2);view->addCoordinateSystem(1.0);view->initCameraParameters();while (!view->wasStopped()) {view->spinOnce(100);}return 0;
}

结果展示

PCL之直通滤波--PassThrough相关推荐

  1. PCL Lesson5: 直通滤波+空间平面拟合+提供原始点云数据集PCD文件

    书接上文.本节做下面一个工作:通过直通滤波过滤一小片平面区域的点云(标定版),通过最小二乘法拟合,并把参数化的平面绘制在原图中. 待修正:拟合平面时离散点的处理.和拟合效果的判别 效果: 原始点云的文 ...

  2. PCL:直通滤波(单一字段 | 多字段)

    文章目录 1 原理 2 代码实现 3 结果展示 4 对多个字段进行直通滤波 4.1 错误示范 4.2 正确做法 1 原理 针对点云某一维度,去掉指定范围内(或外)的点. 2 代码实现 #include ...

  3. PCL入门系列 —— PassThrough 直通滤波、点云裁剪

    PCL入门系列 -- PassThrough 直通滤波.点云裁剪 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同 ...

  4. PCL从0到1|点云滤波之直通滤波与体素法滤波

    3D视觉工坊的第51篇文章 今天呢,想和大家聊一聊点云滤波处理的相关模块. 我对点云模块了解得也不算深入,此处单纯地想和大家分享一下这几天我所学习到的点云滤波知识,如有不到之处,还请后台留言多多指正. ...

  5. PCL Lesson 4:直通滤波+多视图可视化

    输入原始激光点云,经过直通滤波, 在一个窗口中同时显示两个点云 输入:pcdData//lader3.PCD 文件 输出:可视化 #include <stdio.h>#include< ...

  6. 直通滤波(PassThrough 过滤器)

    直通滤波(PassThrough 过滤器)|CSDN创作打卡 学习如何沿指定维度删除值落在用户给定间隔内/外的点,删除指定一个方向上的小于min.大于max的值. setFilterLimits(mi ...

  7. 算法加速篇(一)------OPENMP并行加速及PCL直通滤波和求法向量加速

    系列文章目录 巧了,第一篇,目前什么都没有 文章目录 系列文章目录 前言 一.OPENMP并行加速 1.开启openMP 2.指令及注意事项 二.PCL直通滤波与法向量加速 1.直通滤波 2.法向量计 ...

  8. 点云的直通滤波(附实现代码)

    原文首发于公众号「3D视觉工坊」:PCL从0到1|点云滤波之直通滤波与体素法滤波 欢迎关注公众号「3D视觉工坊」:

  9. PCL直通滤波器PassThrough点云滤波

    PassThrough PassThrough是直通滤波器,意思是可以设定一个频带,可以选择保留频带内的或者舍弃频带内的 代码 #include <iostream> #include & ...

最新文章

  1. 关于一个CCIE考试题目的研究(重分发)
  2. 问题记录之用poi生成图片并插入到word时,图片中的中文显示不出来
  3. Hibernate---进度1
  4. 2020 年 4 月编程语言排行榜:C 语言重回王者?
  5. 小白如何学3D建模?从零开始变大神,学习记录手册(必备)
  6. 2018蓝桥杯A组:星期一(年份判断)
  7. scala case语句_Scala模式与case语句匹配
  8. 七月算法--12月机器学习在线班-第九次课笔记—推荐系统
  9. c语言程序设计输出函数,输出函数C语言程序设计.pdf
  10. 《软件工程》 课后思考题
  11. Paper-----文献引用格式
  12. 远控王 v387 免费
  13. Web前端 03 Html5(收官)
  14. 【Linux问题】Linux修改文件出现错误E45:“readonly” option is set(add ! to override)退出不了vim
  15. SpringSecurity自定义多Provider时提示No AuthenticationProvider found for问题的解决方案与原理(二)
  16. 服务器固态硬盘接口区别,s s d固态硬盘和服务器配件硬盘的区别
  17. 亲爱的我把孩子放大了文案解说
  18. html中写模态框,Html 模态框操作
  19. ebay获取商品详情 API接口
  20. 微信小程序春天来了 安卓程序员进入冬眠?

热门文章

  1. 阅读作业二-----读Lost in CatB有感 by 李栋
  2. nginx return知多少
  3. 使用JDK中的 keytool【创建证书】・【查看】・【使用】
  4. win10 中的系统变量 windir、userProfile 等
  5. 编码发生错误时,要注意文件之间的关联性问题!
  6. 关于C#关闭窗体后,依旧有后台进程在运行的解决方法
  7. ionic/cordova即时通讯解决方案(上)
  8. POI3.8解决导出大数据量excel文件时内存溢出的问题
  9. Long类型参数传到前端精度丢失的解决方案
  10. 第一次使用pyqt5解决的几个小问题