点云滤波---条件滤波器

适用对象

滤除离群点的一种滤波方法。

工作原理

通过设定滤波条件进行滤波,删除点云中不符合用户指定的一个或多个条件的点。

PCL核心代码实现

//创建条件对象
pcl::ConditionAnd<pcl::PointXYZ>::Ptr range_cond (new pcl::ConditionAnd<pcl::PointXYZ> ());
/*
//比较条件符号说明:
//GT greater than
//EQ equal
//LT less than
//GE greater than or equal
//LE less than or equal
*/
//添加比较条件1:z>0.0
range_cond->addComparison (pcl::FieldComparison<pcl::PointXYZ>::ConstPtr (new pcl::FieldComparison<pcl::PointXYZ> ("z", pcl::ComparisonOps::GT, 0.0)));
//添加比较条件2:z<0.8
range_cond->addComparison (pcl::FieldComparison<pcl::PointXYZ>::ConstPtr (new pcl::FieldComparison<pcl::PointXYZ> ("z", pcl::ComparisonOps::LT, 0.8)));


pcl::ConditionalRemoval<pcl::PointXYZ> condrem;	//创建条件滤波器对象
condrem.setCondition (range_cond);				//设置条件
condrem.setInputCloud (cloud);					//设置输入点云
condrem.setKeepOrganized(true);					//设置保持点云的结构
condrem.filter (*cloud_filtered);				//执行滤波

condrem.setKeepOrganized( )详解:
设置受保持点云的结构。
有序点云执行滤波之后,希望仍然能够保持有序性
若设置为true,再通过setuserFilterValue设置一个指定的值,被滤除的点将会被用户指定的值代替。
若设置为true,没有通过setuserFilterValue设置一个指定的值,则用nan填充被滤除的点
若设置为false,则直接将滤除的点删除,从而可能改变点云的组织结构

完整代码将与半径滤波器一起给出。查看点云滤波—半径滤波器

参考资料

Removing outliers using a Conditional or RadiusOutlier removal

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值