滤波步骤:
1.遍历点云计算每个点附近的K个点之间的平均距离,再对所有点的平均距离计算其均值E和标准差,标准差反映所有点的K邻域的平均距离分布的离散程度。
2.确定滤波阈值,阈值=E+p*;p为需要设置的参数。
3.再遍历点云中的每个点,比较其K个点邻域的平均距离是否大于阈值,大于则认为是离群点,删除。
代码:
#include <pcl/filters/statistical_outlier_removal.h>
void sor_filter(pcl::PointCloud<pcl::PointXYZI>::Ptr& src)
{
//滤波离群点
pcl::StatisticalOutlierRemoval<pcl::PointXYZI> sor;
sor.setInputCloud(src);
sor.setMeanK(50); // 设置在计算每个点的邻近点时使用的邻近点数量 指定用于计算每个点邻近点的数量。较小的值将更严格地过滤点。
sor.setStddevMulThresh(1.0); // 设置标准差乘数阈值,用于确定哪些点被认为是噪声。
sor.filter(*src);
}