Open3D 点云分割与聚类

Open3D 点云分割与聚类:
RANSAC 平面分割:RANSAC是随机抽样一致算法。它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。RANSAC算法的基本理论基础是大数定律,也就是当采样数达到一定数量后采样的数据就会符合它自身原有的概率属性。这是一种通过概率的方式来进行拟合。

结合前面知识点的理解:
1.以RANSAC平面分割为例,由于三个点可以确定一个平面,因此RANSAC会随机选择三个点来构建一个平面
2.并用点云中实际上有多少个点落到这个平面上来作为评估这个平面的正确程度。
3.当随机抽样的次数足够多时,我们有较大概率获得所需要的平面:A x + B y + C z + D = 0

一、基于RANSAC平面分割的过程:
1:确定拟合模型
2:确定拟合该模型每次需要的点个数
3:随机选点计算模型参数
4:根据距离d计算inlier个数
5:重复随机,保留inlier个数最多的那个模型

1、首先确定拟合数学模型:Ax+By+Cz+D=0,拟合模型需要三个点。
在这里插入图片描述

  1. 确定拟合模型所需要的必要点个数n
    直线:空间两点确定一条直线 n=2
    球:空间四个点确定外接球心和半径 n=4
    正方体:空间了四个点确定正方体形状位置 n=4
    平面:空间三点确定平面 n=3
  2. 随机选择n个点计算数学模型
    在这里插入图片描述

2、计算inlier数量,Inlier判定方式:计算所有点与随机点计算的平面之间的距离d,如果d<D(距离阈值),判断为内点。
在这里插入图片描述

3、随机次数达到给定次数,保留inlier个数最多的那个平面模型。

segment_plane函数解析:

plane_model, inliers = pcd.segment_plane(distance_threshold=0.01ransac_n=3,
                                     num_iterations=1000)

参数:(距离d:判定是否是inlier的依据 随机次数m:停止随机的阈值)
distance_threshold:inlier的最大距离阈值
ransac_n:随机采样的平面点数
num_iterations:表示最小迭代次数。
返回值:plane_model:平面模型,即个平面方程系数(a,b,c,d),作为一个平面,对于平面上每个点(x,y,z),我们有ax+by+cz+d=0。
inliers :内点索引

代码:

import open3d as o3d

pc = o3d.io.read_point_cloud("pointcloud.pcd")
pc = pc.uniform_down_sample(5) #采样
o3d.visualization.draw_geometries([pc])
# 返回模型系数plane_model和内点索引inliers,并赋值
plane_model, inliers = pc.segment_plane(0.01, 3, 1000)#[距离模型的距离阈值,计算模型的点个数,随机次数]

# 平面方程
[a, b, c, d] = plane_model
print(f"Plane equation: {a:.2f}x + {b:.2f}y + {c:.2f}z + {d:.2f} = 0")
# 内点
inlier_cloud = pc.select_by_index(inliers)
inlier_cloud.paint_uniform_color([0, 0, 1.0])
# 外点
outlier_cloud = pc.select_by_index(inliers, invert=True)
# outlier_cloud.paint_uniform_color([1.0, 0, 0])
# 可视化
o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud])
#保存结果
o3d.io.write_point_cloud("plane.pcd",inlier_cloud)



在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值