[概述] 点云滤波器

news2024/11/27 20:26:51

拓扑结构

点云是一种三维数据,有几种方法可以描述其空间结构,以利于展开搜索

https://blog.csdn.net/weixin_45824067/article/details/131317939

        KD树

         头文件:pcl/kdtree/kdtree_flann.h

         函数:pcl::KdTreeFLANN

         作用:

                用于范围搜索:比如搜索给定点指定半径内存在的点

                用于最近邻居搜索:比如搜索距离指定点最近的点

                用于支持其他高级操作

        八叉树

         头文件:pcl/octree/octree_search.h

          函数:pcl::octree::OctreePointCloudSearch

         作用:

                用于空间搜索:与前面类似,搜索指定点附近的点,或以体素为单位搜索,直接返回指定点锁所在的体素,或直接搜索返回K个邻近点,或搜索指定半径内的邻近点

                体素化:通过八叉树将点云数据分割为一系列体素(立方体)。每个体素代表一个固定大小的区域,并包含在该区域内的点云数据。如此,可以估计点云密度,表面重建等,支持更高级的点云处理任务

滤波器

https://blog.csdn.net/weixin_45824067/article/details/131334072

点云传统滤波算法_点云高斯滤波_Man_1man的博客-CSDN博客

上面两个链接都有代码

分割功能滤波       

分割功能滤波是一种常用的点云处理方法,可以将点云数据分割为不同的部分,以便对每个部分进行独立处理。

 直通滤波

         头文件:pcl/filters/passthrough.h

         函数:pcl::PassThrough

         介绍:直通滤波是一种基于范围过滤的方法,用于通过限制某个维度的范围来滤除点云数据中不需要的部分

        作用:用于去除在指定范围之外的离群点、空间限定区域或多余的数据。直通滤波通常在建立好KD树之后进行,以提高滤波的效率。

 条件滤波

          头文件:pcl/filters/conditional_removal.h

          函数:pcl::ConditionalRemoval

          介绍:条件滤波(Conditional Filter)是一种基于条件的点云滤波方法,可以根据给定的条件筛选出满足条件的点云数据,从而去除不需要的点云数据,有点分段函数的味道,当点云在一定范围则留下,不在则舍弃。直通滤波器是一种较简单的条件滤波器,其更像是一个不带有滤波核的工具。

红色区域为过滤后被保留下的点云,绿色为被过滤掉的点云

         提取索引滤波

          头文件:pcl/filters/extract_indices.h

          函数:pcl::ExtractIndices

          介绍:提取索引滤波(Extract Indices Filter)是一种常用的点云滤波方法,其主要目的是提取指定索引范围内的点云数据,以去除不需要的点云数据。

下采样类滤波

        体素网格下采样

         头文件:pcl/filters/voxel_grid.h

         函数:pcl::VoxelGrid

         介绍:体素滤波根据给定的点云构造一个三维体素栅格并进行下采样达到滤波的效果。通过输入的点云数据创建一个三维体素栅格,然后将每个体素内所有的点都用该体素内的代表点(重心)来近似,这样就大大减少了数据量。体素滤波器可以达到向下采样同时不破坏点云本身几何结构的功能,但是会移动点的位置。此外体素滤波器可以去除一定程度的噪音点及离群点。

        特点:体素滤波根据给定的点云构造一个三维体素栅格并进行下采样达到滤波的效果。通过输入的点云数据创建一个三维体素栅格
,然后将每个体素内所有的点都用该体素内的代表点(重心)来近似,这样就大大减少了数据量。体素滤波器可以达到向下采样同时不破坏点云本身几何结构的功能,但是会移动点的位置。此外体素滤波器可以去除一定程度的噪音点及离群点。
 

左:原数据  右:体素下采样结果

         均匀采样滤波       

         头文件:pcl/filters/uniform_sampling.h

         函数:pcl::UniformSampling

         介绍:均匀采样滤波基本上等同于体素滤波器,但是其不改变点的位置。下采样后,其点云分布基本均匀,但是其点云的准确度要好于体素滤波,因为没有移动点的位置

去除噪声点类滤波

         统计学离群点移除过滤器

         头文件:pcl/filters/statistical_outlier_removal.h

         函数:pcl::StatisticalOutlierRemoval

         介绍:用于去除明显离群点。离群点特征是在空间中分布稀疏。激光扫描通常会生成不同点密度的点云数据集,测量误差也会导致稀疏的异常值/离群点。考虑到离群点的特征,则可以定义某处点云小于某个密度,既点云无效。

         具体步骤:对于每个点,计算从它到其最近的k个点平均距离。通过假设点云中其点的距离结果分布是具有均值和标准差的高斯分布,根据给定均值与方差,平均距离在标准范围之外的点,可以被定义为离群点并从数据中去除。

         特点:主要是根据密度去除离群点(去噪),对密度差异较大的离群点效果较好。

     半径离群值滤波

           头文件:pcl/filters/radius_outlier_removal.h

           函数:pcl::RadiusOutlierRemoval

           介绍:半径滤波(Radius Outlier Removal Filter)半径滤波通过计算每个点与周围点的距离,判断该点是否为离群点,并将其从点云数据中去除。

          步骤:以某点为中心画一个圆计算落在该圆中点的数量,当数量大于给定值时,则保留该点,数量小于给定值则剔除该点。

          特点:半径滤波器与统计滤波器相比更加简单粗暴。此算法运行速度快,依序迭代留下的点一定是最密集的,但是圆的半径和圆内点的数目都需要人工指定。

红色区域为过滤后被保留下的点云,绿色为被过滤掉的点云

         高斯滤波

        

          头文件:pcl/filters/convolution.h  pcl/filters/convolution_3d.h   

          函数:pcl::filters::GaussianKernel 或pcl::GaussianFilter类  pcl::filters::Convolution3D

          介绍:高斯滤波(Gaussian Filter)其主要目的是平滑点云数据以去除噪声。高斯滤波器的基本思想是将每个点周围的点用高斯函数进行加权平均,从而达到平滑点云数据的效果。其李永乐高斯函数经傅里叶变换后仍具有高斯函数的特性,令指定区域的权重为高斯分布,从而将高频的噪声点滤除。在点云处理中,高斯滤波通常被用于去除高频噪声。

         特点:高斯滤波平滑效果较好,但是边缘角点也会被较大的平滑。


         双边滤波

         头文件:pcl/filters/bilateral.h

         函数:pcl::BilateralFilter

         介绍:其主要目的是平滑点云数据以去除噪声,同时保留点云数据的边缘和细节信息。双边滤波器的基本思想是将每个点周围的点用高斯函数和距离函数进行加权平均,从而达到平滑点云数据的效果。双边滤波既可以平滑点云数据,又可以保留边缘和细节信息,因此在点云处理中应用广泛。此外,去噪效果效果需要根据实际点云情况,不是所有需要平滑和保留边缘的情况使用;有两个参数需要调整,需要多次实验。
 

         特点:双边滤波是结合图像的空间[像素范围域(range domain)]邻近度和像素值相似度的一种折中处理,同时考虑空域[空间域(spatial domain)]信息和灰度相似性,达到保边去噪(既有效地对空间三维模型表面进行降噪,又可以保持点云数据中的几何特征信息,避免三维点云数据被过渡光滑)的目的。对点云数据的小尺度起伏噪声进行平滑光顺。

        注意:能使用双边滤波的点云必须得包含强度字段。现有的points类型中,只有PointXYZI和PointXYZINormal有强度信息。FastBilateralFilter只适用于有序点云。

BF为双边滤波,MED为中值滤波,AVE为均值滤波

        

         随机采样一致滤波

           头文件:pcl/sample_consensus/ransac.h   

                          pcl/sample_consensus/sac_model_plane.h

                          pcl/sample_consensus/sac_model_sphere.h

           函数:pcl::RandomSampleConsensus

           介绍:随机采样一致滤波(Random Sample Consensus Filter,RANSAC Filter)其主要目的是去除点云数据中的离群点(outliers)。随机采样一致滤波器的基本思想是随机选择一组点作为模型,计算其他点到该模型的距离,从而找到最佳的模型,并将该模型上的点作为局内点(inliers),将其他点作为离群点(outliers)进行删除。随机采样一致滤波既可以去除离群点,又可以保留点云数据的形状和结构信息,因此在点云处理中应用广泛。

           特点:主要用于排除错误样本,可以从一组包含“局外点”的观测数据中,通过迭代的方式估计数学模型参数。

声明:本文总结于上列参考文章,系学习所用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1168948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

压缩软件 7-Zip VS WinZips?

7-zip在联想应用商店给强烈推荐? 要说它好用还行,但每次压缩都显示网络连接失败等异常广告信息。 相反好用的7-ZIP必须鼠标点击右键点击更多才能够看到,这次更新体验也太差了吧? 用户放在第一位? 要不是更新后一直推…

编译原理学习:随机生成算术表达式

最近用Python写了一个随机向右生成数学表达式的算法。如下图所示,点一下运行就能随机生成一个二叉树形式的算术表达式。这个树形图是用“graphviz”画的,完全是它自动布局画出来的,画的还挺不错的。代码在:becomequantum (becomeq…

Ubuntu 系统内核 kernel panic

Ubuntu 系统内核 kernel panic 不能进入系统:报错end kernel panic -not syncing: attemped to kill init! exit code 0x00000100 系统启动的时候,按下‘e’键进入grub编辑界面,编辑grub菜单,选择“kernel /vmlinuz-XXXXro root…

【LeetCode:117. 填充每个节点的下一个右侧节点指针 II | DFS | BFS】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【强化学习】15 —— TRPO(Trust Region Policy Optimization)

文章目录 前言TRPO特点策略梯度的优化目标使用重要性采样忽略状态分布的差异约束策略的变化近似求解线性搜索算法伪代码广义优势估计代码实践离散动作空间连续动作空间 参考 前言 之前介绍的基于策略的方法包括策略梯度算法和 Actor-Critic 算法。这些方法虽然简单、直观&…

银行和金融企业为何青睐这8款项目管理工具

银行、金融行业中主流的8款项目管理系统:1.PingCode;2.Worktile;3.Microsoft Project;4.Jira by Atlassian;5.Asana;6.Trello;7.Wrike;8.Teambition。 银行和金融性质的公司在项目管…

【C++】多态 ⑪ ( 纯虚函数和抽象类 | 纯虚函数语法 | 抽象类和实现 | 代码示例 )

文章目录 一、纯虚函数和抽象类1、纯虚函数2、纯虚函数语法3、抽象类和实现 二、完整代码示例 一、纯虚函数和抽象类 1、纯虚函数 纯虚函数 : 在 C 语言中 , " 纯虚函数 " 是 特殊类型的 虚函数 , " 纯虚函数 " 在 父类 中 声明 , 但是没有实现 ; 抽象类 …

计算虚拟化2——内存虚拟化

目录 物理机内存访问过程 虚拟地址VA和物理地址PA概念 MUU实现VA到PA所使用的映射表 内存虚拟化类型 内存软件辅助虚拟化 内存硬件辅助虚拟化 内存虚拟化-内存超分配 内存共享 内存置换 内存气泡 物理机内存访问过程 内存的基本知识 内存都是从物理地址0开始的&…

基于LDA主题+协同过滤+矩阵分解算法的智能电影推荐系统——机器学习算法应用(含python、JavaScript工程源码)+MovieLens数据集(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据爬取及处理 相关其它博客工程源代码下载其它资料下载 前言 前段时间,博主分享过关于一篇使用协同过滤算法进行智能电影推荐系统的博文《基于TensorFlowCNN协同过滤算法的智能电影推荐系统——深…

文献查询辅助工具,查看文献影响因子期刊,显示文献排名,翻译文献

插件工具:easyScholar 适配浏览器(Edge、chrome、Firefox),本文以Edge为例: 1.打开Edge浏览器,输入: edge://extensions/ 2.点击获取Microsoft Edge扩展 3.搜索 easyscholar,然后…

Hive【Hive(八)自定义函数】

自定义函数用的最多的是单行函数&#xff0c;所以这里只介绍自定义单行函数。 Coding 导入依赖 <dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>3.1.3</version></dependency>…

路由器基础(十):防火墙配置

一、防火墙默认的区域 防火墙是基于安全区域进行工作的安全设备。 一个安全区域是若干接口所连网络的集合&#xff0c;这些网络中的用户具有相同的安全属性。 通常防火墙认为在同一安全区域内部发生的数据流动是不存在安全风险的&#xff0c;不需要实施任何安全策略。只有当不同…

代码随想录Day36 动态规划05 LeetCode T1049最后一块石头的重量II T494 目标和 T474 一和零

前言 : 动规五部曲 理论基础 : 代码随想录Day34 LeetCode T343整数拆分 T96 不同的二叉搜索树-CSDN博客 1.明白dp数组的含义 2.明白递推公式的含义 3.初始化dp数组 4.注意dp数组的遍历顺序 5.打印dp数组排错 LeetCode T1049 最后一块石头的重量II 题目链接:1049. 最后一块石头…

LeetCode:117. 填充每个节点的下一个右侧节点指针 II(C++)

117. 填充每个节点的下一个右侧节点指针 II 题目描述&#xff1a; 给定一个二叉树&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将…

Promise的并发控制 - 从普通并发池到动态并发池

一、场景 给你一个有200个URL的数组&#xff0c;通过这些URL来发送请求&#xff0c;要求并发请求数不能超过五个。 这是一道很常考的面试题&#xff0c;接下来让我们来学习一下Promise并发控制 二、普通并发池的实现 主要思路就是&#xff0c;判断当前队列是否满&#xff0c;…

【IDEA】在工具栏设置快速创建包和类的图表

页面效果&#xff1a; 操作步骤&#xff1a; 设置 --> 外观与行为 --> 菜单与工具栏 --> 点击 主工具栏 --> 点击 ---- --> 点击 号 --> 添加操作 主菜单 --> 文件 --> 文件打开操作 --> 打开项目操作 --> 新建 --> 往下找 找到 clas…

单行自动横向滚动——css实现

效果 封装组件 <template><div ref"container" class"scroll-area"><divref"content":class"[isScroll ? scroll : no-scroll]":style"{ color: fontColor }">{{ content }}</div></div> &…

c++值deque容器

1.deque容器介绍 deque 是 double-ended queue 的缩写&#xff0c;又称双端队列容器。deque容器支持从头部和尾部双端插入、删除数据。与vector容器不同的是&#xff0c;vector容器是一段连续的空间&#xff0c;而deque没有所谓容量的概念&#xff0c;因为它是动态的以分段连续…

Spring Boot 常见面试题

目录 1.Spring Boot 快速入门什么是 Spring Boot&#xff1f;有什么优点&#xff1f;Spring Boot 与 Spring MVC 有什么区别&#xff1f;Spring 与 Spring Boot 有什么关系&#xff1f;✨什么是 Spring Boot Starters?Spring Boot 支持哪些内嵌 Servlet 容器&#xff1f;如何设…

掌握RESTful API:规范与设计详解

前言 RAML (RESTful API Modeling Language) 和 OAS (OpenAPI Specification) 都是用于描述和定义 RESTful API 的规范。它们分别提供了不同的功能和优势。 RAML&#xff08;RESTful API Modeling Language&#xff09;&#xff1a; RAML简介 RAML&#xff08;RESTful API M…