OPEN3D学习笔记(五)——Point cloud outlier removal

Point cloud outlier removal

去除离群点

Prepare input data

准备输入数据:加载点云文件、进行下采样

print("Load a ply point cloud, print it, and render it")
pcd = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_2.pcd")  # 加载点云
o3d.visualization.draw_geometries([pcd])  # 可视化,渲染

print("Downsample the point cloud with a voxel of 0.02")
voxel_down_pcd = pcd.voxel_down_sample(voxel_size=0.02)  # 下采样,大小为2cm
o3d.visualization.draw_geometries([voxel_down_pcd])  # 可视化降采样后的结果

为了进行比较,uniform_down_sample可以通过收集每第n个点来对点云进行下采样。

print("Every 5th points are selected")
uni_down_pcd = pcd.uniform_down_sample(every_k_points=5)  # 每5个点采样一次(根据点索引来降采样,而不是随机,也不是用什么距离来判断	)
o3d.visualization.draw_geometries([uni_down_pcd])

Select down sample

辅助函数使用带二进制掩码的select_down_sample仅输出所选点。选定的点和未选定的点将可视化。

def display_inlier_outlier(cloud, ind):
    inlier_cloud = cloud.select_by_index(ind)
    outlier_cloud = cloud.select_by_index(ind, invert=True)  # invert利用索引反选

    print("Showing outliers (red) and inliers (gray): ")
    outlier_cloud.paint_uniform_color([1, 0, 0])
    inlier_cloud.paint_uniform_color([0.8, 0.8, 0.8])
    o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud])  # 可视化降采样的点、未被选中的点

Statistical outlier removal

基于统计学方法,高斯分布,适用于移除孤立点(离得很远的点)

remove_statistical_outlier会删除与点云的平均值相比更远离其邻居的点。它带有两个输入参数:
nb_neighbors允许指定要考虑多少个邻居,以便计算给定点的平均距离。
std_ratio允许基于跨点云的平均距离的标准偏差来设置阈值级别。此数字越低,过滤器将越具有攻击性。

print("Statistical oulier removal")
cl, ind = voxel_down_pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)  # 返回pointcloud和索引
display_inlier_outlier(voxel_down_pcd, ind)  # 利用索引进行过滤显示

Radius outlier removal

以半径radius生成的圆,邻居的数目低于阈值则被移除。适用于移除稀疏的点云

radius_outlier_removal会删除在给定球体中周围几乎没有邻居的点。可以使用两个参数将过滤器调整为数据:
nb_points使您可以选择球体应包含的最小点数
radius定义将用于计算邻居的球体的半径。

print("Radius oulier removal")
cl, ind = voxel_down_pcd.remove_radius_outlier(nb_points=16, radius=0.05)  # 半径5cm内至少要有16个点
display_inlier_outlier(voxel_down_pcd, ind)  # 利用索引进行过滤显示
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值