两种点云分割(一)— RANSAC分割平面

        点云分割的目的是将点云中属于不同部分的点加以区分。最直接的点云分割方法就是聚类,八种点云聚类方法(一)— DBSCAN_Coding的叶子的博客-CSDN博客这个在前面几节之中已经进行了详细介绍。本节将简要介绍另外几种点云分割的方法。采用深度学习的点云分割方法将在深度学习章节中进行介绍。

1 RANSAC分割平面

        RANSAC为Random Sample Consensus的缩写,即随机抽样一致性,它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。RANSAC算法的基本理论基础是大数定律,也就是当采样数达到一定数量后采样的数据就会符合它自身原有的概率属性。这是一种通过概率的方式来进行拟合。

        以RANSAC平面分割为例,由于三个点可以确定一个平面,因此RANSAC会随机选择三个点来构建一个平面,并用点云中实际上有多少个点落到这个平面上来作为评估这个平面的正确程度。当随机抽样的次数足够多时,我们有较大概率获得所需要的平面。平面方程如下所示:

Ax+By+Cz+D=0(1)

2 open3d RANSAC

        open3d中RANSAC分割平面的函数为segment_plane,主要参数有三个。distance_threshold定义了一个点到一个估计平面的最大距离,这些距离内的点被认为是内点(inlier),ransac_n定义了使用随机抽样估计一个平面的点的个数,num_iterations定义了随机平面采样和验证的频率(迭代次数)。这个函数返回(A,B,C,D)作为一个平面,对于平面上每个点(x,y,z)满足上面的平面方程。这个函数还会返回内点索引的列表。

pcd.segment_plane(distance_threshold=0.1, ransac_n=10, num_iterations=1000)

3 程序样例

          pcd文件请参考:pcd格式点云样例文件-深度学习文档类资源-CSDN下载。

# -*- coding: utf-8 -*-
"""
@author: https://blog.csdn.net/suiyingy
"""

import open3d as o3d
import numpy as np

if __name__ == '__main__':
    file_path = 'rabbit.pcd'
    pcd = o3d.io.read_point_cloud(file_path)
    # pcd = pcd.uniform_down_sample(50)#每50个点采样一次
    pcd.paint_uniform_color([0.5, 0.5, 0.5])#指定显示为灰色
    print(pcd)
    plane_model, inliers = pcd.segment_plane(distance_threshold=0.2, ransac_n=10, num_iterations=5000)
    [A, B, C, D] = plane_model
    print(f"Plane equation: {A:.2f}x + {B:.2f}y + {C:.2f}z + {D:.2f} = 0")
    colors = np.array(pcd.colors)
    colors[inliers] = [0, 0, 1]#平面内的点设置为蓝色
    pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])
    o3d.visualization.draw_geometries([pcd], #点云列表
                                      window_name="RANSAC平面分割",
                                      point_show_normal=False,
                                      width=800,  # 窗口宽度
                                      height=600)  # 窗口高度

4 平面分割效果

        处于分割平面的点用蓝色表示,其他点用灰色表示。

两种点云分割(一)— RANSAC分割平面_第1张图片

 python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_3d点云 python从三维基础知识到深度学习,将按照以下目录持续进行更新。https://blog.csdn.net/suiyingy/article/details/124017716

你可能感兴趣的:(三维点云,python,点云分割,RANSAC,点云,open3d,python)