pcl 直通滤波

2024-03-15 07:44
文章标签 pcl 通滤波

本文主要是介绍pcl 直通滤波,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pcl 直通滤波

处理某一个坐标轴方向上的点云

头文件等

#include<pcl/filters/passthrough.h>typedef pcl::PointXYZ PointT;
typedef pcl::PointCloud<PointT> CloudT;
typedef CloudT::Ptr CP;

主要代码

    CP cloudTo(new CloudT);pcl::PassThrough<pcl::PointXYZ> pass; //定义滤波器pass.setInputCloud(cloudFrom);        //设置待滤波的点云pass.setFilterFieldName("x"); 		  //设置需要操作的坐标轴pass.setFilterLimits(46.0, 54.0); 	  // 设置滤波坐标范围pass.setFilterLimitsNegative(true);   // true为保留范围内的数据,false为舍弃范围内的数据pass.filter(*cloudTo);  		      // 进行滤波输出

代码(x轴)


void lxr_vision(CP cloud1) {pcl::visualization::PCLVisualizer viewer;viewer.setBackgroundColor(0.05, 0.05, 0.05);//viewer.addPointCloud(cloudFrom, pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>(cloudFrom, 255, 0, 0), "cloudForm");viewer.addPointCloud(cloud1, pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>(cloud1, 0, 255, 0), "cloud1");//viewer.addPointCloud(cloud2, pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>(cloud2, 255, 0, 0), "cloud2");while (!viewer.wasStopped()) {viewer.spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}
}
void process(string path) {//读取点云CP cloudFrom(new CloudT);if (pcl::io::loadPCDFile<PointT>(path, *cloudFrom) == -1) {cout << "读取失败:" << path << endl;return;}//直通滤波CP cloudTo(new CloudT);pcl::PassThrough<pcl::PointXYZ> pass; pass.setInputCloud(cloudFrom);pass.setFilterFieldName("x"); 		//设置需要操作的坐标轴pass.setFilterLimits(46.0, 54.0); 	// 设置坐标范围pass.setFilterLimitsNegative(true); // true为保留范围内的数据,false为舍弃范围内的数据pass.filter(*cloudTo);  		// 进行滤波输出//可视化一下cout << "原始点云大小:" << cloudFrom->size() << endl;cout << "滤后点云大小:" << cloudTo->size() << endl;lxr_vision(cloudFrom);lxr_vision(cloudTo);return;
}

结果

滤波前

滤波后

代码(y轴)


void lxr_vision(CP cloud1) {pcl::visualization::PCLVisualizer viewer;viewer.setBackgroundColor(0.05, 0.05, 0.05);//viewer.addPointCloud(cloudFrom, pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>(cloudFrom, 255, 0, 0), "cloudForm");viewer.addPointCloud(cloud1, pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>(cloud1, 0, 255, 0), "cloud1");//viewer.addPointCloud(cloud2, pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>(cloud2, 255, 0, 0), "cloud2");while (!viewer.wasStopped()) {viewer.spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}
}
void process(string path) {//读取点云CP cloudFrom(new CloudT);if (pcl::io::loadPCDFile<PointT>(path, *cloudFrom) == -1) {cout << "读取失败:" << path << endl;return;}//直通滤波CP cloudTo(new CloudT);pcl::PassThrough<pcl::PointXYZ> pass; pass.setInputCloud(cloudFrom);pass.setFilterFieldName("x"); 		//设置需要操作的坐标轴pass.setFilterLimits(46.0, 54.0); 	// 设置坐标范围pass.setFilterLimitsNegative(true); // true为保留范围内的数据,false为舍弃范围内的数据pass.filter(*cloudTo);  		// 进行滤波输出//可视化一下cout << "原始点云大小:" << cloudFrom->size() << endl;cout << "滤后点云大小:" << cloudTo->size() << endl;lxr_vision(cloudFrom);lxr_vision(cloudTo);return;
}

 结果

滤波前

滤波后

这篇关于pcl 直通滤波的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/811258

相关文章

运算放大器(运放)低通滤波反相放大器电路和积分器电路

低通滤波反相放大器电路 运放积分器电路请访问下行链接 运算放大器(运放)积分器电路 设计目标 输入ViMin输入ViMax输出VoMin输出VoMaxBW:fp电源Vee电源Vcc–0.1V0.1V–2V2V2kHz–2.5V2.5V 设计说明 这款可调式低通反相放大器电路可将信号电平放大 26dB 或 20V/V。R2 和 C1 可设置此电路的截止频率。此电路的频率响应与无源 RC 滤

【C++PCL】点云处理稳健姿态估计配准

作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 重点:每个模块都有参数如何调试的讲解,即调试某个参数对结果的影响是什么,大家有问题可以评论哈,如果文章有错误的地方,欢迎来指出错误的地方。 目录         1.原理介绍         2.代码效果         3.源码展示         4.

【C++PCL】点云处理Kd-tree原理

作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 重点:每个模块都有参数如何调试的讲解,即调试某个参数对结果的影响是什么,大家有问题可以评论哈,如果文章有错误的地方,欢迎来指出错误的地方。 目录         1.原理介绍 1.原理介绍         kd-tree是散乱点云的一种储存结构,它是一种

PCL 三次样条插值(二维点)

一、简介 在插值计算中,最简单的分段多项式近似应该是分段线性插值,它由连接一组数据点组成,仅仅只需要将这些点一一用直线进行顺序相连即可。不过线性函数插值的缺点也很明显,就是在两个子区间变化的比较突兀,也就是没有可微性(不够光滑)。因此我们需要更为符合物理情况的一种曲线,一般来讲,三次多项式包含四个常数,它可以确保插值函数不仅在区间上连续可微,而且具有连续的二阶导数,这样就可以达到我们想要节点处

PCL common中常见的基础功能函数

文章目录 一、common模块中的头文件二、common模块中的基本函数1、angles.h2、centroid.h1)计算给定一群点的3D中心点,并且返回一个三维向量2)计算给定的三维点云的协方差矩阵。3)计算正则化的3*3的协方差矩阵以及给定点云数据的中心点4)利用一组点的指数对其进行一般的、通用的nD中心估计。 3、common.h1)计算两个向量之间的角度2)同时计算给定点云数据的均

PCL 点云法向量估计

点云法向量估计 一、代码示例二、运行结果 🙋 前言 点云法向量估计(normalEstimation):是一种计算点云中每个点的法向量的方法。点云法向量是描述点云表面方向的一种重要属性,可以用于点云分割、特征提取和重建等应用。 一、代码示例 #include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL);#i

PCL 拟合二维椭圆(迭代法)

文章目录 一、简介二、实现代码三、实现效果参考资料 一、简介 一般情况,我们会用椭圆拟合二维点,用椭球拟合三维点。在n维中,这些对象被称为超椭球体,由二次方程隐式定义 超椭球的中心是n×1向量C,n×n矩阵S是正定的,n×1向量X是超椭球上的任意点。矩阵S可以用特征分解,S = R D R T RDR^T RD

PCL 绘制二维椭圆

文章目录 一、简介二、实现代码三、实现效果 一、简介 与绘制圆形相同,我们将椭圆使用参数t进行表示(参数化): 其中, t ∈ [ 0 , 2 ∗ π ] t\in[0,2*\pi] t∈

PCL 点云均值平滑

文章目录 一、简介二、实现代码三、实现代码参考资料 一、简介 这个思路与二维图像的均值滤波很是类似,在一些论文中有学者使用这种方法实现对点云的简单平滑处理,以方便后续的计算。具体的计算过程也很简单:即遍历每个点,并基于每个点的邻域,计算其邻域点集的质心,以此来生成新的平滑点云数据。 二、实现代码 // 标准文件#include <iostream>// PCL#in

点云获取pcl点云以某个点云的已经分块得区域的交集

首先将点云分块得到区域后,获取每个块的box的最大最小点云,然后提取box内的点云。 pcl::IndicesPtr indexes(new pcl::Indices());pcl::getPointsInBox(*cloud_1, min_pt, max_pt, *indexes);// --------------------------取框内和框外点--