使用 RGB 图像和点云,如何从点云生成深度图? (python)

Using RGB images and PointCloud, how to generate depth map from the PointClouds? (python)

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

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

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

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

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

PCL 不需要这样做。

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

你跟相机没关系。这都是关于点云数据的。假设您有 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++ 中完成。如果有

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