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

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)

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

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

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

相关文章:

  • 使用脚本备份和还原Windows环境变量
  • 发二区利器:CNN+LSTM时序预测
  • Linux中I/O复用机制epoll
  • Android 14.0 高通平台Launcher3 中,禁止拖动图标到桌面
  • 自由开发者计划 001:创建一个用于查看 Jupyter Notebook 的谷歌浏览器插件 Jupyter Peek
  • quickbi实现关联度分析(复刻PowerBI展示)
  • 图论算法精解(Java 实现):从基础到高频面试题
  • Python学习——执行python时,键盘按下ctrl+c,退出程序
  • 磁盘分区与挂载——笔记
  • 高速串行差分信号仿真分析及技术发展挑战
  • Linux系统之----文件及缓冲区
  • 【八股战神篇】Spring高频面试题汇总
  • 对单调栈的理解
  • 4082B信号/频谱分析仪
  • 视频监控联网系统GB28181协议中设备控制流程详解
  • 【Linux 性能采集】定周期采集某进程的CPU、内存、文件描述符信息并存储到文件【2025.05.21】
  • PromptIDE:一款强大的AI提示词优化工具
  • 【IC验证】systemverilog_包
  • 在线免费图片处理工具-传道软件图片工具
  • PH热榜 | 2025-05-21
  • 网站设计与开发怎么做/山东服务好的seo公司
  • WordPress整站搬家插件/中文搜索引擎有哪些平台
  • 编程软件推荐/seo百度发包工具
  • 网站做聚合是啥意思/百度知道免费提问
  • 工程公司名字/长沙网站优化效果