数据集的介绍
image文件:8位png格式
velodyne文件 :激光雷达的测量数据,点云以二进制形式存储,后缀为.bin。
点云数据以浮点二进制文件格式存储,每行包含8个数据,每个数据由四位16进制数表示(浮点数),每个数据通过空格隔开,一个点云数据由四个浮点数构成,分别表示x, y, z, r(强度,反射)
一个字节是多少位? Answer:一个字节为8位。
carlib文件:相机、雷达等的校正数据
label文件:kitti中object的标签和评估数据
每一行代表一个object,每一行都有16列分别表示不同的含义
第一列代表物体的类别。第2列(浮点数):数字表示指离开图像边界对象的程度。 第3列(整数):代表物体是否被遮挡。 第4列(弧度数):物体的观察角度(alpha) 第5~8列(浮点数):物体的2D边界框大小(bbox) 四个数分别是xmin、ymin、xmax、ymax(单位:pixel),表示2维边界框的左上角和右下角的坐标。 第9~11列(浮点数):3D物体的尺寸(dimensions)分别是高、宽、长(单位:米) 第12-14列(整数):3D物体的位置(location)分别是x、y、z(单位:米),特别注意的是,这里的xyz是在相机坐标系下3D物体的中心点位置。 第15列(弧度数):3D物体的空间方向(rotation_y)取值范围为:-pi ~ pi(单位:rad),它表示,在照相机坐标系下,物体的全局方向角(物体前进方向与相机坐标系x轴的夹角),如图所示。第16列(整数):检测的置信度(score)
点云数据的可视化
import numpy as np # 导入NumPy库用于数据处理
import mayavi.mlab # 导入Mayavi库用于三维可视化
import os # 导入os模块用于文件路径操作
# 000010.bin这里需要填写文件的位置
# bin_file = '../data/object/training/velodyne/000000.bin'
# assert os.path.exists(bin_file), "{} is not exists".format(bin_file)
kitti_file = r'/home/miaomiao/kitti_object_vis-master/data/object/training/velodyne/000001.bin'
# 从文件中读取点云数据,每个点包含4个浮点数(X、Y、Z坐标和反射强度),存储为NumPy数组
pointcloud = np.fromfile(file=kitti_file, dtype=np.float32, count=-1).reshape([-1, 4])
# pointcloud = np.fromfile(str("000010.bin"), dtype=np.float32, count=-1).reshape([-1, 4])
# 打印点云数据的形状,结果是 (N, 4)
print(pointcloud.shape)
x = pointcloud[:, 0] # x position of point
y = pointcloud[:, 1] # y position of point
z = pointcloud[:, 2] # z position of point
r = pointcloud[:, 3] # reflectance value of point
d = np.sqrt(x ** 2 + y ** 2) # 点到传感器的距离(二维平面距离)
# sqrt 是 "square root" 的缩写,即平方根。
vals = 'height'
if vals == "height":
col = z
else:
col = d
# 创建一个Mayavi场景,并设置背景颜色和大小
fig = mayavi.mlab.figure(bgcolor=(0, 0, 0), size=(640, 500))
# mayavi.mlab.figure() 函数用于创建一个新的 Figure 对象,这个对象是 Mayavi 中用于显示三维图形的容器
# bgcolor=(0, 0, 0):指定了 Figure 的背景颜色为黑色。
# 这里使用 RGB 色彩空间,(0, 0, 0) 分别表示红、绿、蓝通道的颜色强度,(0, 0, 0) 表示全黑。
# size=(640, 500):指定了 Figure 的大小为宽度 640 像素,高度 500 像素。
# 使用 Mayavi 库中的 points3d 函数在三维空间中绘制点云数据。
mayavi.mlab.points3d(x, y, z,
col, # 用于颜色的数组,它决定了每个点的颜色。在这段代码中,根据之前的逻辑,col 的值应该是点的 Z 坐标或者点到传感器的距离。
mode="point", # 绘制模式,这里是点模式
colormap='spectral', # 'bone', 'copper', 'gnuplot'
# color=(0, 1, 0), # Used a fixed (r,g,b) instead
figure=fig,
)
# 'spectral',这是一种常用的颜色映射
# 会根据数据值的大小从紫色渐变到红色,可以帮助显示出数据的分布情况和变化趋势。
# 数据值指的是 col 参数所表示的值,它决定了点的颜色。
# 创建一条线段用于辅助绘制,这里是一个平行于Y轴的线段
x = np.linspace(5, 5, 50)
y = np.linspace(0, 0, 50)
z = np.linspace(0, 5, 50)
mayavi.mlab.plot3d(x, y, z, color=(1, 0, 1)) # 调用 Mayavi 库的 plot3d 函数,将创建的线段绘制在三维空间中。
mayavi.mlab.show()