美文网首页
PCL点云滤波

PCL点云滤波

作者: 红缕鱼与绿缕鱼与驴 | 来源:发表于2018-11-12 16:14 被阅读0次

1. 需要进行滤波的4种情况

1 点云数据密度不规则
2 离群点(比如由于遮挡等原因噪声的)
3 下采样
4 噪声

2. PCL滤波中的类(32)和函数(5)

类class pcl::ApproximateVoxelGrid<PointT>
该类根据给定的点云生成三维体素栅格,并利用栅格的中心店近似替代该栅格中的所有点,以此完成降采样,得到滤波效果.
用途:海量数据压缩,滤波,尤其是在特征提取中,选择合适的体素大小可以极大提高效率.
类成员函数:设置栅格大小,设置是否对所有字段(XYZRGBA等)进行下采样等.

1.双边滤波 class pcl::BilateralFilter<PointT>

图像处理中的双边滤波可以较好的保留边界信息
(注:高斯滤波按照距离中心店的远近设置权种,越近则权重越大;
而双边滤波是按照卷积核中元素强度值与中心点强度的近似情况来设置权重,强度值越相近,则该点权重越大 ---顾双边滤波能更好的保留边界信息)
同样,在pcl三维点云滤波中,也是按照强度值来进行滤波的--故要求点云信息中必须包含强度数据
关键成员函数列举:

void applyFilter(&output) 对数据点云进行滤波,并输出到output中存储结果
double computePointWeight(pid,vector<points_index>,vector<points_dist>)

2.类BoxClipper3D<pointT>

3.Clipper3D

4. class pcl::ConditionalRemoval<PointT>

用户自定义规则,以规律符合条件的点,非常灵活
关键成员函数:

void setKeepOrganized(bool) 是否保留滤波后被删除的点(比如可以直接删除(false),或设置用户自定义值(true) setUserFilterValue(float)
setCondition(ConditionBasePtr condition) 设置滤波条件(具体使用待查)

5. 类卷积滤波 class pcl::filters::Convolution<PointT,PointOut>

实现卷积滤波的功能
关键成员函数

void setKernal(const Eigen::ArrayXf & kernal) 设置卷积核(Eigen::Array格式)
void setBordersPolicy(int policy) 设置边缘处理方式 (-1:0处理;0:镜像处理;1:扩展处理,赋值附近的点值)
void setDistanceThreshold(float) 设置卷积时行列相邻点之间的最大距离阈值
void setNumberOfThreads(int) 设置线程数(值-1表示不限制)
void convolveRows(&out) 行卷积实现
void convolveCols(&out) 列卷积实现
void convolve(&out) 先行再列卷积

7. 高斯滤波class pcl::filters::GaussianKernal<PointT,PointTout>

相当于一个具有平滑性能的低通滤波器
关键函数

void setSigma(float) 设置高斯标准差(决定了函数的宽度)
setThresholdRelativeToSigma(float)
setThreshold(float)

8. 基于颜色的高斯滤波pcl::filters::GaussianKernalRGB<in,out>

同时考虑XYZ和RGB

9. pcl::CropBox<PointT>

删除用户给定空间内的点

10. pcl::CropHull<PointT>

14 pcl::Filter<PointT>

24. 简单删除离群点class pcl::RadiusOutlierRemoval<PointT>

即如果一个点在radius半径内少于k个点,那么就认为该点是离群点

setRadiusSearch(double radius)
setMinNeighborsInRadius(int k)

26. 均匀概率随机抽样 pcl::RandomSample<PointT>

应用实例

使用直通滤波器对点云进行滤波

指定某一维度进行滤波,即去掉用户指定范围内的点 --大范围截取ROI

pcl::PassThroudh<pcl::PointXYZ> pass;  //设置滤波器对象
pass.setInputCloud(cloud);
pass.setFilterFieldName("z");  //设置对那个维度进行过滤
pass.setFilterLimits(0.0,1.0); // 设置过滤值范围
// pass.setFilterLimitsNegative(true); //设置保留范围内的害死过滤掉范围内的
pass.filter(*out_cloud);  // 执行

相关文章

  • 点云数据滤波处理(PCL实现)

    点云数据滤波处理(PCL实现) 1.滤波器介绍 点云目标识别的流程:数据采集->滤波->点云分割->点云识别,数据...

  • PCL点云滤波

    1. 需要进行滤波的4种情况 1 点云数据密度不规则2 离群点(比如由于遮挡等原因噪声的)3 下采样4 噪声 2....

  • PCL——点云高斯滤波

    ////////////////////////////////////高斯滤波/////////////////...

  • ply点云转换为pcd点云

    输入ply格式,输出带XYZI信息的pcd点云,如果需要XYZRGB信息的pcd点云,可以将pcl::PointC...

  • 使用Kdtree加速的DBSCAN进行点云聚类

    作者:姜小明 @github 日期:2020-06-28 关键字:Kdtreee, DBSCAN, PCL, 点云...

  • C++ 保存pcd、ply格式的点云文件

    1. 说明 pcd、ply格式的点云都可以用PCL库进行很方便的保存,这里没写 由于PCL库是很重型的库,很多小程...

  • pcl点云索引与应用

    pcl点云索引与应用(csdn) 点云索引其实就是将点云中不同点加上标签,方便后面的分类提取。有了点云的索引值可以...

  • DSO_PCL踩坑+CMake+Boost+ROS+PCL+Ei

    任务 DSO_PCL已经实现将生成的点云保存到文件,现实现将点云基于ROS通信机制以Topic发布点云消息 踩坑一...

  • 常见点云滤波算法

    姓名:张志文 学号:19021210649【嵌牛观察】目前点云处理的算法十分的多,不同的滤波算法有着不同的应用方...

  • 常见点云滤波算法

    本博客内容来源于网络以及其他书籍,结合自己学习的心得进行重编辑,因为看了很多文章不便一一标注引用,如图片文字等侵权...

网友评论

      本文标题:PCL点云滤波

      本文链接:https://www.haomeiwen.com/subject/alecfqtx.html