news 2026/9/3 2:45:53

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

作者头像

张小明

前端开发工程师

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

1 中值滤波原理

2 与均值滤波对比

3 中值滤波代码实现

3.1 代码行实现

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


1 中值滤波原理

点云中值滤波是将空间中每个点的值替换为其邻域点值的中位数。具体来说,对于给定点云中的每个点,我们考虑它的邻域,即以该点为中心的一定大小的球体,然后将该球体内所有点的xyz三个方向的值分别进行排序,分别计算三个方向的中位数来代替该点的坐标值。

中值滤波会丢失一些细节信息,因为它只考虑了每个点周围的点,而没有利用全局信息。同时,窗口大小的选取也很重要,过大的窗口,排序的点数增多,运算时间也会增加,并且会导致平滑效果过于明显,过小的窗口则可能无法去除噪声。因此,在实际应用中需要根据具体情况进行调整。

需要注意的一点是:中值滤波后,点云中点的总数并不会发生变化,只是点的位置发生改变。

2 与均值滤波对比

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

3 中值滤波代码实现

关键代码:

# 计算邻域内所有点的坐标中位数 median = np.median(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 # 计算邻域内所有点的坐标中位数 median = np.median(np.asarray(pcd.points)[idx], axis=0) # 更新当前点的坐标 np_points[i] = median # 创建点云对象,存放滤波结果 pcd_median = o3d.geometry.PointCloud() pcd_median.points = o3d.utility.Vector3dVector(np_points) # 打印点云信息 print('原始点云:',pcd) print('滤波点云:',pcd_median) # 可视化滤波结果 pcd.paint_uniform_color([1,0,0]) pcd_median.paint_uniform_color([0,1,0]) o3d.visualization.draw_geometries([pcd,pcd_median], width=1200, height=800, window_name = '中值滤波-原始点云(红),滤波点云(绿)')

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

import open3d as o3d import numpy as np """ @describe: 点云中值滤波 @param[I]: pointCloud, 待滤波点云 @param[I]: radius, 滤波窗口半径 @return: pointCloud_median: 中值滤波结果点云 """ def pointCloud_median_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 # 计算邻域内所有点的坐标中位数 median = np.median(np.asarray(pcd.points)[idx], axis=0) # 更新当前点的坐标 np_points[i] = median # 创建点云对象,存放滤波结果 pointCloud_median= o3d.geometry.PointCloud() pointCloud_median.points = o3d.utility.Vector3dVector(np_points) # 返回滤波结果点云 return pointCloud_median if __name__ == "__main__": # 读取点云文件 pcd = o3d.io.read_point_cloud("data\desk.pcd") # 定义中值滤波窗口半径 radius = 0.05 # 创建点云对象,存放滤波结果 pcd_median = o3d.geometry.PointCloud() # 执行中值滤波 pcd_median = pointCloud_median_filter(pcd,radius) # 打印点云信息 print('原始点云:',pcd) print('滤波点云:',pcd_median) # 可视化滤波结果 pcd.paint_uniform_color([1,0,0]) pcd_median.paint_uniform_color([0,1,0]) o3d.visualization.draw_geometries([pcd,pcd_median], width=1200, height=800, window_name = '中值滤波-原始点云(红),滤波点云(绿)')
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 2:28:29

Leetcode 25. K 个一组翻转链表 JavaScript (Day 12)

js一刷自解 var reversefunction(node0,head,k){let rearhead;let curhead;for(let i0;i<k;i){let tempcur.next;let node1node0.next;node0.nextcur;cur.nextnode1;curtemp;}rear.nextcur;return[rear,cur]; }var reverseKGroup function(head, k) {let dummynew ListNod…

作者头像 李华
网站建设 2026/9/2 23:52:48

Leetcode 138. 随机链表的复制 (Day 12)

js 一刷 var copyRandomList function(head) {if (!head) return null;let map new Map();let cur head;while (cur) {map.set(cur, new ListNode(cur.val));cur cur.next;}cur head;while (cur) {let copy map.get(cur);copy.next map.get(cur.next) ?? null;copy.ra…

作者头像 李华
网站建设 2026/9/2 23:53:36

基于Java+SpringBoot的零售与仓储管理系统(源码+lw+部署文档+讲解等)

课题介绍 本课题聚焦零售行业与仓储管理脱节、库存周转效率低、订单处理流程繁琐、数据协同不及时等痛点&#xff0c;设计并实现一款基于JavaSpringBoot的零售与仓储管理系统&#xff0c;旨在打通零售端与仓储端数据链路&#xff0c;为企业提供一体化的经营管理解决方案。系统以…

作者头像 李华
网站建设 2026/9/2 19:52:02

深度学习计算机毕设之基于python的人脸识别系统设计与实现机器学习

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/2 19:50:51

springboot基于javaweb的大学生兼职管理系统vue签约

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

作者头像 李华
网站建设 2026/9/2 19:53:50

Java小白面试实录:从Spring Boot到微服务架构的技术探讨

场景描述 在某知名互联网大厂的会议室内&#xff0c;小白程序员“超好吃”正准备参加他人生中第一次Java开发岗的面试。面试官是一位看似严肃但经验丰富的技术专家。 第一轮提问&#xff1a;Spring Boot基础与应用 面试官&#xff1a;超好吃&#xff0c;你好&#xff01;首先请…

作者头像 李华