【PCL】?常用的点云滤波算法详解

发布时间:2021-10-18 00:36:14


参考:


    https://www.freesion.com/article/6131168793/https://www.cnblogs.com/ironstark/p/4991232.html


1. 点云滤波的概念

点云滤波是点云处理的基本步骤,也是进行 high level 三维图像处理之前必须要进行的预处理。其作用类似于信号处理中的滤波,但实现手段却和信号处理不一样。我认为原因有以下几个方面:


    点云不是函数,对于复杂三维外形其x,y,z之间并非以某种规律或某种数值关系定义,所以点云无法建立横纵坐标之间的联系。点云在空间中是离散的,和图像、信号不一样,并不定义在某个区域上,无法以某种模板的形式对其进行滤波。换言之,点云没有图像与信号那么明显的定义域。点云在空间中分布很广泛。遍历整个点云中的每个点,并建立点与点之间的相互位置关系成了最大难点。不像图像与信号,可以有迹可循。点云滤波依赖于几何信息,而不是数值关系。

综上所述,点云滤波只在抽象意义上与信号、图像滤波类似。因为滤波的功能都是突出需要的信息。


2. 点云滤波的方法

PCL对常规滤波手段均进行了很好的封装,对点云的滤波通过调用各个滤波器对象来完成。主要的滤波器有直通滤波器、体素滤波器、统计滤波器、半径滤波器等。不同特性的滤波器构成了较为完整的点云前处理族,并组合使用完成任务。实际上,滤波手段的选择和采集方式是密不可分的。


    如果使用线结构光扫描的方式采集点云,必然是物体沿z方向分布较广,但x、y方向的分布处于有限范围内。此时可使用直通滤波器,确定点云在x或y方向上的范围,可较快剪除离群点,达到第一步粗处理的目的。如果使用高分辨率相机等设备对点*胁杉阍苹峤衔芗9嗟牡阍剖炕岫院笮指罟ぷ鞔蠢选L逅芈瞬ㄆ骺梢源锏较蛳虏裳辈黄苹档阍票旧砑负谓峁沟墓δ堋5阍萍负谓峁共唤鍪呛旯鄣募负瓮庑危舶ㄆ湮⒐鄣呐帕蟹绞剑热绾嵯蛳嗨频某叽纭⒆菹蛳嗤木嗬搿K婊虏裳淙恍时忍逅芈瞬ㄆ鞲撸崞苹档阍莆⒐劢峁埂M臣坡瞬ㄆ饔糜谌コ飨岳肴旱悖ɡ肴旱阃刹饬吭肷耄F涮卣魇窃诳占渲蟹植枷∈瑁梢岳斫馕好扛龅愣急泶镆欢ㄐ畔⒘浚掣銮虻阍矫芗蚩赡苄畔⒘吭酱蟆T肷畔⑹粲谖抻眯畔ⅲ畔⒘拷闲 K岳肴旱惚泶锏男畔⒖梢院雎圆患啤?悸堑嚼肴旱愕奶卣鳎蚩梢远ㄒ迥炒Φ阍菩∮谀掣雒芏龋吹阍莆扌А<扑忝扛龅愕狡渥*的k个点*均距离,则点云中所有点的距离应构成高斯分布。给定均值与方差,可剔除3∑之外的点。半径滤波器与统计滤波器相比更加简单粗暴。以某点为中心画一个圆计算落在该圆中点的数量,当数量大于给定值时,则保留该点,数量小于给定值则剔除该点。此算法运行速度快,依序迭代留下的点一定是最密集的,但是圆的半径和圆内点的数目都需要人工指定。

实际上点云滤波的手段和传统的信号滤波与图像滤波在自动化程度、滤波效果上还有很大的差距。学者大多关注图像识别与配准算法在点云处理方面的移植,而对滤波算法关注较少。其实点云前处理对测量精度与识别速度都有很大影响。


3. 点云库对滤波算法的实现

点云库中已经包含了上述所有的滤波算法。PCL滤波算法的实现是通过滤波器类来完成的,需要实现滤波功能时则新建一个滤波器对象并设置参数,从而保证可以针对不同的滤波任务,使用不同参数的滤波器对点*写怼


3.1 直通滤波器

// Create the filtering object
pcl::PassThrough pass;
pass.setInputCloud(cloud);
pass.setFilterFieldName("z");
pass.setFilterLimits(0.0, 1.0);
//pass.setFilterLimitsNegative(true);
pass.filter(*cloud_filtered);

3.2 体素滤波器

// 创建过滤对象
pcl::VoxelGrid sor;
sor.setInputCloud(cloud);
sor.setLeafSize(0.01f,0.01f,0.01f);
sor.filter(*cloud_filtered);

3.3 统计滤波器

// 创建过滤对象
pcl::StatisticalOutlierRemoval sor;
sor.setInputCloud(cloud);
sor.setMeanK(50);
sor.setStddevMulThresh(1.0);
sor.filter(*cloud_filtered);

3.4 半径滤波器

// 构建过滤器
pcl::RadiusOutlierRemoval outrem;
outrem.setInputCloud(cloud);
outrem.setRadiusSearch(0.8);
outrem.setMinNeighborsInRadius(2);
// apply filter
outrem.filter(*cloud_filtered);

显然,不同的滤波器在滤波过程中,总是先创建一个对象,再设置对象参数,最后调用滤波函数对点*写恚ǖ阍莆悄苤刚胫赶虻囊豢榍颍


4. 基于点云频率的滤波方法
4.1 点云的频率
今天在阅读分割有关的文献时,惊喜的发现,点云和图像一样,有可能也存在频率的概念。但这个概念并未在文献中出现也未被使用,谨在本博文中滥用一下“高频”一词。点云表达的是三维空间中的一种信息,这种信息本身并没有一一对应的函数值。故点云本身并没有在讲诉一种变化的信号。但在抽象意义上,点云必然是在表达某种信号的,虽然没有明确的时间关系,但应该会存在某种空间关系(例如激光雷达点云)。我们可以人为的指定点云空间中的一个点(例如扫描的重心或LIDAR的“源”),基于此点来讨论点云在各个方向上所谓的频率。在传统的信号处理中,高频信号一般指信号变化快,低频信号一般指信号变化缓慢。在图像处理中,高低频的概念被引申至不同方向上图像灰度的变化,傅里叶变换可以用于提取图像的周期成分滤除布纹噪声。在点云处理中定义:点云法线向量差为点云所表达的信号,换言之,如果某处点云曲率大,则点云表达的是一个变化的信号;如果点云曲率小,则其表达的是一个不变的信号。这和我们的直观感受也是相*的,地面曲率小,它表达的信息量也小;人的五官部分曲率大,其表达了整个Scan中最大的信息量。
4.2 基于点云频率的滤波原理

虽然点云频率之前并没有被讨论,但使用频率信息的思想已经被广泛的应用在了各个方面,最著名的莫过于DoN算法。


DoN算法被作者归类于点云分割算法中,但我认为并不准确,本质上DoN只是一种前处理,应该算是一种比较先进的点云滤波算法。分割本质上还是由欧式分割算法完成的。DoN 是 Difference of Normal 的简写。算法的目的是在去除点云低频滤波,低频信息(例如建筑物墙面,地面)往往会对分割产生干扰,高频信息(例如建筑物窗框,路面*叮┩叨壬虾苄。苯硬捎 基于临*信息 的滤波器会将此类信息合并至墙面或路面中,所以DoN算法利用了多尺度空间的思想,算法如下:
    在小尺度上计算点云法线1;在大尺度上计算点云法线2;法线1-法线2;滤去3中值较小的点;欧式分割。

显然,在小尺度上是可以对高频信息进行检测的,此算法可以很好的保留小尺度高频信息。其在大规模点云(如LiDar点云)中优势尤其明显。


4.3 PCL对该算法的实现

// Create a search tree, use KDTreee for non-organized data.
pcl::search::Search::Ptr tree;
if (cloud->isOrganized())
{
tree.reset(new pcl::search::OrganizedNeighbor ());
}
else
{
tree.reset(new pcl::search::KdTree (false));
}
// Set the input pointcloud for the search tree
tree->setInputCloud(cloud);

//生成法线估计器(OMP是并行计算,忽略)
pcl::NormalEstimationOMP ne;
ne.setInputCloud(cloud);
ne.setSearchMethod(tree);
//设定法线方向(要做差,同向很重要)
ne.setViewPoint(std::numeric_limits::max (), std::numeric_limits::max (), std::numeric_limits::max ());

//计算小尺度法线
pcl::PointCloud::Ptr normals_large_scale (new pcl::PointCloud);
ne.setRadiusSearch(scale2);
ne.compute(*normals_large_scale);
//计算大尺度法线
pcl::PointCloud::Ptr normals_large_scale (new pcl::PointCloud);
ne.setRadiusSearch(scale2);
ne.compute(*normals_large_scale);

//生成DoN分割器
pcl::DifferenceOfNormalsEstimation don;
don.setInputCloud(cloud);
don.setNormalScaleLarge(normals_large_scale);
don.setNormalScaleSmall(normals_small_scale);

//计算法线差
PointCloud::Ptr doncloud (new pcl::PointCloud);
copyPointCloud(*cloud, *doncloud);
don.computeFeature(*doncloud);

//生成滤波条件:把法线差和阈值比
pcl::ConditionOr::Ptr range_cond (new pcl::ConditionOr ());
range_cond->addComparison(pcl::FieldComparison::ConstPtr (new pcl::FieldComparison ("curvature", pcl::ComparisonOps::GT, threshold)));
//生成条件滤波器,输入滤波条件和点云
pcl::ConditionalRemoval condrem (range_cond);
condrem.setInputCloud(doncloud);

//导出滤波结果
pcl::PointCloud::Ptr doncloud_filtered (new pcl::PointCloud);
condrem.filter(*doncloud_filtered);

//欧式聚类~~~(略)

算法运行过程可用图表示为:

相关文档

  • 单反相机的几种模式是在什么情况下使用
  • 为什么要设置环境变量
  • 冬季吃什么水果排毒还吃见效快
  • JSP内置对象之----session登录及注销
  • 软件工程专业介绍
  • 商铺出租合同实用版
  • ue4加速度_ue4虚幻引擎Add Force / Add Impulse力和脉冲(上)
  • 荣耀9iotg功能设置在哪
  • 八大祥米线加盟多少钱
  • 书房五字对联摘抄
  • 我要变坚强作文
  • 空速星痕第十章圣女百合***下***
  • 数据库的备份与恢复
  • 在Ubuntu中安装和使用stlink为Arduino for STM32下载程序
  • 想卖童装在哪进货既便宜又好看
  • 亚洲女性领导力是怎样的
  • centos7 查看启动ntp服务命令
  • 中学作文精彩片段摘抄
  • QQ三国的初阶元神升阶石去哪里弄到
  • SystemVerilog学习之数据类型
  • 上班族淡妆化妆步骤
  • 单片机打铃器c语言,单片机打铃器上下课用不同的铃声怎么编程?
  • C. cltt的幸运数LCAdfs
  • 有趣的小狗作文精选
  • 微信号封几次会永久封
  • 财务毕业论文范文精选
  • 双结婚证怎么办
  • 焊接分类
  • 《剑指offer》【滑动窗口的最大值】(python版)
  • 文氏男孩的取名方法
  • 猜你喜欢

  • 县接待办领导班子述职述廉报告
  • 你气死我了
  • 微波炉标准操作规程
  • 绿地集团吉林置业有限公司(企业信用报告)- 天眼查
  • 冷链物流的资产证券化融资原理研究
  • 2014届山东省文登市高三上学期期中统考生物试题(A卷)及答案
  • 四年级作文:第一次独自睡觉作文600字_1
  • 2021年扬州大学兽医学院829生物化学(自)考研冲刺模拟五套题
  • 徐州市艳阳纺织品经营部企业信息报告-天眼查
  • 2019广州华南国际市场研究有限公司 集团品牌调研报告
  • 家乡的小河
  • 双击文件无法打开还有救吗?一招解决这怪毛病
  • 内存条怎么修复
  • 私募市场的主体是什么
  • 新版人教部编版一年级语文下册第二单元基础测评卷
  • 银行季度个人总结报告
  • 南京谨信教育信息咨询有限公司(企业信用报告)- 天眼查
  • 综合管理制度(2017年9月9日).docx
  • 手机搜索不到蓝牙耳机
  • 大学生开学的自我介绍
  • 湖南省桃江县正大家电有限公司灰山港分公司企业信用报告-天眼查
  • 七年级语文下册第二单元综合性学*小专题天下国家课件新人教版
  • 【漂亮】2019年秋小学一年级家长会班主任发言稿-m
  • 关于在Visual Studio中无法使用中文输入法的问题
  • 完美版-毕业设计ppt设计思路.pptx
  • 新人教版三年级上册数学《数学广角集合》教学设计板书设计教案-2019年学习文档
  • 公司设计部岗位设置、职务说明范文
  • 【高考语文作文指导】答案要全—规范解答主观题需强化的5种意识
  • 2019-2020年高考物理大一轮复*第4章曲线运动万有引力与航天第4节万有引力与航天课件
  • 学校工作年终述职报告精选5篇
  • 澳门必去景点导游词
  • 工业机器人实训考试试题2 - 含参考程序
  • 摩羯座男配摩羯座女适不适合
  • 现场班组长的一天
  • 网络连接734是什么问题
  • 【感谢信】给朋友的感谢信3篇
  • 北师大版语文一年级下册10.2《美丽的彩虹》ppt课件(精品干货)
  • 新课程下教师如何进行听评课
  • 山东省临沂市2014-2015学年高一上学期期期末统考语文试题
  • 【全优课堂】2014年秋高中数学 2.2.1-2*面与*面*行的判定课件 新人教A版必修2
  • 【课后练*】2020人教版小学数学二年级上册:第10课时 练*课 教案
  • 双价抗虫棉“国欣棉3号”
  • 电脑版