PCL直通滤波(passthrough)

PCL专栏目录及须知-CSDN博客

1.原理

即对pcl::PointT中的某个维度(如X/Y/Z)来进行滤波,该维度中超过用户设定阈值范围的点云点删除,在用户设定阈值范围点云点保留。

(1)设置需要滤波的点云属性值。

(2)判断是否在用户设定的阈值范围内,在其中的保留,不在其中的删除。

2.使用场景

需要对某一个维度滤波的场景。例如删除地面点。

如下图:

通过直通滤波器过滤掉红框内z值范围的点云。

3.注意事项

直通滤波和条件滤波类似,只是条件滤波功能比直通滤波多些。工作中能用直通滤波就用直通滤波,别老用条件滤波,直通滤波代码简单易看。

4.关键函数

(1)设置滤波的维度;注意参数为string类型的。

setFilterFieldName("z");

(2)设置阈值范围

setFilterLimits()

(3)设置是否保留过滤点;true不保留范围内的点,false保留范围内的点;

setNegative()

5.代码

#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>
#include <boost/thread/thread.hpp>
using namespace std;

int main()
{
    /****************直通滤波器********************/
    // 原始点云
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
    pcl::io::loadPCDFile("D:/code/csdn/data/bunny.pcd", *cloud);   // 加载原始点云数据
    // 结果点云
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>);

    // 直通滤波
    pcl::PassThrough<pcl::PointXYZRGB> passTh;                                      // 直通滤波器
    passTh.setInputCloud(cloud);                                                    // 输入原始点云
    passTh.setFilterFieldName("z");                                                 // 直通滤波将过滤的维度,可以是pcl::PointXYZRGB中任意维度
    passTh.setFilterLimits(0.0, 0.1);                                               // 阈值范围
    passTh.setNegative(true);                                                       // true不保留范围内的点,false保留范围内的点
    passTh.filter(*cloud_filtered);                                                 // 结果存入新点云对象中

    /****************展示********************/
    boost::shared_ptr<pcl::visualization::PCLVisualizer> view_raw(new pcl::visualization::PCLVisualizer("raw"));
    view_raw->addPointCloud<pcl::PointXYZRGB>(cloud, "raw cloud");
    view_raw->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "raw cloud");

    boost::shared_ptr<pcl::visualization::PCLVisualizer> view_filtered(new pcl::visualization::PCLVisualizer("filter"));
    view_filtered->addPointCloud<pcl::PointXYZRGB>(cloud_filtered, "filtered cloud");
    view_filtered->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "filtered cloud");

    while (!view_raw->wasStopped())
    {
        view_raw->spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(100000));
    }
    while (!view_filtered->wasStopped())
    {
        view_filtered->spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(100000));
    }

    return 0;
}

6.结果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值