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

Inpainting of sparse 2D LiDAR image to dense depth image

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

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

每个像素都使用深度编码(到点的距离:sqrt(X² + Y²),缩放比例在 0 到 255 之间)。

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

我想获得这样的东西

我以前从未与 point-cloud data/LIDAR 合作过,但由于还没有人回答,我会尽力而为。我不确定修复方法 per-say,虽然我想它们可能不会很好地工作(除了可能是变分方法,我认为它会很慢)。但是,如果您的目标是将 3D LIDAR 读数(伴随环 ID 和激光强度读数)投影到密集的 2D 矩阵(用于 CNN),则以下参考可能有用。此外,在这篇论文中,他们参考了以前的工作(Collar Line Segments for Fast Odometry Estimation from Velodyne Point Clouds) which covers the technique of polar binning in more detail, and has C++ code available。查看论文,但我会在这里尝试总结该技术:

使用 Polar Binning 编码稀疏 3D 数据

CNN for Very Fast Ground Segmentation in Velodyne LiDAR Data - 在 III.A( 将稀疏 3D 数据编码为密集 2D 矩阵 )部分描述了它的预处理技术。

  • 1) P代表你的原始点云,M代表你希望输出的multi-channel密集矩阵。 M的大小取决于扫描时使用的激光束的数量和扫描仪的水平angular分辨率。
  • 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 读数的技术。也许看看这些是否可以提高您的表现?

Vehicle Detection from 3D Lidar Using Fully Convolutional Network - 在 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 = floor(theta/delta_theta);让 c = floor(phi/delta_phi)
  • 5) 令 d = sqrt(x^2 + y^2)
  • 6) 令 I(r, c) = (d, z);如果两个点投射到相同的位置(很少见),让那个更靠近观察者

不等(Up/Down)采样

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

所有技术都是针对 KITTI dataset/Velodyne 激光雷达实现的,所以我想它们可以(可能需要一些修改)适用于您的特定 use-case。