PCL点云库学习笔记(滤波)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

点云滤波

一、使用直通滤波器

#include <iostream>
#include <pcl/point_types.h>
#include <pcl/filters/passthrough.h>

int
main(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>);

	// 填充点云
	cloud->width = 5;//点云的数量
	cloud->height = 1;//无序点云
	cloud->points.resize(cloud->width * cloud->height);

	for (std::size_t i = 0; i < cloud->points.size(); ++i)
	{
		cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);//为点云填充数据
		cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
	}

	std::cerr << "Cloud before filtering: " << std::endl;//打印所有点
	for (std::size_t i = 0; i < cloud->points.size(); ++i)
		std::cerr << "    " << cloud->points[i].x << " "
		<< cloud->points[i].y << " "
		<< cloud->points[i].z << std::endl;

	// Create the filtering object
	pcl::PassThrough<pcl::PointXYZ> pass;//设置滤波器对象
	pass.setInputCloud(cloud);//输入点云
	pass.setFilterFieldName("z");//设置过滤式所需要的点云类型的z字段
	pass.setFilterLimits(0.0, 500.0);//设置过滤字段的范围
	//pass.setFilterLimitsNegative (true);
	pass.filter(*cloud_filtered);//执行滤波

	//输出滤波点云
	std::cerr << "Cloud after filtering: " << std::endl;
	for (std::size_t i = 0; i < cloud_filtered->points.size(); ++i)
		std::cerr << "    " << cloud_filtered->points[i].x << " "
		<< cloud_filtered->points[i].y << " "
		<< cloud_filtered->points[i].z << std::endl;

	return (0);
}

在这里插入图片描述

二、使用VoxelGrid滤波器进行下采样

对点云数据集进行降采样,即减少点数。VoxelGrid类在输入点云数据上创建一个三维体素网格(将体素网格视为空间中的微小的三维立方体集合)。在每个体素(立方体)中,用体素中所有点的重心来表示体素内的所有点(即下采样)。 这种方法比用体素的中心逼近它们要慢一些,但是它可以更准确地表示曲面。

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>

int main(int argc, char** argv)
{
	pcl::PCLPointCloud2::Ptr cloud(new pcl::PCLPointCloud2());
	pcl::PCLPointCloud2::Ptr cloud_filtered(new pcl::PCLPointCloud2());

	// 读取点云
	pcl::PCDReader reader;
	reader.read("table_scene_lms400.pcd", *cloud); 

	std::cerr << "PointC
【点云处理技术之PCL滤波器——离群点滤波(statisticalOutlierRemoval、ConditionalRemoval 和RadiusOutlinerRemoval) 通常激光点云往往会伴随着一些噪声的存在,而这会使局部点云特征(如曲面法线或曲率变化)的估计变得复杂,从而导致错误的值,进而可能导致点云配准失败。StatisticalOutlierRemoval滤波器,是一种使用统计化的方法删除离群点的滤波器。这种滤波器对每个点的邻域进行统计分析,并对不符合统计结果的点进行删除,统计方法是根据数据的邻域距离进行分析出来的结果。对于每一个点都会计算它到邻域的平均距离,并假设所有的点满足高斯分布,计算出来的平均值如果不满足全局距离下的高斯分布,则对它进行修建。 阅读详情

相关推荐

PCLPCLPointCloud2和PointCloud类型的区别

PCL 中有两种表示点云的数据结构,分别为 PointCloud<PointT> 和 PCLPointCloud2。官方注释中常称为 a pcl::PointCloud<T> object 以及 a PCLPointCloud2 binary data blob。两者的最大区别是储存数据的方式: PointCloud<PointT> 为模板类,其中指定了每个。这种存储方式使得数据非常清晰,可以很方便地对某一个点或是某个点的某一字段进行访问,但无法选择存储或删除某一字段。中有两种表示点云的数据结构,分别为。

flying_ant2018的博客 2096

PCLPointCloud2类型介绍

`pcl::PCLPointCloud2` 是 ROS(机器人操作系统)消息类型,PCL 提供了函数可以将PCLPointCloud2 与 PointCloud 两者转化。

weixin_45867382的博客 6070

pcl入门教程滤波系列】之StatisticalOutlierRemoval

简介   激光雷达扫描周围环境时候通常会产生不同点密度的数据集。同时,如果测量偏差(例如抖动、传感器安装位置偏差)将会导致更加稀疏的异常值出现,从而使点云生成结果质量更差。这样将会导致局部点云特征(如曲面法线或曲率变化)的估计更加复杂,很肯能导致估计出错误值。StatisticalOutlierRemoval算法通过对每个点的邻域进行统计分析,删除不符合特定标准的点,能够解决一些异常离群点的干扰。该算法对点云的异常值判断是通过输入点云的所有点到其邻域内距离分布的统计计算。对于每个点,都计算其到所有邻域距离的

AutoXTruck专栏 2465

pcl小知识(二)——点云数据格式之间的转化(PCLPointCloud2与PCLPointCloud)

由于PCL1.8.0中没有PointCLoud2类,《点云库PCL学习教程》中的部分代码无法运行,需要进行数据格式的转化,本文在学习VoxelGrid滤波时找到了适合新版本PCL的代码,并在研究“转化为模板点云”时发现了这篇文章。这篇文章以新版VoxelGrid代码讲解了PointCloud2与PointCloud类的区别。转过来方便大家一起学习。

liukunrs的博客 2万+

PCL点云库滤波器模块学习笔记

自学PCL滤波器模块的笔记,综合了GitHub中部分学习教程和PCL官网对各个类及函数的描述,随时学习随时补充,未完待续。

BTChioa的博客 1037

PCL点云库学习笔记(4)——点云滤波

1.PCL滤波算法及相关概念 1)需要进行滤波的情况及对应的处理方式: 点云数据密度不规则需要平滑处理——按具体给定的规则限制过滤 因遮挡造成离群点 大量数据——降采样 噪声数据 2)双边滤波:通过取临近点的加权平均来修正当前采样点的位置,从而达到滤波的效果。同时剔除与当前采样点差异较大的相邻采样点,达到保持原有特征的目的。 2.直通滤波器对点云处理 指定某一维度实行简单滤波,即去掉用户指定范围内部(或者外部)的点。 #include <iostream> #include <ctime&

张飞飞的博客 1289

点云库PCL学习笔记 -- 点云滤波Filtering -- 2. VoxelGrid 体素网格滤波

点云库PCL学习笔记 -- 点云滤波Filtering -- 2.VoxelGrid 体素网格滤波器1. VoxelGrid 体素网格滤波器代码2. 编译文件3. 测试 1. VoxelGrid 体素网格滤波器代码 VoxelGrid 体素网格滤波器代码pcl_visualizer_demo.cpp 2. 编译文件 设置编译文件CMakeLists.txt 编译 mkdir build cd build/ cmake .. make 3. 测试 执行程序 cd .. ./build/pcl

杰尼君的博客 1401

点云库PCL学习笔记 -- 点云滤波Filtering -- 3. StatisticalOutlierRemoval 统计滤波

点云库PCL学习笔记 -- 点云滤波Filtering -- 3.StatisticalOutlierRemoval 统计滤波器1. StatisticalOutlierRemoval 统计滤波器代码2. 编译文件3. 测试 1. StatisticalOutlierRemoval 统计滤波器代码 StatisticalOutlierRemoval 统计滤波器代码pcl_visualizer_demo.cpp 2. 编译文件 设置编译文件CMakeLists.txt 编译 mkdir buil

杰尼君的博客 829

点云库PCL学习笔记 -- 点云滤波Filtering -- 6. ConditionalRemoval 条件滤波 和 RadiusOutlierRemoval 半径滤波

点云库PCL学习笔记 -- 点云滤波Filtering -- 6.ConditionalRemoval 条件滤波 和 RadiusOutlierRemoval 半径滤波1. ConditionalRemoval 条件滤波 和 RadiusOutlierRemoval 半径滤波代码2. 编译文件3. 测试 1. ConditionalRemoval 条件滤波 和 RadiusOutlierRemoval 半径滤波代码 ConditionalRemoval 条件滤波 和 RadiusOutlierRemova

杰尼君的博客 834

点云库PCL学习笔记 -- 点云滤波Filtering -- 1.直通滤波

点云库PCL学习笔记 -- 点云滤波Filtering -- 1.直通滤波器1. 直通滤波器代码2. 编译文件3. 测试 1. 直通滤波器代码 直通滤波器代码pcl_visualizer_demo.cpp 2. 编译文件 设置编译文件CMakeLists.txt 编译 mkdir build cd build/ cmake .. make 3. 测试 执行程序 cd .. ./build/pcl_visualizer_demo -h 结果如下: ...

杰尼君的博客 472

点云库PCL从入门到精通》不完全学习笔记

我认为快不快速,在原理上的差别在于:PFH是计算邻域内所有点的统计结果,FPFH是先计算一组(但是这个一组是怎么个范围,不是很清楚),再用计算结果表示邻近点的直方图;首先,指定一个维度以及该维度下的值域,其次,遍历点云中的每个点,判断该点在指定维度上的取值是否在值域内,删除取值不在值域内的点,最后,遍历结束,留下的点即构成滤波后的点云。因此,泊松曲面重建比上述方法更可取,因为它们会产生非平滑结果,因为点云的点也是生成的三角形网格的顶点,无需任何修改。它为源点云中的每个点计算到目标点云中最近点的距离。

weixin_43245498的博客 1937

点云库PCL学习笔记 -- 点云滤波Filtering -- 7. CropHull 任意多边形内部点云提取

点云库PCL学习笔记 -- 点云滤波Filtering -- 7.CropHull 任意多边形内部点云提取1. CropHull 任意多边形内部点云提取代码2. 编译文件3. 测试 1. CropHull 任意多边形内部点云提取代码 CropHull 任意多边形内部点云提取代码pcl_visualizer_demo.cpp 2. 编译文件 设置编译文件CMakeLists.txt 编译 mkdir build cd build/ cmake .. make 3. 测试 执行程序 cd ..

杰尼君的博客 1143

点云库PCL学习笔记 -- 点云滤波Filtering -- 5.从一个点云中提取子集

点云库PCL学习笔记 -- 点云滤波Filtering -- 5.1.从一个点云中提取子集代码2. 编译文件3. 测试 1.从一个点云中提取子集代码 从一个点云中提取子集代码pcl_visualizer_demo.cpp 2. 编译文件 设置编译文件CMakeLists.txt 编译 mkdir build cd build/ cmake .. make 3. 测试 执行程序 cd .. ./build/pcl_visualizer_demo -h 结果如下: ...

杰尼君的博客 551

点云库PCL学习笔记 -- 点云滤波Filtering -- 4. 使用参数化模型投影点云

点云库PCL学习笔记 -- 点云滤波Filtering -- 4.使用参数化模型投影点云1. 参数化模型投影点云代码2. 编译文件3. 测试 1. 参数化模型投影点云代码 参数化模型投影点云代码pcl_visualizer_demo.cpp 2. 编译文件 设置编译文件CMakeLists.txt 编译 mkdir build cd build/ cmake .. make 3. 测试 执行程序 cd .. ./build/pcl_visualizer_demo -h 结果如下: .

杰尼君的博客 375

学习笔记PCL点云库的基本使用

点云是一种能够直观地表示和操作3D传感器所提供数据的方式,这类传感器包括深度摄像头和激光雷达。该类传感器在三维坐标参考系下对空间进行有限点集采样构成点云。通俗的来说,点云就是分布在三维空间的有限个点,这些点具体化的表示了三维传感器所采集到的数据,我们可以很容易的通过点云来查看空间中物体的位置。

qq_59475883的博客 1万+

PCL点云库安装及学习(2021.7.28)

PCL点云库学习 2021.7.131、PCL简介2、PCL环境配置3、PCL代码实战 1、PCL简介         PCL是一个点云库PCL帮助文档,PCL论文下载,PCL的Github地址 2、PCL环境配置 3、PCL代码实战 ...

I have a dream, here my dreams come true! 2万+

【激光雷达】认识点云库PCL

前言 激光雷达生成的点云数据通过可视化显示,是下图中的效果: 能看到激光雷达发射多线激光束(蓝色圆圈形纹),通过接收器进行处理加工,最好可视化展示出来。从图能看到车、行人、路灯杆、周围的建筑物等。 我们能看到它感知到行人(红色的),一圈一圈类似于水纹的是激光雷达发出的光波。 那么通过什么来处理这些点云数据呢? 答案是:PCL点云库 简介 PCL全称 Poi...

黎国溥 6675

点云库PCL的使用

相关头文件: #include <pcl/io/io.h> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/visualization/cloud_viewer.h> 声明和定义点云对象: pcl::PointCloud<pcl::PointX...

A_L_A_N 1万+

点云库PCL学习——几种滤波方式

本章主要介绍几种PCL点云滤波方式: 下采样 均匀采样 增采样

zzh_AI的博客 3896
上一篇: PCL点云库学习笔记(可视化2)
下一篇: PCL点云库学习笔记(特征)
catog
博客等级 码龄7年 52粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值