使用RGB图像和PointCloud,如何从PointClouds生成深度图? (蟒蛇)

时间:2019-05-24 08:37:13

标签: image camera point-clouds depth-buffer kitti

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

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

我想将来自点云的深度信息用作CNN的渠道。但是我从来没有使用过点云,因此我需要一些帮助。是否将点云投影到相机图像平面中(使用Kitti提供的投影矩阵)会给我想要的深度图? Python libray pcl有用还是我应该转到C ++库?

如果您有任何建议,请先谢谢您

3 个答案:

答案 0 :(得分:0)

我不确定Kitti提供的投影矩阵包括什么,所以答案取决于它。如果此投影矩阵仅包含变换矩阵,则无法从中生成深度图。 2D图像具有来自2D摄像机的畸变,并且点云通常不具有畸变,因此,如果没有内部参数和外部参数,则无法将点云“精确”映射到rgb图像。

不需要PCL执行此操作。

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

答案 1 :(得分:0)

我想向您指出我编写的一些代码可以解决您的问题。该代码非常易于阅读和理解,应该可以回答您的大多数问题

https://github.com/soulslicer/kitti_depthmap

答案 2 :(得分:0)

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

,您也可以使用插值和最近点算法来填充空白