news 2026/5/1 7:51:47

第八课 Open3D点云数据处理:统计滤波

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第八课 Open3D点云数据处理:统计滤波

1 统计滤波原理

2 参数说明

2.1 返回滤波后的点云和对应的索引

2.2 提取滤波后的点云(内点)

2.3 提取噪声点云(外点)

3 代码实现

3.1 直接编写代码行

3.2 封装为函数


1 统计滤波原理

三维点云统计滤波(Statistical Outlier Removal Filter)是一种基于统计学原理的滤波方法,其主要思想是使用指定的统计学模型(如高斯分布模型)对点云数据进行建模,并识别出不符合模型的异常点,从而实现去除噪声的效果。具体步骤如下:

对每一点的邻域进行统计分析,基于点到所有邻近点的距离分布特征,过滤掉一些不满足要求的离群点。该算法对整个输入进行两次迭代

在第一次迭代中,

2 参数说明

在Open3D中,可以使用remove_statistical_outlier函数来实现统计滤波。remove_statistical_outlier函数的参数及用法如下:

inlier_cloud, ind = open3d.geometry.PointCloud.remove_statistical_outlier(num_neighbors , std_ratio)

两个输入参数:num_neighborsstd_ratio
两个返回值:inlier_cloudind

其中,open3d.geometry.PointCloud为读取的点云对象pcd,num_neighbors为K近邻的点数;std_ratio为标准差系数。inlier_cloud为最终将滤波后的点云(内点),ind为内点在原始点云中的索引。

2.1 返回滤波后的点云和对应的索引

inlier_cloud, ind = pcd.remove_radius_outlier(num_neighbors , std_ratio)

2.2 提取滤波后的点云(内点)

其实,inlier_cloud就是滤波后的点云。当我们内点索引后,可以根据索引提取内点。

# invert 表示取反,默认False inlier_cloud= pcd.select_by_index(idx, invert = False) # 简写 inlier_cloud = pcd.select_by_index(idx)

2.3 提取噪声点云(外点)

# invert 表示取反,invert = True 时执行取反,即噪声点云 outlier_cloud= pcd.select_by_index(idx,invert = True)

3 代码实现

3.1 直接编写代码行

import open3d as o3d print("-> 正在加载点云...") pcd = o3d.io.read_point_cloud(r"H:\HTempWK\temp\open3d\pointdata\feiji.pcd") # 判断点云是否成功读取 if pcd.is_empty(): print("点云加载失败!") exit(0) print("原始点云:", pcd) # ========================= 统计滤波 ========================= print("-> 正在进行统计滤波...") num_neighbors = 20 # K 邻域点数 std_ratio = 2.0 # 标准差倍数 # 统计离群点移除 inlier_cloud, ind = pcd.remove_statistical_outlier( nb_neighbors=num_neighbors, std_ratio=std_ratio ) print("统计滤波后的点云:", inlier_cloud) # 内点(保留点)设为蓝色 inlier_cloud.paint_uniform_color([0, 0, 1]) # 外点(噪声点)提取 outlier_cloud = pcd.select_by_index(ind, invert=True) print("噪声点云:", outlier_cloud) # 外点设为红色 outlier_cloud.paint_uniform_color([1, 0, 0]) # =========================================================== # 可视化结果 o3d.visualization.draw_geometries( [inlier_cloud, outlier_cloud], window_name="统计滤波结果(蓝色:内点,红色:噪声)" )

3.2 封装为函数

为提高代码复用性,我们将可视化统计滤波后的结果点云和噪声点云封装为一个函数display_inlier_outlier,可以在需要的地方直接调用。

import open3d as o3d import numpy as np # @describe:可视化滤波后的结果点云(内点)和噪声点云(外点) # @param:cloud,原始点云 # @param:ind,内点索引 def display_inlier_outlier(cloud, ind): # 提取内点 inlier_cloud = cloud.select_by_index(ind) # 提取外点 outlier_cloud = cloud.select_by_index(ind, invert=True) # 结果展示 print("Showing outliers (red) and inliers (blue): ") outlier_cloud.paint_uniform_color([1, 0, 0]) inlier_cloud.paint_uniform_color([0, 0, 1]) o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud]) if __name__ == "__main__": # 加载点云 pcd = o3d.io.read_point_cloud(r"H:\HTempWK\temp\open3d\pointdata\feiji.pcd") # 统计滤波 print("Statistical oulier removal") # K 近邻点数 nb_neighbors=20 # 标准差系数 std_ratio=2.0 inlier_cloud, ind = pcd.remove_statistical_outlier(nb_neighbors, std_ratio) display_inlier_outlier(pcd, ind)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 19:23:45

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/5/1 6:48:12

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/4/23 18:15:54

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

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

作者头像 李华
网站建设 2026/4/30 23:31:31

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

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

作者头像 李华
网站建设 2026/4/25 21:38:31

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

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

作者头像 李华
网站建设 2026/5/1 4:08:20

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

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

作者头像 李华