篇章6.1 使用直通滤波器对点云进行滤波处理

写在前面:小白学习激光雷达、PCL点云库,不懂Linux不懂c++,非常艰难的学着,做出学习笔记,希望能对小白起步有所帮助,也希望能够得到大佬的指点。

————————————————————

使用PCL(Point Cloud Library)库来实现激光雷达数据的滤波,就是应用PCL提供的算法和处理工具来对点云数据进行预处理,以去除噪声、异常值,优化数据质量,从而为后续的点云处理和分析任务提供更准确的数据基础。

首先给个完整例程:

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

int
main ()
{
  // 创建一个PointCloud<pcl::PointXYZ>指针用于存储原始点云数据
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
  // 创建一个PointCloud<pcl::PointXYZ>指针用于存储过滤后的点云数据
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>);

  // 填充点云数据
  cloud->width  = 5; // 设置点云宽度为5
  cloud->height = 1; // 设置点云高度为1,表示这是一朵无序点云
  cloud->points.resize (cloud->width * cloud->height); // 根据宽度和高度分配点云空间

  // 随机生成点云数据
  for (auto& point: *cloud)
  {
    point.x = 1024 * rand () / (RAND_MAX + 1.0f); // 随机生成x坐标
    point.y = 1024 * rand () / (RAND_MAX + 1.0f); // 随机生成y坐标
    point.z = 1024 * rand () / (RAND_MAX + 1.0f); // 随机生成z坐标
  }

  // 打印原始点云数据
  std::cerr << "Cloud before filtering: " << std::endl;
  for (const auto& point: *cloud)
    std::cerr << "    " << point.x << " "
                        << point.y << " "
                        << point.z << std::endl;

  // 创建一个PassThrough滤波器对象
  pcl::PassThrough<pcl::PointXYZ> pass;
  pass.setInputCloud (cloud); // 设置输入点云
  pass.setFilterFieldName ("z"); // 设置滤波字段为z坐标
  pass.setFilterLimits (0.0, 1.0); // 设置滤波范围为0到1
  // pass.setNegative (true); // 如果设置为true,则滤波器将保留不在指定范围内的点
  pass.filter (*cloud_filtered); // 执行滤波操作,结果存储在cloud_filtered中

  // 打印过滤后的点云数据
  std::cerr << "Cloud after filtering: " << std::endl;
  for (const auto& point: *cloud_filtered)
    std::cerr << "    " << point.x << " "
                        << point.y << " "
                        << point.z << std::endl;

  return (0);
}

这里的关键参数就是“setFilterFieldName("z")”,和setFilterLimits(0,1),对z轴范围在(0,1)以外的点全部过滤掉。

ab1301a548894e408140e75647b696de.png

如果对x进行滤波,同样的参数下:

aa9e6f400d7a4945975b7000d2abb6ba.png

 

在学习完直通滤波后,提出几个问题:

1、如何将激光雷达扫描出的点云pcd文件进行滤波

2、这种滤波太死板,有没有更好的滤波方式

 

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值