这两种滤波非常有用,一定要用好;
半径滤波:
半径滤波器比较简单粗暴。以某点为中心画一个圆计算落在该圆中点的数量,当数量大于给定值时,则保留该点,数量小于给定值则剔除该点。此算法运行速度快,依序迭代留下的点一定是最密集的,但是圆的半径和圆内点的数目都需要人工指定;
统计滤波过滤:
第一次扫描:对每个点,我们计算它到它的所有临近N个点的平均距离。计算出这些距离的均值和标准差
第二次扫描:平均距离在M个标准差范围(由全局距离平均值和方差定义〉之外的点,可被定义为离群点并可从数据集中去除掉。
代码很简单,两行就行了:
point_cloud= o3d.io.read_point_cloud(filename_model)
cl, ind = point_cloud.remove_statistical_outlier(nb_neighbors=60,std_ratio=1)
cl, ind = point_cloud.remove_radius_outlier(nb_points=50, radius=2)
point_cloud = point_cloud.select_by_index(ind)