news 2026/4/16 15:44:12

第十课Open3D点云数据处理:均值滤波

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第十课Open3D点云数据处理:均值滤波

1 均值滤波原理

2 与中值滤波对比

3 均值滤波代码实现

3.1 代码行实现

3.2 将均值滤波的实现封装到函数 pointCloud_mean_filter() 中


1 均值滤波原理

点云均值滤波是将空间中每个点的值替换为其周围点的坐标平均值。具体来说,对于给定点云中的每个点,我们考虑它的邻域,即以该点为中心的一定大小的球体,然后计算该球体内所有点的坐标平均值,最后将该点的坐标值替换为该平均值。这个过程可以重复进行多次,以进一步平滑点云数据。点云均值滤波可以有效地去除噪声和平滑点云数据。

2 与中值滤波对比

  • 原理不同:均值滤波取平均值,中值滤波取中位数。
  • 滤波效果不同:均值滤波适用于去除较为平稳的噪声,能够在一定程度上对点云数据进行平滑处理,但会损失部分细节信息;中值滤波更适用于去除非均匀性噪声,能够保留更多的细节信息。
  • 适用范围不同:均值滤波适用于处理较小的噪声,窗口大小较小;中值滤波适用于处理较大的噪声,窗口大小较大。

3 均值滤波代码实现

# axis=0表示对点云取质心,返回一个三维坐标 mean = np.mean(np.asarray(pcd.points)[idx], axis=0)

3.1 代码行实现

import open3d as o3d import numpy as np # 读取点云文件 pcd = o3d.io.read_point_cloud(r"H:\HTempWK\temp\open3d\pointdata\feiji.pcd") # 定义均值滤波半径 radius = 0.05 # 构建kdtree进行邻域搜索 kdtree = o3d.geometry.KDTreeFlann(pcd) np_points = np.array(pcd.points) # 遍历点云 for i in range(len(pcd.points)): # 获取当前点的坐标 point = pcd.points[i] # 使用kdtree搜索当前点的邻域 [k, idx, _] = kdtree.search_radius_vector_3d(point, radius) # 如果邻域内没有点,则跳过 if k < 1: continue # 计算邻域内所有点的坐标平均值 mean = np.mean(np.asarray(pcd.points)[idx], axis=0) # 更新当前点的坐标 np_points[i] = mean # 创建点云对象,存放滤波结果 pcd_mean = o3d.geometry.PointCloud() pcd_mean.points = o3d.utility.Vector3dVector(np_points) # 打印点云信息 print('原始点云:',pcd) print('滤波点云:',pcd_mean) # 可视化滤波结果 pcd.paint_uniform_color([1,0,0]) pcd_mean.paint_uniform_color([0,1,0]) o3d.visualization.draw_geometries([pcd,pcd_mean], width=1200, height=800, window_name = '均值滤波-原始点云(红),滤波点云(绿)')

3.2 将均值滤波的实现封装到函数pointCloud_mean_filter()

import open3d as o3d import numpy as np """ @describe: 点云均值滤波 @param[I]: pointCloud, 待滤波点云 @param[I]: radius, 滤波窗口半径 @return: pointCloud_mean: 均值滤波结果点云 """ def pointCloud_mean_filter(pointCloud,radius): # 构建kdtree进行邻域搜索 kdtree = o3d.geometry.KDTreeFlann(pointCloud) np_points = np.array(pointCloud.points) # 遍历点云 for i in range(len(pointCloud.points)): # 获取当前点的坐标 point = pointCloud.points[i] # 使用kdtree搜索当前点的邻域 [k, idx, _] = kdtree.search_radius_vector_3d(point, radius) # 如果邻域内没有点,则跳过 if k < 1: continue # 计算邻域内所有点的坐标平均值 mean = np.mean(np.asarray(pcd.points)[idx], axis=0) # 更新当前点的坐标 np_points[i] = mean # 创建点云对象,存放滤波结果 pointCloud_mean= o3d.geometry.PointCloud() pointCloud_mean.points = o3d.utility.Vector3dVector(np_points) # 返回滤波结果点云 return pointCloud_mean if __name__ == "__main__": # 读取点云文件 pcd = o3d.io.read_point_cloud("data\desk.pcd") # 定义均值滤波窗口半径 radius = 0.05 # 创建点云对象,存放滤波结果 pcd_mean = o3d.geometry.PointCloud() # 执行均值滤波 pcd_mean = pointCloud_mean_filter(pcd,radius) # 打印点云信息 print('原始点云:',pcd) print('滤波点云:',pcd_mean) # 可视化滤波结果 pcd.paint_uniform_color([1,0,0]) pcd_mean.paint_uniform_color([0,1,0]) o3d.visualization.draw_geometries([pcd,pcd_mean], width=1200, height=800, window_name = '均值滤波-原始点云(红),滤波点云(绿)')
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:20:16

第十二课Open3D点云数据处理:半径-均值组合滤波

1 半径-均值组合滤波算法原理 1.1 半径滤波原理 1.2 均值滤波原理 2 代码实现 2.1 代码行实现 2.2 将半径-均值组合滤波实现封装到 pointCloud_radius_mean_filter() 函数中 1 半径-均值组合滤波算法原理 1.1 半径滤波原理 1.2 均值滤波原理 需要注意的一点是&#xff1a…

作者头像 李华
网站建设 2026/4/16 12:52:49

深度测评 8个一键生成论文工具:本科生毕业论文痛点全解析

深度测评 8个一键生成论文工具&#xff1a;本科生毕业论文痛点全解析 学术写作工具测评&#xff1a;为何需要一份靠谱的榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的本科生开始依赖AI工具辅助毕业论文的撰写。然而&#xff0c;面对市场上种类繁多的一键…

作者头像 李华
网站建设 2026/4/16 11:05:23

AI一周大事盘点(2025年12月28日~2026年1月3日)

【摘要】2025年岁末至2026年新年伊始&#xff0c;全球AI产业展现出从“技术热点”向“系统性基础设施”深度融合的转型趋势。本周焦点集中于AI算力的硬件与能源创新&#xff0c;以OpenAI联手博通造芯和核能供电数据中心为代表。国内方面&#xff0c;政策治理持续细化&#xff0…

作者头像 李华
网站建设 2026/4/16 5:15:15

zotero7导入插件

从中文社区下载xpi 文件以后&#xff0c;直接导入就可以我们在抓取文献时&#xff0c;经常遇到标题全大写、首字母大小写不规范&#xff0c;或者缺省期刊缩写、大学地点格式不统一的情况。Linter for Zotero 是一个专门用于标准化这些信息的工具。它的核心功能是规范文献条目的…

作者头像 李华
网站建设 2026/4/16 14:24:53

springboot基于地图的智慧旅游景点推荐一体化服务系统vue

目录摘要开发技术核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 基于SpringBoot和Vue的智慧旅游景点推荐…

作者头像 李华
网站建设 2026/4/16 10:55:07

分布式计算:大数据领域的高性能解决方案

分布式计算&#xff1a;大数据领域的高性能解决方案 一、引言&#xff1a;当“大数据”遇到“计算瓶颈” 你有没有过这样的经历&#xff1f; 手里握着100GB的用户行为日志&#xff0c;想统计“每个用户的月活跃度”——用本地电脑跑Python脚本&#xff0c;3个小时过去了进度条…

作者头像 李华