zoukankan      html  css  js  c++  java
  • 在jupyter notebook中绘制KITTI三维散点图

    在jupyter notebook中绘制KITTI三维散点图

    数据来源是KITTI数据集的电云,它的bin文件中包括的是每一个点的XYZ坐标和反射率,这里只用了坐标。当然数据不一定要KITTI,只要有XYZ坐标就可以

    X=[]
    Y=[]
    Z=[]
    #用来打开KITTI的bin文件
    def get_lidar(path, idx):
        lidar_file = os.path.join(path, '%06d.bin' % idx)
        assert os.path.exists(lidar_file)
        return np.fromfile(lidar_file, dtype=np.float32).reshape(-1, 4)
    ROOT="/home/jiading/myPointnet2/Pointnet2_PyTorch/pointnet2/data"
    MODE="train"
    split_dir = os.path.join(ROOT, 'KITTI', 'ImageSets', MODE + '.txt')
    image_idx_list = [x.strip() for x in open(split_dir).readlines()]
    
    sample_id_list = [int(sample_id) for sample_id in image_idx_list]
    binPath=os.path.join(ROOT,'KITTI','object','training','velodyne')
    for i in sample_id_list:
        fin=open(MODE+str(i+1)+".txt",'w')
        X1=[]
        Y1=[]
        Z1=[]
        for line in get_lidar(binPath,i+1):
            '''line=line[1:]
            sublist=line.split(" ")
            X.append(float(sublist[0]))
            Y.append(float(sublist[1]))
            Z.append(float(sublist[2]))'''
            X1.append(float(line[0]))
            Y1.append(float(line[1]))
            Z1.append(float(line[2]))
        X.append(X1)
        Y.append(Y1)
        Z.append(Z1)
        fin.close()
    

    上面这几步都是数据准备,您也可以准备自己的数据,不用管这个

    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    from matplotlib.pyplot import MultipleLocator
    %matplotlib notebook
    #因为是在jupyter notebook中绘制,所以要加上面这一句
    plt.rcParams['figure.figsize']=[10,10]#设置图的大小
    
    PLOT_WHICH=2#因为我的数据是二维数组,这里选择输出其中一个
    
    ax = plt.subplot(111, projection='3d')  # 创建一个三维的绘图工程
    
    ax.scatter(X[PLOT_WHICH],Y[PLOT_WHICH], Z[PLOT_WHICH], c='b',s=0.1)#s是设置散点的大小,0.1已经比较小了,适用于像KITTI这种有好几万点的情况
    
    ax.set_zlabel('Z')  # 坐标轴
    ax.set_ylabel('Y')
    ax.set_xlabel('X')
    #ax.xaxis.set_major_locator(MultipleLocator(0.5)),这个是用来设置坐标轴间隔的
    #ax.yaxis.set_major_locator(MultipleLocator(0.5))
    ax.set_xlim(-60,60)#设置坐标范围
    ax.set_ylim(-20,40)
    ax.set_zlim(-5,10)
    plt.show()
    

    最后成品长这样:

  • 相关阅读:
    Linux 下C语言 指针学习 二 (数组与指针)
    在VMware虚拟机下访问外网的方法
    网站性能优化
    SEO优化
    前端开发组织结构及文件命名
    自适应网页设计的方法
    c#实现microsoft账号登入授权(OAuth 2.0)并获取个人信息
    twitter 授权过程
    应用facebook .net sdk
    第三方账号登入
  • 原文地址:https://www.cnblogs.com/jiading/p/12182710.html
Copyright © 2011-2022 走看看