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

  • 前言
  • 程序说明
  • 输出结果
  • 代码示例
  • 总结

前言

随着工业自动化、智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识别、定位、抓取、测量,缺陷检测等),而针对不同作业场景进行解决方案设计时,通常会借助PCL、OpenCV、Eigen等简单方便的开源算法库进行方案的快速验证和迭代以满足作业场景下的目标需求。

为了让对工业机器视觉方向感兴趣的同学能够少走一些弯路,故推出了此一系列简易入门教程示例,让初次使用者能够最简单直观地感受到当前所用算法模块的执行效果。

后续会逐步扩增与工业机器视觉相关的一些其它内容,如:

项目案例剖析场景数据分析基础算法模块相机评测 等;

如有兴趣可加入群聊(若入群二维码被屏蔽,则可以通过Q群(1032861997)或评论、私信博主“群聊”,邀请入群),与同道同学及圈内同行一起交流讨论。


程序说明

展示 PassThrough 直通滤波器效果;

输出结果

代码示例

/** @File: pass_through.cpp* @Brief: pcl course* @Description: 展示PassThrough直通滤波器效果* @Version: 0.0.1* @Author: MuYv*/
#include <iostream>
#include <string>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/passthrough.h>
#include <pcl/visualization/pcl_visualizer.h>int main(int argc, char** argv){if(argc != 2){std::cout<<"Usage: exec cloud_file_path"<<std::endl;return -1;}// ../clouds/cabinet/cabinet_color_cloud.pcdconst std::string kCloudFilePath = argv[1]; // 定义变量pcl::PointCloud<pcl::PointXYZRGB>::Ptr \cloud_src(new pcl::PointCloud<pcl::PointXYZRGB>());pcl::PointCloud<pcl::PointXYZRGB>::Ptr \cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>());// 成功返回0,失败返回-1if(-1 == pcl::io::loadPCDFile(kCloudFilePath,*cloud_src)){std::cout<<"load pcd file failed. please check it."<<std::endl;return -2;}// 创建直通滤波(模板)类对象,点数据类型为 pcl::PointXYZRGBpcl::PassThrough<pcl::PointXYZRGB> pt;// 设置输入点云,注意:此处传入的是点云类对象的智能指针pt.setInputCloud(cloud_src);// 设置通道名称 x/y/zpt.setFilterFieldName("z");// 设置当前裁剪通道的最值区间,默认保留区间内的数据pt.setFilterLimits(0.0f,2.5f);// 是否对区间范围取反,即保留区间外的数据pt.setFilterLimitsNegative(false);// 执行过滤,并带出处理后的点云数据,注意:此处传入的是点云类对象pt.filter(*cloud_filtered);// 创建可视化对象pcl::visualization::PCLVisualizer viewer("viewer");// 将当前窗口,拆分成横向的2个可视化窗口,以viewport区分(v1/v2)int v1; int v2;//窗口参数分别对应 x_min, y_min, x_max, y_max, viewportviewer.createViewPort(0.0, 0.0, 0.5, 1.0, v1);  viewer.createViewPort(0.5, 0.0, 1.0, 1.0, v2);// 添加2d文字标签viewer.addText("v1", 10,10, 20, 1,0,0, "viewport_v1", v1);viewer.addText("v2", 10,10, 20, 0,1,0, "viewport_v2", v2);// 添加坐标系viewer.addCoordinateSystem(0.5);    // 单位:m// 设置可视化窗口背景色viewer.setBackgroundColor(0.2,0.2,0.2);     // r,g,b  0~1之间// 向v1窗口中添加点云viewer.addPointCloud(cloud_src,"cloud_src",v1);// 根据点云id,设置点云可视化属性,此处将可视化窗口中的点大小调整为2级viewer.setPointCloudRenderingProperties \(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "cloud_src");// 向v2窗口中添加点云viewer.addPointCloud(cloud_filtered,"cloud_filtered",v2);// 根据点云id,设置点云可视化属性,此处将可视化窗口中的点大小调整为2级viewer.setPointCloudRenderingProperties \ (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "cloud_filtered");// 关闭窗口则退出while(!viewer.wasStopped()){viewer.spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}return 0;
}

总结

通过直通滤波可以将点云数据按照轴向的范围尺度进行裁剪,剔除无关区域,常用于离线点云处理或场景变动较小的在线流程中;


注:部分测试所用点云数据来源于网络,如有侵权,请联系博主删除,谢谢。

PCL入门系列 —— PassThrough 直通滤波、点云裁剪相关推荐

  1. PCL入门系列 —— StatisticalOutlierRemoval 点云统计滤波

    PCL入门系列 -- StatisticalOutlierRemoval 点云统计滤波 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领 ...

  2. PCL入门系列 —— NormalEstimation、NormalEstimationOMP 基于邻域的点云法线估计

    PCL入门系列 -- NormalEstimation.NormalEstimationOMP 基于邻域的点云法线估计 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进 ...

  3. PCL入门系列 —— 加载ply格式mesh模型、点云数据并作可视化展示

    PCL入门系列 -- 加载ply格式mesh模型.点云数据并作可视化展示 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要 ...

  4. OpenCV入门系列 —— boxFilter盒子滤波

    OpenCV入门系列 -- boxFilter盒子滤波 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识 ...

  5. OpenCV入门系列 —— bilateralFilter双边滤波

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

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

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

  7. PCL入门系列一——PCL简介及PCL安装

    写在前面 三维数据是一种非常有意思的信息类别.从海洋到深空,从城市到乡村,我们的身边三维数据无处不在.但是计算机又需要如何理解三维数据呢?信息的传递需要一种表达格式,需要一种数据类型,所以,人们设置了 ...

  8. 图像处理入门系列之图像滤波

    图像的滤波操作按不同的分类方法可分为频率域和空间域滤波.线型滤波和非线型滤波.平滑滤波和锐化滤波.高通滤波和低通滤波.总体来说,图像滤波的作用可分为两类,一类是去除图像因外界干扰而产生的噪声:另一类是 ...

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

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

最新文章

  1. Revit:概念建模环境技能学习 Revit: Conceptual Modeling Environment
  2. Robot 3D Map Navigation
  3. 昨天又帮爸DIY了一台工作电脑
  4. All About Monads
  5. ORACLE中的包和包体
  6. 注销凭证与自定义屏幕
  7. 快速了解和使用Photon Server
  8. STL学习之一(栈(statck))
  9. GetClientRect相当于GetWindowRect和ScreenToClient区别
  10. php评论获取时间,WordPress函数comment_date获取评论发布时间
  11. 你不知道的数学趣闻(一)
  12. php接口三结构,grape动态PHP结构(三)——API接口
  13. 机器学习算法——GBDT
  14. IGBT工作原理,解析IGBT工作原理及作用
  15. 仿IBM首页焦点图,缩略图大图,带文字
  16. VisualStudio2010编译出错fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 的解决方法
  17. PageHelper.startPage不生效,失效问题
  18. 多媒体视频会议系统的测试方法
  19. 那些创造外汇神话的交易员们
  20. 【IDEA】windows、mac下IDEA下载的驱动包在哪

热门文章

  1. python:ImportError: cannot import name ‘xx‘ from ‘xxxx‘
  2. GPA学分绩点计算---Java实现版本
  3. 自动光学变焦USB摄像头模组微光全彩夜视18倍USB摄像机机芯参数
  4. windows7 命令行关机/重启
  5. 机器视觉——视觉工程师需要知道的知识
  6. 隐藏在office中的小游戏
  7. 七、jQuery动画特效(二)
  8. 关于markdown图片显示
  9. 帆软单元格格式属性设置
  10. 倍福mySQL通讯_C#和倍福PLC之间的通讯控制