当前位置: 首页 > web >正文

Open3D 半径滤波器

参考笔记:Open3D:理解与应用半径滤波器-CSDN博客


目录

一、算法原理

1.算法概述

2.计算过程

二、Open3D实现半径滤波器


一、算法原理

1.算法概述

半径滤波器:全称 Radius Outlier Removal ,是一种基于邻域密度的点云去噪方法。它的思路非常直接直接和简单,就是在点云数据中,该算法要求每一个点在一定的半径范围内至少有足够多的邻点,否则就会被当作噪声点移除

核心思想:有效点通常位于密度较高的区域,而噪声点往往孤立存在

2.计算过程

假设点云中有 n 个点,分别是 \color{red}p_1=(x_1,y_1,z_1),.....,p_n=(x_n,y_n,z_n) 

对点云中所有的点都要做以下算法流程:

① 邻域搜索

        对点 \color{red}p_i,搜索其半径 \color{red}r 内的所有邻近点

② 密度判定

        统计点 \color{red}p_i 在该半径内的邻居点数量 \color{red}N_i 

③ 阈值过滤

        若 \color{red}N_i<N_{thres},则判定 \color{red}p_i 为噪声点并移除。其中 \color{red}N_{thres} 为预设的最小邻居点数

🆗,以上就是半径滤波的整个算法流程,非常简单。在后续用 Open3D 实现算法时,只需要输入半径 \color{red}r 和 最小邻居点阈值 \color{red}N_{thres} 即可

二、Open3D实现半径滤波器

Open3D 中实现点云半径滤波的函数是: 

def remove_radius_outlier(self, nb_points, radius):
  • 参数解析

    • nb_points:最小邻居点个数,也就是我们在前面的算法原理讲到的 \color{red}N_{thres}

    • radius: 半径 \color{red}r

  • 返回值解析

    • filtered_pcd: 保留的内点 (inliers) 构成的点云(已移除噪点)

    • inlier_indices:对应原始点云中,被保留为内点的点的索引

案例实现: 

import open3d as o3d
import numpy as np# 生成含噪声的测试点云
def generate_test_data():# 生成球面点云,作为有效数据mesh_sphere = o3d.geometry.TriangleMesh.create_sphere(radius=1.0)mesh_sphere.compute_vertex_normals()sphere_pcd = mesh_sphere.sample_points_uniformly(number_of_points=500)# 添加一些随机噪声(离群点)noise_points = np.random.uniform(-3, 3, (100, 3))noise_pcd = o3d.geometry.PointCloud()noise_pcd.points = o3d.utility.Vector3dVector(noise_points)# 合并点云combined_pcd = sphere_pcd + noise_pcdreturn combined_pcdif __name__ == "__main__":# 生成测试数据original_pcd = generate_test_data()#可视化原始点云original_pcd.paint_uniform_color([1, 0, 0])  # 设置为红色o3d.visualization.draw_geometries([original_pcd], window_name="原始点云",width=1024, height=768,left=50, top=50,mesh_show_back_face=False)# 执行半径滤波print("Radius Outlier Removal")filtered_pcd, inlier_indices = original_pcd.remove_radius_outlier(nb_points=16, #最小邻居点数radius=1)   #半径r# 打印结果print(f"原始点云点数: {len(original_pcd.points)}")print(f"半径滤波后点云点数: {len(filtered_pcd.points)}")print(f"离群点的个数: {len(original_pcd.points) - len(filtered_pcd.points)}")# 可视化半径滤波之后的点云filtered_pcd.paint_uniform_color([1, 0, 0])  # 设置为红色o3d.visualization.draw_geometries([filtered_pcd], window_name="半径点云",width=1024, height=768,left=50, top=50,mesh_show_back_face=False)

运行结果(半径滤波前后效果对比):

可以看到,通过点云的半径滤波器,球形点云(有效数据)周围的噪声点很多都被移除掉了,效果还是不错的

🆗,以上就是本文的所有内容

http://www.xdnf.cn/news/7805.html

相关文章:

  • Enhanced RTMP H.265(HEVC)技术规格解析:流媒体协议的新突破
  • labelme进行关键点标注并转换为yolo格式
  • Vue3 与 Vue2 区别
  • Vue大数据量前端性能优化策略
  • Linux 文件(3)
  • 计算机网络--第一章(下)
  • 【Java】封装在 Java 中是怎样实现的?
  • 面经总目录——持续更新中
  • 数据库基础
  • 写实数字人在展厅的应用:探索无限可能
  • Rocketmq刷盘机制和复制机制区别及关系
  • 超长文本注意力机制如何突破传统 O(n²) 瓶颈
  • 【Redis】哈希表结构
  • Baklib构建AI就绪型知识中台实践
  • 内网穿透:轻松实现外网访问本地服务
  • 至此(day1-day4)代码详解(ai辅助整理)
  • IEEEtran中文献中的作者大于3个时,用et al.省略
  • 院校机试刷题第八天:B3846闰年求和、P1012字母异位词分组
  • 使用亮数据代理IP+Python爬虫批量爬取招聘信息训练面试类AI智能体(手把手教学版)
  • 算法第24天|93.复原IP地址、 78.子集、 90.子集II
  • Java 10IO流
  • DockerHub被封禁,怎么将镜像传到国内?一种简单合规的镜像同步到国内方案[最佳实践]
  • KLEC--基于知识学习的演化计算算法
  • 硬盘健康检测与性能测试的实践指南
  • 【AI助手】提升开发效率:Continue配置自定义提示词模板及规则
  • 白皮精读:109页数据资源体系构建白皮书【附全文阅读】
  • 汉语词汇的神奇拼图:关联性的魅力
  • AI大模型应对挑战,使用winform实现小球在旋转五边形内的舞蹈
  • Java数组列表 - ArrayList
  • 如何使用VH6501进行CAN采样点测试