2026/3/2 12:23:12
网站建设
项目流程
制作网站 优帮云,网站建设需要多大的空间,点击宝seo,北京站1 统计滤波原理
2 参数说明
2.1 返回滤波后的点云和对应的索引
2.2 提取滤波后的点云#xff08;内点#xff09;
2.3 提取噪声点云#xff08;外点#xff09;
3 代码实现
3.1 直接编写代码行
3.2 封装为函数 1 统计滤波原理
三维点云统计滤波#xff08;Statist…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为读取的点云对象pcdnum_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(rH:\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_neighborsnum_neighbors, std_ratiostd_ratio ) print(统计滤波后的点云, inlier_cloud) # 内点保留点设为蓝色 inlier_cloud.paint_uniform_color([0, 0, 1]) # 外点噪声点提取 outlier_cloud pcd.select_by_index(ind, invertTrue) 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可视化滤波后的结果点云(内点)和噪声点云外点 # paramcloud原始点云 # paramind内点索引 def display_inlier_outlier(cloud, ind): # 提取内点 inlier_cloud cloud.select_by_index(ind) # 提取外点 outlier_cloud cloud.select_by_index(ind, invertTrue) # 结果展示 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(rH:\HTempWK\temp\open3d\pointdata\feiji.pcd) # 统计滤波 print(Statistical oulier removal) # K 近邻点数 nb_neighbors20 # 标准差系数 std_ratio2.0 inlier_cloud, ind pcd.remove_statistical_outlier(nb_neighbors, std_ratio) display_inlier_outlier(pcd, ind)