在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()

最后成品長這樣:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM