4

我正在融合激光雷达和相机图像,以便使用 CNN 执行分类对象算法。

我想使用提供同步激光雷达和 rgb 图像数据的 KITTI 数据集。激光雷达是 3D 扫描仪,因此输出是 3D 点云。

我想使用来自点云的深度信息作为 CNN 的通道。但我从未使用过点云,所以我寻求帮助。将点云投影到相机图像平面(使用 Kitti 提供的投影矩阵)会给我想要的深度图吗?Python libray pcl 有用还是我应该转向 c++ 库?

如果您有任何建议,请提前感谢您

4

2 回答 2

2

我不确定 Kitti 提供的投影矩阵包括什么,所以答案取决于它。如果这个投影矩阵只包含一个变换矩阵,则不能从中生成深度图。2D 图像具有来自 2D 相机的失真,而点云通常没有失真,因此您无法在没有内在和外在参数的情况下将点云“精确”映射到 rgb 图像。

PCL 不需要这样做。

深度图本质上是将深度值映射到 rgb 图像。您可以将点云中的每个点(lider 的每个激光)视为 rgb 图像的一个像素。因此,我认为您需要做的就是找到点云中对应于 rgb 图像的第一个像素(左上角)的点。然后根据 rgb 图像分辨率从点云中读取深度值。

于 2019-05-24T15:08:25.530 回答
0

你与相机无关。这都是关于点云数据的。假设您有 1000 万个点,每个点的 x,y,z 以米为单位。如果数据不是以米为单位,请先转换它。然后你需要激光雷达的位置。当您从所有点中逐一减去汽车的位置时,您会将激光雷达的位置带到(0,0,0)点,然后您可以将该点打印在白色图像上。剩下的就是简单的数学运算,可能有很多方法可以做到。我首先想到的是:将 rgb 视为二进制数。假设 1 厘米被缩放为 1 个蓝色的变化,256 厘米的变化等于 1 个绿色的变化,256x256 即 65536 厘米的变化等于 1 个红色的变化。我们知道 cam 是 (0,0,0) 如果该点的 rgb 是 1,0,0 那么这意味着距离相机 256x256x1+0x256+0x1=65536 cm。这可以在 C++ 中完成。

于 2021-06-10T21:22:33.287 回答