基于Open3D的点云处理6-点云去噪

news2025/1/11 19:54:11

当我们从扫描设备获取点云数据时,数据会包含噪声和伪影,点云噪声特性包括不真实的点、孤立点、不规则,基于噪声特性对器进行去除;

统计滤波 Statistical Outlier Removal(SOR)(去除离群点)

  • 滤波思想
    对每一个点的邻域进行一个统计分析,计算它到所有临近点的平均距离。假设得到的结果是一个高斯分布,其形状是由均值和标准差决定,那么平均距离在标准范围(由全局距离平均值和方差定义)之外的点,可以被定义为离群点并从数据中去除。

  • 接口函数

remove_statistical_outlier(self, nb_neighbors, std_ratio, print_progress=False)

在这里插入图片描述
当判断点与nb_neighbors个近邻点的平均距离大于【平均距离+std_ratio*σ】,即判定为噪声点,一般取std_ratio=2或3为极限误差;

  • 测试
import open3d as o3d
# 加载点云
pcd = o3d.io.read_point_cloud("./data/desk.pcd")
# 统计滤波
k = 20  # K邻域点的个数
μ = 2.0  # 标准差乘数
sor_pcd, idx = pcd.remove_statistical_outlier(k, μ)#当判断点的k近邻的平均距离大于【平均距离+μ*σ】,即判定为噪声点,一般取μ=2或3为极限误差
sor_pcd.paint_uniform_color([0, 0, 1])
# 提取噪声点云
sor_noise_pcd = pcd.select_by_index(idx, invert=True)
sor_noise_pcd.paint_uniform_color([1, 0, 0])
o3d.visualization.draw_geometries([sor_pcd,sor_noise_pcd], window_name="SOR")

在这里插入图片描述

半径滤波 Radius Outier Removal

  • 滤波思想
    在给定阈值参数MinPts后,遍历点云所有点,对于点云中任意一点,设其半径R内有K个点,当K< MinPts时,即可识别该点为噪声点,并该点去除。

  • 接口函数

remove_radius_outlier(self, nb_points, radius, print_progress=False)

在这里插入图片描述
其中,nb_points:邻域球内的最少点个数,小于该个数为噪声点;
radius:邻域半径大小;
当判断点的nb_points近邻平均距离大于【平均距离+μ*σ】,即判定为噪声点;

  • 测试
import open3d as o3d

# 加载点云
pcd = o3d.io.read_point_cloud("./data/desk.pcd")
# 半径滤波
MinPts = 5  # 邻域球内的最少点个数,小于该个数为噪声点
R = 0.05    # 邻域半径大小

# pc 去噪后的点云
# idx 去噪保留的点索引
pc, idx = pcd.remove_radius_outlier(MinPts, R)

pc.paint_uniform_color([0, 0, 1])
ror_noise_pcd = pcd.select_by_index(idx,invert = True)
ror_noise_pcd.paint_uniform_color([1, 0, 0])
o3d.visualization.draw_geometries([pc, ror_noise_pcd], window_name="半径滤波")

在这里插入图片描述

引导滤波 Guilter Filter

  • 滤波思想
    引导滤波假设点云经过一个线性变换,具有很好的保留边缘信息功能;Guided Filter一般用来对2D图像进行降噪等处理,实际上,稍作修改后可以对3D点云进行降噪。针对点云的Guided Filter算法,可概况为
  1. 计算点云中某一个点pi的领域 N ( i ) N ( i ) N(i)

  2. N ( i ) N ( i ) N(i)中所有点的均值 u i u_i ui 和协方差 Σ i Σ_i Σi

  3. 根据公式计算 A k A_k Ak b k b_k bk
    在这里插入图片描述

  4. q i = A k p i + b k q_i =A_k p_i +b_k qi=Akpi+bk, 输出 q i q_i qi 作为对点 p i p_i pi 的滤波结果;

  • python 源码
  • 测试
import numpy as np
import open3d as o3d

#guild filter
def guided_filter(pcd, radius, epsilon):
    kdtree = o3d.geometry.KDTreeFlann(pcd)
    points_copy = np.array(pcd.points)
    points = np.asarray(pcd.points)
    num_points = len(pcd.points)

    for i in range(num_points):
        k, idx, _ = kdtree.search_radius_vector_3d(pcd.points[i], radius)
        if k < 3:
            continue

        neighbors = points[idx, :]
        mean = np.mean(neighbors, 0)
        cov = np.cov(neighbors.T)
        e = np.linalg.inv(cov + epsilon * np.eye(3))

        A = cov @ e
        b = mean - A @ mean

        points_copy[i] = A @ points[i] + b

    pcd.points = o3d.utility.Vector3dVector(points_copy)


#添加噪声
def add_noise(pcd, sigma):
    points = np.asarray(pcd.points)
    noise = sigma * np.random.randn(points.shape[0], points.shape[1])
    points += noise



pcd = o3d.io.read_point_cloud('./data/bunny.ply')
add_noise(pcd, 0.004)
o3d.visualization.draw_geometries([pcd],window_name="rawPointCloud")
guided_filter(pcd, 0.01, 0.1)
guided_filter(pcd, 0.01, 0.1)
o3d.visualization.draw_geometries([pcd],window_name="guildFilter")


在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【JVM】13. 垃圾回收器

文章目录 13.1. GC分类与性能指标13.1.1. 垃圾回收器概述13.1.2. 垃圾收集器分类13.1.3. 评估GC的性能指标吞吐量暂停时间吞吐量 vs 暂停时间 13.2. 不同的垃圾回收器概述13.2.1. 垃圾回收器发展史13.2.2. 7种经典的垃圾收集器13.2.3. 7款经典收集器与垃圾分代之间的关系13.2.4…

前端自动化测试 —— Jest 测试框架应用

目录​​​​​​​ 什么是自动化测试 为什么要用前端自动化测试 前端自动化分类和思想 单元测试 集成测试 TDD 测试驱动开发&#xff08;Test Driven Development&#xff09; BDD 行为驱动开发&#xff08;Behavior Driven Development&#xff09; 如何自己写非框架…

分布式软件架构——SOA架构/微服务架构/无服务架构

SOA架构 Service-Oriented Architecture&#xff0c;面向服务的架构。面向服务的架构是一次具体地、系统性地成功解决分布式服务主要问题的架构模式。了解SOA架构前&#xff0c;先了解三种比较有代表性的服务拆分的架构模式&#xff0c;这些架构模式是SOA演化过程的中间产物&a…

偷偷曝光下国内这些软件外包公司!(2023 最新版)

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 我新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 根据网上的资料&#xff0c;整理出来的一份国内软件外包公司的名单。 找工作的同学都要看看&#xff0c;根据自身的情况&#…

杰理AC632N实现custom hid

1. 设备描述符修改 设备描述符主要修改的是PID、VID、设备发现版本号以及字符串描述。 static const u8 sDeviceDescriptor[] { //<Device DescriptorUSB_DT_DEVICE_SIZE, // bLength: Size of descriptorUSB_DT_DEVICE, // bDescriptorType: Device #if defi…

langchain简版教程附案例

简介 LangChain是一个开源的应用开发框架。基于该开源框架&#xff0c;我们可以把大模型与各种工具结合从而实现各种功能&#xff0c;比如基本文档的问答&#xff0c;解析网页内容、查询表格数据等。目前支持Python和TypeScript两种编程语言。当前Python框架支持的模型和功能最…

腾讯云服务器ping不通解决方法(公网IP/安全组/系统多维度)

腾讯云服务器ping不通什么原因&#xff1f;ping不通公网IP地址还是域名&#xff1f;新手站长从云服务器公网IP、安全组、Linux系统和Windows操作系统多方面来详细说明腾讯云服务器ping不通的解决方法&#xff1a; 目录 腾讯云服务器ping不通原因分析及解决方法 安全组ICMP协…

智能计价器-第14届蓝桥杯省赛Scratch中级组真题第5题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第140讲。 智能计价器&#xff0c;本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组真题第5题&#…

楼宇租赁管理系统-什么是楼宇租赁系统

楼宇租赁管理系统是一种综合管理平台&#xff0c;它为不同规模楼宇的租赁管理提供了全面的解决方案。楼宇租赁管理系统的主要功能包括租赁管理、财务管理、维修管理、报告管理以及客户服务管理等。让我们逐一介绍每一个功能点。 一、租赁管理 楼宇租赁管理系统通过集成租户信息…

路径规划算法:基于群居蜘蛛优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于群居蜘蛛优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于群居蜘蛛优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

博学谷学习记录】超强总结,用心分享 | 架构师 MySQL调优MVCC学习总结

文章目录 1 概述2 快照读与当前读当前读快照读隔离级别&#xff1a;undo log版本链&#xff1a; 3 Read View3.1 什么是Read View?3.2 实现原理3.3 Read View规则&#xff08;可见性算法&#xff09; 4 MVCC整体流程4.1 可重复读是如何工作的&#xff1f;4.2 读提交是如何工作…

ChatGPT国内镜像,以及如何使用ChatGPT帮你制作PPT

一&#xff1a;前言 ChatGPT&#xff1a;智能AI助你畅聊天地 在现代人日益忙碌的生活中&#xff0c;难免需要一些轻松愉快的聊天来放松身心。而现在&#xff0c;有了 ChatGPT&#xff0c;轻松愉快的聊天变得更加智能、有趣且不受时间、地点限制&#xff01; 什么是 ChatGPT&…

Python中模块的使用方法4

1 模块、包和库的区别 Python中&#xff0c;模块的英文是“module”&#xff0c;是一个以py为后缀名的文件&#xff1b;包的英文是“package”&#xff0c;是一个包含了多个模块的目录&#xff1b;库的英文是“library”&#xff0c;包含了具有相关功能的包和模块。 2 模块的…

ChatGPT 在自动化测试领域的应用,我们真的要被代替了吗?

目录 前言 一、ChatGPT 简介 二、ChatGPT 的应用场景 三、ChatGPT 的优势 四、ChatGPT 的局限性 五、ChatGPT 在自动化测试领域的拓展应用 六、ChatGPT真的可以代替软件测试人员吗 七、结语 前言 人工智能技术在近年来得到了快速发展&#xff0c;不少领域都开始尝试融合…

入理解深度学习——正则化(Regularization):多任务学习

分类目录&#xff1a;《深入理解深度学习》总目录 多任务学习是通过合并几个任务中的样例&#xff08;可以视为对参数施加的软约束&#xff09;来提高泛化的一种方式。正如额外的训练样本能够将模型参数推向具有更好泛化能力的值一样&#xff0c;当模型的一部分被多个额外的任务…

redis主从复制策略的原理:主从节点间如何同步数据?

redis的主从复制原理经历了多个版本的更新。 redis2.8之前的SYNC方案 命令&#xff1a; SYNChttps://www.yuque.com/snailclimb/mf2z3k/ks9olb19hc9wse5k#5935f46a 存在的问题&#xff1a; slave加载RDB的过程中不能对外提供读服务slave和master断开连接后&#xff0c;sla…

HCIA-VLAN间通信之路由器

目录 路由信息获取方式&#xff1a; 最佳路由条目选择&#xff08;根据路由的优先级和开销选择&#xff09;&#xff1a; VLAN间通信 方案1&#xff0c;使用路由器的物理接口来实现不同vlan间的通信 方案2&#xff1a;使用路由器的子接口来实现 路由&#xff1a;指导报文转…

【Vue】二:Vue核心处理---计算属性 监视属性

文章目录 1.计算属性示例2. 监听属性3.补充 1.计算属性示例 实际上计算属性与methods中定义方法基本上没有什么区别&#xff0c;只是计算属性基于响应式依赖缓存&#xff0c;只要数据没有发生改变&#xff0c;计算属性从缓存中取值&#xff0c;只有当数据发送改变&#xff0c;才…

Linux 用户与组群管理

1 用户账户与群组概念 Linux操作系统是多用户多任务的操作系统&#xff0c;允许多个用户同时登录到系统&#xff0c;使 用系统资源。用户账户是用户的身份标识。用户通过用户账户可以登录到系统&#xff0c; 并且访问已经被授权的资源。系统依据账户来区分属于每个用户的文件…

Flutter 笔记 | Flutter 动画

Flutter中的动画抽象 为了方便开发者创建动画&#xff0c;不同的UI系统对动画都进行了一些抽象&#xff0c; Flutter中也对动画进行了抽象&#xff0c;主要涉及 Animation、Curve、Controller、Tween这四个角色&#xff0c;它们一起配合来完成一个完整动画&#xff0c;下面我们…