PCL ConditionalRemoval RadiusOutlierRemoval 滤波

Part1: RadiusOutlierRemoval

RadiusOutlierRemoval 在点云数据中,用户指定每个的点一定范围内周围至少要有足够多的近邻点,如果没有哪么多,就被清除;有利于清除孤立的点;

Part2:ConditionalRemoval
它可以一次删除满足对输入的点云设定的一个或多个条件指标的所有数据点。
相比之下,RadiusOutlierRemoval滤波器非常适合去除单个的离群点。而ConditionalRemoval比较灵活,可以根据设置的条件进行过滤,有点像直通滤波。

RadiusOutlierRemoval

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_conditional(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_radius(new pcl::PointCloud<pcl::PointXYZ>);

    pcl::io::loadPCDFile("indata.pcd", *cloud_in);
    //------------radius_remove-----------------
    pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;
    outrem.setInputCloud(cloud_in);
    outrem.setRadiusSearch(0.5);
    outrem.setMinNeighborsInRadius(20);
    outrem.filter(*cloud_radius);

ConditionalRemoval

   //--------------condition_remove 的滤波器---------------
    //build the filter
    pcl::ConditionAnd<pcl::PointXYZ>::Ptr range_cond(new pcl::ConditionAnd<pcl::PointXYZ>);//实例化条件指针

range_cond->addComparison(pcl::FieldComparison<pcl::PointXYZ>::ConstPtr(new pcl::FieldComparison<pcl::PointXYZ>("z", pcl::ComparisonOps::GT, 0.0)));

range_cond->addComparison(pcl::FieldComparison<pcl::PointXYZ>::ConstPtr(new pcl::FieldComparison<pcl::PointXYZ>("z", pcl::ComparisonOps::LT, 5.0)));
    //build the filter
    pcl::ConditionalRemoval<pcl::PointXYZ> condrem;
    condrem.setCondition(range_cond);
    condrem.setInputCloud(cloud_in);
    condrem.setKeepOrganized(true);//保存原有点云结结构就是点的数目没有减少,采用nan代替了
    //apply filter
 condrem.filter(*cloud_conditional);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋西风

up up up

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值