点云滤波--一种点云异常值检测和稳健法线估计方法

文章目录

    • 1写在前面的话
    • 2outlier检测算法
      • 2.1获取最大集合(Getting the maximum consistent set)
      • 2.2异常值检测
      • 2.3估计法线和曲率
    • 3实验结果
      • 3.1模拟数据
      • 3.2真实数据
      • 3.3 自己实测结果:

1写在前面的话

论文针对激光点云提出了一种基于平面拟合的去噪算法,该去噪算法寻找邻域内最佳拟合的平面的点云,在此基础上提出了两个去噪算法:一种是基于稳健的z - score,另一种使用马氏类型的稳健距离,并在去噪的基础上提出了法线估计。结果表明:能很好地去除规则物体表面的噪点,并且相对于其他稳健性法线估计算法,文中的法线估计方法更加快,效果更好。
文中算法对于非规则物体,或者远距离噪点效果不好(因为此时并不能取得一个理想的平面)。作者后续的文章也针对这种情况提出了一种与密度相结合的方法,见《AN UNSUPERVISED OUTLIER DETECTION METHOD FOR 3D POINT CLOUD DATA》

2outlier检测算法

本部分提出了点云数据中的离群点检测和鲁棒显著性特征估计两种算法。算法执行如下图所示的4个顺序任务(图1 )。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们遵循诊断统计的基本思想,即从识别异常值开始,去除它们,然后以经典的方式拟合剩余的数据[19]。因此,在局部邻域中发现离群点后,我们使用经典的PCA将无异常值的数据拟合平面,并使用最佳拟合平面参数和估计的特征值来估计局部显著性,即法向和曲率。算法有两个目的:( i )点云数据中的离群点检测;( ii )鲁棒的显著性特征估计。
本文提出的两种稳健离群点检测方法分别采用稳健z - score和稳健马氏距离( RMD )。为了识别离群点,该算法将点到平面的正交距离( Orthogonal Distance,OD )和沿法线方向的表面点变化量λ0的思想结合起来。只有局部邻域中最可靠、同一性质且具有最小排序正交距离的大多数近邻点的子集(一个大小为h的子集)被用于拟合平面,并计算各自的λ0值。基于多数形似性质点进行决策是稳健统计中的一个基本思想。h是是一个阈值,一般设置为0.5k。
虽然知道h的大小,但不确定h子集具体对应的点,因此,从h0=3,开始随机选择点,根据蒙特卡洛思想,进行
I t = log ⁡ ( 1 − P r ) log ⁡ ( 1 − ( 1 − ϵ ) h 0 ) (1) I_t=\frac{\log \left(1-P_r\right)}{\log \left(1-(1-\epsilon)^{h_0}\right)}\tag{1} It=log(1(1ϵ)h0)log(1Pr)(1)
次迭代,就可以找到h子集对应的点。如果我们设定Pr为期望的概率,本文中设为0.9999. ϵ \epsilon ϵ为异常值概率,根据经验设为0.5.
合理的假设是,在所有的h子集中,沿最小λ0值的平面也具有最大的表面一致性,即沿法线方向的变化最小。理论上,在λ0处达到最大一致性.通过这种方式,我们从具有最小OD的点到拟合平面的最大表面点一致性.我们称之为基于最小距离的最大一致性方法( MCMD:Maximum Consistency with Minimum Distance )。鲁棒的离群点检测和显著性特征估计算法可以概括和整理为以下三个部分。

2.1获取最大集合(Getting the maximum consistent set)

所提出的异常值检测算法受到统计学中鲁棒异常值检测概念的启发:通过搜索大多数数据拟合的模型来检测异常值[15,19]。我们的算法中使用的多数点的子集包括最一致的点。彼此。最大一致集(MCS)可以通过算法1中的以下步骤实现:
在这里插入图片描述

2.2异常值检测

z分数:
z i = ∣ p i − p ˉ ∣ StD ⁡ ( p ) , i = 1 , … , k (2) z_i=\frac{\left|p_i-\bar{p}\right|}{\operatorname{StD}(p)}, \quad i=1, \ldots, k\tag{2} zi=StD(p)pipˉ,i=1,,k(2)
Median Absolute Deviation (MAD):
MAD ⁡ = α.median ⁡ i ∣ p i − median ⁡ j ( p j ) ∣ (3) \operatorname{MAD}=\underset{i}{\operatorname{\alpha.median}}\left|p_i-\underset{j}{\operatorname{median}}\left(p_j\right)\right|\tag{3} MAD=iα.median pijmedian(pj) (3)
α \alpha α=1.4826
综合二者性质,提出稳健性的z分数做为检测异常值的一种方法:
R z i = ∣ p i − median ⁡ j ( p j ) ∣ MAD ⁡ ( p ) , i = 1 , … , k (4) Rz_i=\frac{\left|p_i-\underset{j}{\operatorname{median}}\left(p_j\right)\right|}{\operatorname{MAD}(p)}, \quad i=1, \ldots, k\tag{4} Rzi=MAD(p) pijmedian(pj) ,i=1,,k(4)
根据文献15,认为 R z Rz Rz大于2.5为异常值。
此外:马氏距离也是一种检测异常值较为可行的方法:
M D i = ( p i − p ˉ ) T Σ − 1 ( p i − p ˉ ) , i = 1 , … , k (5) \mathrm{MD}_i=\sqrt{\left(p_i-\bar{p}\right)^T \Sigma^{-1}\left(p_i-\bar{p}\right)}, \quad i=1, \ldots, k\tag{5} MDi=(pipˉ)TΣ1(pipˉ) ,i=1,,k(5)
根据卡方检验,认为 M D i \mathrm{MD}_i MDi大于3.075为异常值。
所提出的算法以两种方式识别 pi 局部邻域中的异常值:(i) 使用 Rz 分数,以及 (ii) 使用稳健马氏距离 (RMD)。这些方法分别称为 MCMD_Z 和 MCMD_MD。算法 2 和 3 总结了两种异常值检测方法:
在这里插入图片描述

在这里插入图片描述

2.3估计法线和曲率

在这里插入图片描述

3实验结果

3.1模拟数据

平面法线估计的稳健性比较:
在这里插入图片描述

平面法线估计速度:
在这里插入图片描述

3.2真实数据

去噪结果
在这里插入图片描述

法线拟合结果

在这里插入图片描述

3.3 自己实测结果:

效果还是不错的。
代码我后续可能会放到GitHub上。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
《Outlier detection and robust normal-curvature estimation in mobile laser scanning 3D point cloud data》

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟DOM与diff算法

虚拟DOM与diff算法 snabbdom虚拟DOMdiff算法 snabbdom 是什么:snabbdom是著名的虚拟DOM库,是diff算法的鼻祖,Vue源码借鉴了snabbdom 虚拟DOM 是什么:本质上是存在内存里的 JavaScript 对象 作用:用来描述真实DOM的层…

科技云报道:分布式存储红海中,看天翼云HBlock如何突围?

科技云报道原创。 过去十年,随着技术的颠覆性创新和新应用场景的大量涌现,企业IT架构出现了稳态和敏态的混合化趋势。 在持续产生海量数据的同时,这些新应用、新场景在基础设施层也普遍基于敏态的分布式架构构建,从而对存储技术…

【MySQL】 MySQL的增删改查(进阶)--壹

文章目录 🛫数据库约束🌴约束类型🎋NOT NULL约束🎍UNIQUE:唯一约束🌳DEFAULT:默认值约束🎄PRIMARY KEY:主键约束🍀FOREIGN KEY:外键约束&#x1f…

Redis之list类型

文章目录 Redis之list类型1. 列表添加/弹出元素2. 查看列表3. 获取列表中元素的个数4. 删除列表中指定的值5. 获取/指定元素的值6. 向列表中插入元素7. 删除指定索引范围之外的所有元素8. 将元素从一个列表转移到另一个列表9. 应用场景9.1 队列9.2 类似微信上订阅公众号&#x…

【C++】unordered_map与unorder_set的封装(哈希桶)

文章目录 前言一、模板参数的改造二、模板的特例化操作三、仿函数的妙用四、unordered迭代器基本操作1.const迭代器注意:2.HashTable与HTIterator的冲突 五、迭代器的构造问题六、完整代码1.hash_bucket.h2.unordered_set.h3.unordered_map.h 前言 我们开辟一个指针…

Docker网络问题:容器无法访问外部网络

Docker网络问题:容器无法访问外部网络 😟 Docker网络问题:容器无法访问外部网络 😟摘要 🤔引言 🌐正文 🤓为什么容器无法访问外部网络? 😕1. 网络配置错误2. 防火墙设置3…

二分类问题的解决利器:逻辑回归算法详解(一)

文章目录 🍋引言🍋逻辑回归的原理🍋逻辑回归的应用场景🍋逻辑回归的实现 🍋引言 逻辑回归是机器学习领域中一种重要的分类算法,它常用于解决二分类问题。无论是垃圾邮件过滤、疾病诊断还是客户流失预测&…

中级职称评审论文重要吗?是不是必须要论文呢?

现在评中级职称职称对论文有什么要求?没有论文可以参与职称评审吗? 建筑中级职称怎么评?那自然是从多方面来考核人才是否具备了评中级工程师的能力,职称论文就是考核的标准之一。 甘建二告诉你,现在评职称论文是很重…

新增MariaDB数据库管理、支持多版本MySQL数据库共存,1Panel开源面板v1.6.0发布

2023年9月18日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.6.0版本。 在这个版本中,1Panel新增MariaDB数据库管理;支持多版本MySQL数据库共存;支持定时备份系统快照和应用商店中已安装应用;支持为防火墙…

优维低代码实践:图片和搜索

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…

字符串函数----篇章(1)

目录 补上章缺失的两道题 七.笔试题(7) 八.笔试题(8) 一.字符串函数 ( 1 )----strlen函数 二.字符串函数 ( 2 )----strcpy函数 2-1模拟实现strcpy 三.字符串函数 ( 3 )----strcmp函数 ​编辑 3-1模拟实现strcmp 四.字符串函…

phpstudy脚本编写 和sql注入编写

1.phpstudy编写 2.sql注入编写

C++之template可变模板参数应用总结(二百二十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

自动化测试:yaml结合ddt实现数据驱动!

在pythonunittestseleniumddt的框架中,数据驱动常见有以下几种方式实现: Csv/txtExcelYAML 本文主要给大家介绍测试数据存储在YAML文件中的使用场景。首先先来简单介绍一下YAML。 1. 什么是YAML 一种标记语言类似YAML,它实质上是一种通用…

vue若依前端项目搭建

1.项目搭建 首先进入到你需要创建的项目目录下面,然后输入命令vue create .创建项目 接下来选择手动搭建,然后把下面图片中的内容选上 再然后继续配置一些参数信息 接下来运行npm run serve项目就启动起来了 2.配置登录界面文件 首先修改src/router…

跟着官方学jnindk

安装及配置 NDK 和 CMake 如需为您的应用编译和调试原生代码,您需要以下组件: 1.Android 原生开发套件 (NDK):这是一套可让您在 Android 应用中使用 C 和 C 代码的工具。 2.CMake:这是一款外部构建工具,可与…

C++之浅拷贝、深拷贝、拷贝构造函数、拷贝赋值运算符、自定义的深拷贝函数应用总结(二百二十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

四、数学建模之图与网络模型

1.定义 2.例题及软件代码求解 一、定义 1.图和网络是相关概念 (1)图(Graph):图是数学和计算机科学中的一个抽象概念,它由一组节点(顶点)和连接这些节点的边组成。图可以是有向的&…

vector使用和模拟实现

💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 C👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大…

wx.getPrivacySetting 小程序隐私保护指引的使用(复制粘贴即用)

创建privacyPopup 组件 privacyPopup.js Component({properties: {},data: {wxPrivacyName: ,showAgreement: false},lifetimes: {attached() {this.init();}},methods: {async init() {if (isLogin()) {const userPrivacy await this.getPrivacy();this.setData({wxPrivacy…