目录
一、Kitti数据集简介
1.1数据集内容
1.2数据集结构
二、代码实现
2.1bin转pcd
2.2pcd转bin
三、实现效果
一、Kitti数据集简介
KITTI 数据集是由德国卡尔斯鲁厄理工学院(KIT)和丰田美国技术研究院(Toyota Technological Institute at Chicago, TTI-C)联合发布的,主要用于自动驾驶和计算机视觉领域的研究。KITTI 数据集包含了多种传感器采集的数据,包括激光雷达点云、图像、GPS/IMU 传感器数据等。该数据集被广泛用于研究和开发三维物体检测、跟踪、立体视觉、SLAM、光流估计等任务。
1.1数据集内容
KITTI 数据集包含以下几类主要数据:
原始传感器数据:
- 图像数据:包括前置摄像头、左右立体相机的图像,分辨率为 1242x375 或 1226x370。
- 激光雷达点云:来自 Velodyne HDL-64E 激光雷达,每帧包含超过 10 万个点。
- GPS/IMU 数据:提供精确的位置信息和姿态数据。
处理后的数据:
- 标注的物体检测框:包括3D和2D边界框,用于检测和识别不同类型的物体(如车辆、行人、骑车人等)。
- 道路和车道标注:用于道路检测和车道线检测。
- 光流数据:用于光流估计任务。
- 深度图:用于立体匹配和深度估计任务。
1.2数据集结构
数据集按照不同的任务进行划分,主要包括:
Object Detection and Tracking:
- 包含约 15 万个3D物体标注和约 8 万个2D物体标注。
- 提供 21 个训练序列和 29 个测试序列。
Odometry:
- 提供 22 个序列,其中 11 个序列提供了 ground truth 位姿信息,用于评估视觉里程计和 SLAM 算法。
Raw Data:
- 提供完整的原始传感器数据,包括图像、点云、GPS/IMU 数据等。
- 适合于多任务学习和自定义处理。
二、代码实现
2.1bin转pcd
import open3d as o3d
import numpy as np
# 假设 KITTI 点云数据
point_cloud_file = '000000.bin'
# 读取二进制点云文件
def read_kitti_point_cloud(file):
point_cloud = np.fromfile(file, dtype=np.float32).reshape(-1, 4)
return point_cloud[:, :3] # 只保留x, y, z坐标
# 将点云数据转换为 Open3D 格式
points = read_kitti_point_cloud(point_cloud_file)
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)
# 可视化点云
o3d.visualization.draw_geometries([pcd], window_name="KITTI Point Cloud")
2.2pcd转bin
import open3d as o3d
import numpy as np
def pcd_to_bin(pcd_file, bin_file):
# 读取PCD文件
pcd = o3d.io.read_point_cloud(pcd_file)
# 获取点云的xyz坐标
points = np.asarray(pcd.points, dtype=np.float32)
# 如果需要,可以添加额外的强度信息
# 这里假设强度信息为1(可以根据实际需求进行调整)
intensities = np.ones((points.shape[0], 1), dtype=np.float32)
# 将坐标和强度信息组合在一起
points_with_intensity = np.hstack((points, intensities))
# 将点云数据保存为bin文件
points_with_intensity.tofile(bin_file)
print(f"Successfully saved {bin_file}")
# 示例用法
pcd_file = "test.pcd" # 输入的PCD文件路径
bin_file = "test.bin" # 输出的BIN文件路径
pcd_to_bin(pcd_file, bin_file)