小测验——根据内参计算一对RGB-D图像对应的点云

一、前述

emmm,cv2这个库,也就是opencv折腾了10分钟(Could not load the Qt platform plugin xcb in巴拉巴拉),果断放弃;换了python自带的库进行读取;理论部分还是参考了《视觉slam十四讲》中第五讲的内容
核心的话,其实就是这块,逐像素赋值
在这里插入图片描述

二、代码展示

提要:这里用的输入例子还是第五讲中的RGB-D实践那块,我选取了第一张rgb和深度图进行反投影至点云,pose里面的内容我没去用(因为都是位姿,是给拼接用的),然后cx = 325.5、cy = 253.5、fx = 518.0、fy = 519.0、depth_scale = 1000.0。这几个参数,我是直接抄下来了。

import numpy 
### KITTI 数据集目录结构与格式说明 #### 1. 总体概述 KITTI 数据集是一个广泛用于自动驾驶研究的数据集合,包含了多种传感器数据,如摄像头图像、激光雷达点云以及校准参数等。其主要分为训练集 (`training`) 和测试集 (`testing`)[^3]。 --- #### 2. 目录结构详解 以下是 KITTI 数据集的标准目录结构: ``` ├── KITTI_DATASET_ROOT │ ├── training <-- 训练数据 (7481 条记录) │ │ ├── image_2 <-- 左侧 RGB 图像 (用于可视化) │ │ ├── calib <-- 校准文件 (包含相机和激光雷达之间的转换矩阵) │ │ ├── label_2 <-- 物体标注文件 (每帧对应一个文本文件) │ │ ├── velodyne <-- 激光雷达点云数据 (二进制格式) │ │ └── velodyne_reduced <-- 减少后的点云数据 (通常为空目录) │ └── testing <-- 测试数据 (无标签,共 7518 条记录) │ ├── image_2 <-- 左侧 RGB 图像 (用于可视化) │ ├── calib <-- 校准文件 │ ├── velodyne <-- 激光雷达点云数据 │ └── velodyne_reduced <-- 减少后的点云数据 (通常为空目录) ``` --- #### 3. 各子目录及其内容格式 ##### 3.1 `image_2` - **描述**: 存储左侧单目摄像头拍摄的 RGB 图像- **用途**: 主要用于视觉任务,如目标检测、语义分割等。 - **存储方式**: 每张图片以 PNG 格式保存,命名规则为 `{样本编号}.png`[^3]。 ##### 3.2 `calib` - **描述**: 提供了不同坐标系间的校准信息,包括相机内参矩阵、外参矩阵以及投影矩阵。 - **用途**: 实现多传感器融合时的关键输入。 - **存储方式**: 每条记录对应一个 `.txt` 文件,内部包含多个键值对形式的参数定义。 ##### 3.3 `label_2` - **描述**: 包含物体标注信息,每一行为一条标注记录。 - **字段解释**: - 类型名称(Type) - 截断程度(Truncated) - 遮挡等级(Occluded) - 边界框位置(Bounding Box Coordinates) - 尺寸大小(Dimensions) - 方位角(Rotation Y)等[^1]。 - **存储方式**: 每个样本对应的标注存放在单独的 `.txt` 文件中。 ##### 3.4 `velodyne` - **描述**: 储存由 Velodyne LiDAR 获取到的三维点云数据。 - **格式**: 使用自定义二进制格式表示,其中每个点由 `(x, y, z, reflectance)` 组成。 - **读取方法**: Python 中可通过 NumPy 或其他科学计算工具加载这些原始字节流并解析为数组。 ##### 3.5 `planes` - **描述**: 定义地面平面模型的信息。 - **作用**: 助力移除背景中的静态部分以便专注于动态对象分析。 --- #### 4. 多种坐标系统的关联关系 为了便于理解如何处理来自不同设备采集得到的空间几何特性,在此提及三个重要概念——即世界坐标系(World Coordinate System),摄像机坐标系(Camera Coordinate System)还有LiDAR坐标体系(LiDAR Coordinate System)。它们通过特定变换矩阵相互联系起来,而具体数值可以从 calibration files 找到[^4]。 --- ```python import numpy as np def read_velodyne_bin(file_path): """Read a point cloud from the binary format.""" points = np.fromfile(file_path, dtype=np.float32).reshape(-1, 4) return points[:, :3] # Example usage of reading one frame's lidar data. lidar_data = read_velodyne_bin('path/to/your/file.bin') print(lidar_data.shape) # Output should be something like (N, 3), where N is number of points. ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周末不下雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值