对 pcl::StatisticalOutlierRemoval 滤波器的理解
注:以下内容基于与 GPT-4 的交流并结合个人理解整理而成。若有描述不准确或模糊之处,欢迎指正。
参数配置
setMeanK(int meanK):- 此参数设置每个点要考虑的邻居数量,影响着计算点的局部平均距离。较大的
meanK值可能包含更多的邻居,使滤波过程更加平滑,但可能降低移除离群点的能力。选择合适的meanK值取决于点云数据的密度和规模。例如,在稠密的点云中,较小的meanK值可能就足够了,而在稀疏的点云中,可能需要更大的meanK值来获得可靠的平均距离估计。
- 此参数设置每个点要考虑的邻居数量,影响着计算点的局部平均距离。较大的
setStddevMulThresh(double stddevMulThresh):- 此参数定义了离群点的阈值,基于平均距离的标准差的倍数计算。较高的
stddevMulThresh值意味着更宽松的离群点判断标准,可能保留更多的噪声点;较低的值则更严格,可能移除更多有效数据点。通常,开始时使用默认值(如 1.0),然后根据实际数据的噪声水平进行调整。
- 此参数定义了离群点的阈值,基于平均距离的标准差的倍数计算。较高的
setNegative(bool negative):- 此布尔参数决定滤波器保留或排除检测到的离群点。若设置为
true,滤波器将保留被标记为离群点的数据,移除其他点;若为false,则只保留非离群点。
- 此布尔参数决定滤波器保留或排除检测到的离群点。若设置为
setInputCloud(const PointCloudConstPtr &cloud):- 用于设置输入点云,是进行滤波处理前的必要步骤。
filter(PointCloud &output):- 虽然不是一个配置参数,但这个方法用于执行滤波操作。它应用上述设置的参数并产生滤波后的点云。
使用示例
#include <pcl/filters/statistical_outlier_removal.h>
// 移除统计离群值
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
sor.setInputCloud(parent_filtered_cloud);
sor.setMeanK(50);
sor.setStddevMulThresh(1.0);
sor.filter(*parent_filtered_cloud);
执行逻辑
注: 这里离群点的去除, 去除的是主点, 如果一个主点距离其最近的几个点的平均距离与整个点云的平均距离相差较大, 则把这个主点抠掉
-
根据
setMeanK的值为每一个点划分群(这个是我给这个过程起的名称)例如有A1, A2, A3…An个点, MeanK=5, 那么假设距离每个点最近的点是序号邻近的点, 即距离A1最近的5个点是An-1, An, A2, A3, A4, 则这就是A1的群[An-1, An, A2, A3, A4], 同理A2的群为[An, A1, A3, A4, A5], 以此类推
-
计算每个群距离其主点(群的名称, 如A1, A2等)的平均距离
例如, A1, 群为[An-1, An, A2, A3, A4], 计算 每一个点距离A1的距离, 求均值, 得到 d1
A2, 群为[An, A1, A3, A4, A5], 计算 每一个点距离

本文详细解释了PCL库中的StatisticalOutlierRemoval滤波器,涉及参数meanK、stddevMulThresh的作用,以及如何根据数据特性配置和执行离群点检测。通过实例展示了如何设置参数并应用到点云处理中去移除离群点。
最低0.47元/天 解锁文章
1188

被折叠的 条评论
为什么被折叠?



