统计滤波是一种常用的点云滤波方法,用于去除噪声和异常点。在统计滤波中,通过计算每个点邻域内的统计特征(如平均值和标准差),可以识别出与周围点不太相似的点,并将其视为噪声或异常点进行去除。这种方法通常使用一个固定大小的邻域窗口来计算统计特征,然后根据设定的阈值将点分类为内部点或者离群点。
统计滤波的优点包括简单易懂、计算高效,并且能够有效去除一些离群点和小型噪声。
import open3d as o3d
# 读取点云数据
point_cloud = o3d.io.read_point_cloud("D:\\shuju\\滤波前点云.pcd")
# 设置统计滤波的参数
# 这里以k=20和std_ratio=2.0为例
cl, ind = point_cloud.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)
# 根据滤波结果创建新的点云
filtered_point_cloud = point_cloud.select_by_index(ind)
# 创建可视化窗口并添加原始点云和滤波后的点云
vis_original = o3d.visualization.Visualizer()
vis_filtered = o3d.visualization.Visualizer()
vis_original.create_window(width=800, height=600)
vis_filtered.create_window(width=800, height=600)
vis_original.create_window()
vis_filtered.create_window()
vis_original.add_geometry(point_cloud)
vis_filtered.add_geometry(filtered_point_cloud)
# 显示原始点云和滤波后的点云
vis_original.run()
vis_filtered.run()
# 写出滤波后的点云数据
o3d.io.write_point_cloud("D:\\shuju\\结果点云.pcd", filtered_point_cloud)