资源简介

python_三维激光点云的地面分割,以及非地面点云数据的聚类,并且进行可视化。以某条道路区域的点云数据为样本进行测试,文件中包含有测试数据,以及代码运行聚类的效果图。

资源截图

代码片段和文件信息

# 文件功能:
#     1. 从数据集中加载点云数据
#     2. 从点云数据中滤除地面点云
#     3. 从剩余的点云中提取聚类

import numpy as np
import os
import struct
from sklearn import cluster datasets mixture
from itertools import cycle islice
import matplotlib.pyplot as plt
from RANSAC import *
import open3d as o3d
import open3d
from pyntcloud import PyntCloud
from pandas import Dataframe
import sklearn.cluster
from DBSCAN import *
from mpl_toolkits.mplot3d import Axes3D

# 功能:从kitti的.bin格式点云文件中读取点云
# 输入:
#     path: 文件路径
# 输出:
#     点云数组
def read_velodyne_bin(path):
    ‘‘‘
    :param path:
    :return: homography matrix of the point cloud N*3
    ‘‘‘
    pc_list = []
    with open(path ‘rb‘) as f:
        content = f.read()
        pc_iter = struct.iter_unpack(‘ffff‘ content)
        for idx point in enumerate(pc_iter):
            pc_list.append([point[0] point[1] point[2]])
    return np.asarray(pc_list dtype=np.float32)

# 功能:从点云文件中滤除地面点
# 输入:
#     data: 一帧完整点云
# 输出:
#     segmengted_cloud: 删除地面点之后的点云
def ground_segmentation(data):
    # 作业1
    # 屏蔽开始
    #调用实现的RANSAC方法,详见另一个RANSAC.py
    planeids = PlaneRANSAC(data0.35)
    segmengted_cloud = data[planeids]#由上一步得到的地面点的索引进行取值

    # 屏蔽结束

    print(‘origin data points num:‘ data.shape[0])
    print(‘segmented data points num:‘ segmengted_cloud.shape[0])
    return segmengted_cloudplaneids


# 功能:从点云中提取聚类
# 输入:
#     data: 点云(滤除地面后的点云)
# 输出:
#     clusters_index: 一维数组,存储的是点云中每个点所属的聚类编号(参考上一章内容容易理解)
def clustering(data):
    # 作业2
    # 屏蔽开始
    #使用sklearn中的聚类
    Css = sklearn.cluster.DBSCAN(eps=0.50 min_samples=4).fit(data)
    clusters_index = np.array(Css.labels_)

    #使用自己实现的聚类
    # clusters_index = DBSCAN(data0.5100)
    # 屏蔽结束

    return clusters_index

# 功能:显示聚类点云,每个聚类一种颜色
# 输入:
#      data:点云数据(滤除地面后的点云)
#      cluster_index:一维数组,存储的是点云中每个点所属的聚类编号(与上同)
def plot_clusters(data cluster_index):
    ax = plt.figure().add_subplot(111 projection = ‘3d‘)
    colors = np.array(list(islice(cycle([‘#377eb8‘ ‘#ff7f00‘ ‘#4daf4a‘
                                             ‘#f781bf‘ ‘#a65628‘ ‘#984ea3‘
                                             ‘#999999‘ ‘#e41a1c‘ ‘#dede00‘])
                                      int(max(cluster_index) + 1))))
    colors = np.append(colors [“#000000“])
    ax.scatter(data[: 0] data[: 1] data[: 2] s=2 color=colors[cluster_index])
    plt.show()

def main():
    root_dir = ‘./data/‘ # 数据集路径
    cat = os.listdir(root_dir)
    cat = cat[1:]
    # iteration_num = len(cat)
    iteration_num = 1
    for i in range(iteration_num):
        filename = os.path.join(root_dir cat[i])
        print(‘clustering pointcloud file:‘ filename)

        origin_points = read_velodyne_bin(filename)
        segmented_pointsplaneids = ground_segmentation(data=origin_points)
        planepcd = o3d.geometry.PointCloud()
        planepcd.points = o3d.utility.Vector3dVector(segmented_points)

        c = [0 0 255]
        cs = np.tile(c (segmented_points.shape[0] 1))
        planepcd.color

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        174  2020-06-15 13:30  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\.idea\inspectionProfiles\profiles_settings.xml

     文件        294  2020-06-15 13:30  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\.idea\misc.xml

     文件        429  2020-06-15 13:30  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\.idea\modules.xml

     文件        291  2020-06-15 13:30  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\.idea\python_点云的地面分割,以及非点云数据的聚类,并且进行可视化.iml

     文件      13701  2020-07-18 17:09  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\.idea\workspace.xml

     文件       5259  2020-06-27 13:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\clustering.py

    .......   2010160  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\data\000000.bin

    .......   1953744  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\data\000001.bin

    .......   1849664  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\data\000002.bin

    .......   1948720  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\data\000003.bin

    .......   1993024  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\data\000004.bin

    .......   1756368  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\data\000005.bin

    .......      2350  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\DBSCAN.py

    .......      2354  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\RANSAC.py

    .......        94  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\README.md

    .......      2586  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\__pycache__\DBSCAN.cpython-36.pyc

     文件       2639  2020-06-16 13:54  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\__pycache__\DBSCAN.cpython-37.pyc

    .......      1959  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\__pycache__\RANSAC.cpython-36.pyc

     文件       2032  2020-06-16 13:54  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\__pycache__\RANSAC.cpython-37.pyc

    .......    385014  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\可视化结果.pptx

     目录          0  2020-06-15 13:30  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\.idea\inspectionProfiles

     目录          0  2020-05-10 17:08  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\data

     目录          0  2020-06-16 13:54  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master\__pycache__

     目录          0  2020-07-18 17:09  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\.idea

     目录          0  2020-07-18 16:37  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化\pointcloud-master

     目录          0  2020-06-15 13:30  python_点云的地面分割,以及非点云数据的聚类,并且进行可视化

----------- ---------  ---------- -----  ----

             11930856                    26


评论

共有 条评论