点云滤波处理方式_点云滤波 numpy_春末的南方城市的博客-程序员宅基地

技术标签: 三维重建  

转载大神的博客,写的很好,之后会用过算法来验证各个滤波器的实现,并补充,欢迎做三维重建的朋友一起学习交流。

PCL—低层次视觉—点云滤波(初步处理)

点云滤波的概念

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

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

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

点云滤波的方法

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

  1. 如果使用线结构光扫描的方式采集点云,必然物体沿z向分布较广,但x,y向的分布处于有限范围内。此时可使用直通滤波器,确定点云在x或y方向上的范围,可较快剪除离群点,达到第一步粗处理的目的。
  2. 如果使用高分辨率相机等设备对点云进行采集,往往点云会较为密集。过多的点云数量会对后续分割工作带来困难。体素格滤波器可以达到向下采样同时不破坏点云本身几何结构的功能。点云几何结构不仅是宏观的几何外形,也包括其微观的排列方式,比如横向相似的尺寸,纵向相同的距离。随机下采样虽然效率比体素滤波器高,但会破坏点云微观结构。
  3. 统计滤波器用于去除明显离群点(离群点往往由测量噪声引入)。其特征是在空间中分布稀疏,可以理解为:每个点都表达一定信息量,某个区域点越密集则可能信息量越大。噪声信息属于无用信息,信息量较小。所以离群点表达的信息可以忽略不计。考虑到离群点的特征,则可以定义某处点云小于某个密度,既点云无效。计算每个点到其最近的k个点平均距离。则点云中所有点的距离应构成高斯分布。给定均值与方差,可剔除3∑之外的点。
  4. 半径滤波器与统计滤波器相比更加简单粗暴。以某点为中心画一个圆计算落在该圆中点的数量,当数量大于给定值时,则保留该点,数量小于给定值则剔除该点。此算法运行速度快,依序迭代留下的点一定是最密集的,但是圆的半径和圆内点的数目都需要人工指定。

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

 

点云库对滤波算法的实现

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

  直通滤波器:

?
1
2
3
4
5
6
7
// Create the filtering object
pcl::PassThrough<pcl::PointXYZ> pass;
pass.setInputCloud (cloud);
pass.setFilterFieldName ( "z" );
pass.setFilterLimits (0.0, 1.0);
//pass.setFilterLimitsNegative (true);
pass.filter (*cloud_filtered);

  体素滤波器:

  // Create the filtering object
  pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
  sor.setInputCloud (cloud);
  sor.setLeafSize (0.01f, 0.01f, 0.01f);
  sor.filter (*cloud_filtered);

  统计滤波器:

复制代码
  // Create the filtering object
  pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
  sor.setInputCloud (cloud);
  sor.setMeanK (50);
  sor.setStddevMulThresh (1.0);
  sor.filter (*cloud_filtered);
复制代码

  半径滤波器:

复制代码
    // build the filter
    pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;
    outrem.setInputCloud(cloud);
    outrem.setRadiusSearch(0.8);
    outrem.setMinNeighborsInRadius (2);
    // apply filter
    outrem.filter (*cloud_filtered);
复制代码

  显然,不同的滤波器在滤波过程中,总是先创建一个对象,再设置对象参数,最后调用滤波函数对点云进行处理(点云为智能指针指向的一块区域)

       

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xs1997/article/details/78191293

智能推荐

最近有哪些最受程序员欢迎的技术书?_最好的讲信息产业发展的书_人邮异步社区的博客-程序员宅基地

小编刚刚看了一下最近的技术书,发现有这样几本最受程序员欢迎,共享出来,供你们参考。1、浪潮之巅 第四版 豆瓣评分:9.6全球科技通史作者吴军博士作品 深度剖析信息产业 掌握下一个黄金十年 李开复作序推荐 来自谷歌的方法论 智能时代的行动指南《浪潮之巅》首版自出版以来,在业界获得了巨大反响。信息产业发展瞬息万变,在《浪潮之巅》首版上市的八年后, IT 行业也发生了很大的..._最好的讲信息产业发展的书

Matlab图像处理系列2———空间域平滑滤波器_weixin_30622181的博客-程序员宅基地

注:本系列来自于图像处理课程实验,用Matlab实现最主要的图像处理算法本文章是Matlab图像处理系列的第二篇文章。介绍了空间域图像处理最主要的概念————模版和滤波器,给出了均值滤波起和中值滤波器的Matlab实现。最后简要讨论去躁效果。1.空间域增强(1)模版运算图像处理中。模版能够看作是n*n(n通常是奇数)的窗体。模版连续地运动于整个图像中,对..._matlab 空间域平滑处理代码

yocs_velocity_smoother源码编译_ecl_threads-程序员宅基地

前言:最近ROS开发环境转到ubuntu18(melodic)上后发现原来的有些默认安装的包没了。需要手动安装。源代码地址:https://github.com/yujinrobot/yujin_ocs.git一、编译cd */yujin_ocs/yocs_velocity_smoother/mkdir buildcd buildcmake ..make如果缺少依赖,使用sudo apt-get install 安装即可。我安装时缺少ecl-threads.sudo apt._ecl_threads

Mongo3.4 Storage Engines存储引擎(内存存储引擎)_mongo storageengine_OceanSky6的博客-程序员宅基地

从MongodDB3.2.6版本开始,内存存储引擎是64位版本的的一部分,除了一些元数据和一些诊断数据之外,内存存储引擎不维护硬盘上的任何数据,包括配置数据、索引、用户认证。通过避免数据库的I/O,内存存储引擎可以避免更多数据库延迟。指定内存存储引擎mongod --storageEngine inMemory --dbpath 使用配置文件指定内存存储引擎及保_mongo storageengine

欧几里得算法证明_Novice Player的博客-程序员宅基地

欧几里得算法,也叫做辗转相除法,gcd(a, b) = gcd (b, a%b),即a和b最大公约数等于b和a%b的最大公约数。相信大家都会用,但是很多人不知道为什么,我也看了很多文章,写的都不太相同,这里我说说我自己的证明过程: 这里的证明我分为两步求证: 1.求证:a和b的公约数等于b和a%b的公约数; 2.求证:b和a%b的公约..._欧几里得算法证明

JDBC访问数据库之代码生成器Raptor-v0.1_lovefan的博客-程序员宅基地

JDBC访问数据库之代码生成器Raptor-v0.1 胡磊2005年7月22日 前言: 自从JDBC问世以来,人们在开发基于Java的B/S结构的软件的时候,在如何通过JDBC来访问数据库这个方面作了不少的工作。从最开始直接通过java.sql包中的各个对象直接执行SQL语句,到现在O/R Mapping工具的广泛使用,无不体现着人类思想的结晶。

随便推点

使用fbo离屏渲染绘制图片_gl_color_attachment0_ext_颇锐克的博客-程序员宅基地

【原文:http://m.blog.csdn.net/blog/zhouschina/8985593】[cpp] view plain copy #include #include #include #include #pragma comment(lib, "glew32.lib") GLuint imageFBO; GLuint im_gl_color_attachment0_ext

SpringMVC首页的小技巧_wang0112233的博客-程序员宅基地

一般情况下我们是可以直接在web.xml文件中设置默认jsp页面 /WEB-INF/views/index/index.jsp 第二种我们在controller中设置@Controllerpublic class IndexController {@RequestMapping("/")public String index(){return "

TI RTOS BLE CC2642 看门狗 Watcdog_Over-Lord的博客-程序员宅基地

目录环境1. 添加 Watchdog 插件2. 代码环境系统:Windows 10SDK:simplelink_cc13x2_26x2_sdk_4_30_00_54IDE:Code Composer Studio, Version: 10.1.1.00004例程:simple_peripheral_oad_offchip_CC26X2R1_LAUNCHXL_tirtos_ccs (已删除不必要的代码,请看:删除simple_peripheral_oad_offchip工程多余的代码)1.

Oracle 层级查询详解(connect by )_鱼丸丶粗面的博客-程序员宅基地

文章目录1 概述2 语法3 示例3.1 查询机构信息3.2 拆分字符串4 常见报错4.1 CONNECT BY loop in user data4.2 子查询返回多行1 概述1. 主要作用 (1) 简单树查询(递归查询),如:'查询机构信息' (2) 拆分字符串 2. 2 语法select *, level from <table_name> where ... -- 可选条件: 过滤条件 start with ... -- 可选

IntelliJ IDEA: Error:(11, 72) java: 程序包com.mysql.jdbc不存在_上进求知,认真思辨的博客-程序员宅基地

IntelliJ IDEA: Error:(11, 72) java: 程序包com.mysql.jdbc不存在解决方法是可以在 [http://www.mysql.com/downloads/connector/j](http://www.mysql.com/downloads/connector/j) 手动下载Java连接MySQL的最新驱动包,通过intellij idea导入即可。Fi...

关于超链接传多个参数其中URL 中的带 {xxx}的问题,_冰淇淋@的博客-程序员宅基地

window.location.href=basePath+"/weixin/car/paysuccess/"+wid+"?returnMSG="+returnMSG;@RequestMapping(value = { "/paysuccess/{wid}" }, method = { RequestMethod.GET }) public String paysuccess(..._超链接传多个参数

推荐文章

热门文章

相关标签