一、直通滤波器
在点的属性上设置范围,对点进行滤波,保留该属性上范围内或范围外的点
(1)指定一个维度以及该维度下的值域
(2)遍历点云中每一个点,判断该点在指定维度下的值是否存在值域内,不存在则删除
(3)遍历结束,剩下没被删除的点就是滤波后的点
使用场景:在知道噪声点某一维度上的值时,可以进行去噪
二、体素滤波器(下采样)
体素滤波器可以在达到点云下采样的同时,不破坏点云几何结构,但是会移动点云的位置。主要时用于下采样
(1)根据输入的点云,计算一个刚好能包住点云的立方体,根据设定的分辨率,将该立方体分成多个不同的小立方体(体素)
(2)对于每个体素,计算体素内所有点的重心(坐标平均值),用重心坐标来表示体素内的若干个点的坐标
pcl::VoxelGrid<pcl::PointXYZ> sor;
sor.setInputCloud(cloud_in);
sor.setLeafSize(0.01,0.01,0.01);
sor.filter(*cloud_filtered);

三、近似体素滤波
与体素滤波VoxelGrid不同,近似体素ApproximateVoxelGrid用体素的中心坐标来表示体素内点的坐标,该方法不依赖于体素内是否存在点云
pcl::ApproximateVoxelGrid<pcl::PointXYZ> approximate_voxel_filter;
approximate_voxel_filter.setLeafSize (0.01, 0.01, 0.01);
approximate_voxel_filter.setInputCloud (cloud_in);
approximate_voxel_filter.filter (*cloud_filtered);

四、均匀采样滤波器(下采样)
均匀采样通过构建指定半径的球体来对点云进行下采样滤波,将球体内里球心最近的点作为下采样之后的点。相比于体素滤波,该方法不会移动点的位置
pcl::UniformSampling<pcl::PointXYZ> unifm_smp;
unifm_smp.setRadiusSearch(0.01);
unifm_smp.setInputCloud(cloud_in);
unifm_smp.filter(*cloud_filtered);

五、统计滤波器(去噪)
统计滤波器主要用于去除稀疏离群点
(1)计算每个点到其临近的k个点的平均距离
(2)若得到的结果符合高斯分布,根据给定的均值与方差,剔除方差之外的点
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
sor.setInputCloud (cloud_in);
sor.setMeanK (20); //设置考虑查询点临近点数
sor.setStddevMulThresh (1.0);//设置判断是否为离群点的阀值
sor.filter (*cloud_filtered);

六、条件滤波器
条件滤波器可以看做是直通滤波器的升级版,直通滤波器只能对某一个维度进行值域选取,而条件滤波器可以多个在多个维度上进行值域选取
七、半径滤波(去噪)
(1)分别以每个点为中心,计算其半径内的其它点个数
(2)当半径内其它点个数小于某一指定点时,该中心点被剔除
pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;
outrem.setInputCloud(cloud_in);
outrem.setRadiusSearch(0.2);//设置半径为0.2的范围内找临 *点
outrem.setMinNeighborsInRadius (3);//设置查询点的邻域点 集数小于3的删除
outrem.filter (*cloud_filtered); //在半径为0.2 在此半径内必须要有3个邻居点,此点才会保存

八、投影滤波
将三维点云投影到二维平面上,用图像处理的方法来进行滤波
九、模型滤波
根据点到模型的距离,删除非模型点
十、高斯滤波
主要目的:平滑点云数据以及去除噪声
滤波器根据预定义的窗口大小,在其邻域内选择一定数量的邻居点,根据邻居点与目标点之间的距离远近关系,为每个点分配一个权重值。权重值通常与距离成反比。最后,对邻居点的数值进行加权平均,得到目标点的新数值
十一、双边滤波器(平滑)
双边滤波是一种非线性滤波器,它可以达到保持边缘、降噪平滑的效果。一定程度上弥补了高斯滤波的缺点,双边滤波效果比高斯滤波好。
1966

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



