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

时间:2019-06-05 16:04:14

标签: python image-processing point-clouds depth lidar

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

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

sparse

original_image

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

为了获得CNN更好的结果,我需要一个密集的激光雷达图像,有人知道如何使用python做到这一点吗?

我想获得这样的东西

goal

提前谢谢

1 个答案:

答案 0 :(得分:1)

我以前从未使用过点云数据/ LIDAR,但由于没有人回答,我会尽力而为。我不确定每种方法的修复方法,尽管我认为它们可能无法很好地工作(除了可变方法,我认为这会相当慢)。但是,如果您的目标是将3D LIDAR读数(伴随有环号和激光强度读数)投影到密集的2D矩阵(用于CNN中),则以下参考资料可能会有用。此外,在本文中,他们引用了以前的工作(Collar Line Segments for Fast Odometry Estimation from Velodyne Point Clouds),其中更详细地介绍了极性合并技术and has C++ code available。查看论文,但我将在此处尝试总结该技术:

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

CNN for Very Fast Ground Segmentation in Velodyne LiDAR Data -在第III.A节(将稀疏3D数据编码为密集2D矩阵)中描述了其预处理技术。 enter image description here

  • 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是激光强度读数:

enter image description here

  • 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);如果两点投影到同一位置(稀有),则使那一点更靠近观察者

不均等(上/下)采样

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

所有技术都是针对KITTI数据集/ Velodyne LIDAR实施的,因此我认为它们可以针对您的特定用例工作(也许进行一些修改)。