将稀疏 2D LiDAR 图像修复为密集深度图像

Dox*_*s44 2 python image-processing depth point-clouds lidar

我正在研究分类问题(自动驾驶车辆的对象分类)。我使用 KITTI 的数据集,它提供 LiDAR 和相机数据,并希望使用这两个数据来执行任务。

\n

3D LIDAR 数据被投影到 RGB 图像的坐标系上,从而生成稀疏 LiDAR 图像:

\n

疏

\n

原始图像

\n

每个像素都使用深度进行编码(到点的距离:sqrt(X\xc2\xb2 + Y\xc2\xb2),缩放范围在 0 到 255 之间)。

\n

为了让我的 CNN 获得更好的结果,我需要一张密集的 LiDAR 图像,有人知道如何使用 Python 来实现吗?

\n

我想获得这样的东西

\n

目标

\n

小智 5

我以前从未使用过点云数据/激光雷达,但由于尚未有人回答,我将尽力而为。我不确定修复方法是否可行,尽管我想它们可能效果不是很好(除了变分方法,我认为这种方法会很慢)。但是,如果您的目标是将 3D LIDAR 读数(当伴有环 ID 和激光强度读数时)投影到密集的 2D 矩阵(用于 CNN)中,则以下参考可能会很有用。此外,在本文中,他们参考了之前的工作(用于 Velodyne 点云快速里程计估计的 Collar Line Segments for Fast Odometry Estimation from Velodyne Point Clouds),该工作更详细地介绍了极坐标分箱技术,并提供了 C++ 代码。查看论文,但我将尝试在这里总结该技术:

使用极坐标合并对稀疏 3D 数据进行编码

用于 Velodyne LiDAR 数据中快速地面分割的 CNN - 在第 III.A 节(将稀疏 3D 数据编码为密集 2D 矩阵) 中描述了其预处理技术。 在此输入图像描述

  • 1)让P代表你的原始点云,M代表你希望输出的多通道密集矩阵。M的大小取决于扫描中使用的激光束的数量和扫描仪的水平角分辨率。
  • 2) 将点云数据聚合到极坐标箱 b(r, c) 中,其中 r 代表环 id,c = Floor((R * atan(x/z) + 180)/360)。
  • 3) 使用以下映射将 bin b(r, c) 映射到矩阵 M 中的相应值 m(r, c),其中 p^i 是激光强度读数:

在此输入图像描述

  • 4) 在空箱的情况下,从其邻域线性插值 m(r,c) 的值。

提高稀疏映射的性能

最后,看下面的论文,他们介绍了一些在 CNN 中使用稀疏 Velodyne 读数的技术。也许看看这些是否能提高你的表现?

使用全卷积网络从 3D 激光雷达进行车辆检测- 在第 III.A 节(数据准备) 中描述其预处理技术。

将范围数据编码为 2 通道图像

  • 1)初始化2通道矩阵I;用零填充
  • 2) 给定坐标 (x, y, z),令 theta = atan2(y, x) 并令 phi = arcsin(z/sqrt(x^2 + y^2 + z^2))
  • 3) 让 delta_theta、delta_phi 分别等于连续光束发射器之间的平均水平和垂直分辨率。
  • 4)令r = 下限(theta/delta_theta);令 c = 下限(phi/delta_phi)
  • 5) 设 d = sqrt(x^2 + y^2)
  • 6) 设 I(r, c) = (d, z);如果两个点投影到同一位置(罕见),则使该点更靠近观察者

不等(上/下)采样

  • 在第一个卷积层中,作者水平下采样 4 倍,垂直下采样 2 倍;这是因为对于 Velodyne 点图,水平层中的点更密集。他们在最终的反卷积层中通过相同的因子进行上采样(同时预测车辆的“对象性”及其边界框)。

所有技术都是针对 KITTI 数据集/Velodyne LIDAR 实现的,因此我想它们可以适用于您的特定用例(也许需要进行一些修改)。