激光雷达FrontView表示形式:从pointCloud到CNN的2D图像:如何计算像素值?

时间:2019-06-03 16:33:55

标签: image conv-neural-network projection point-clouds lidar

我正在研究对象分类(和检测任务)。我需要同时使用激光雷达和相机数据。我设法获得了图像平面上的3D点坐标,但是随后在计算新激光雷达图像的像素值时遇到了一些困难。我遵循文章的想法:

Pixel

这是我用于生成激光雷达图像的代码:

"""
  1. Color Point Cloud from RGB Image
  2. Project Point Cloud into RGB Image for depth
  3. Also apply to Gray Image
"""
def lidar_camera_fusion2(point_cloud, image, T_velo_cam, P_velo_image):
    image_size = image.shape
    point_cloud_size = point_cloud.shape[0]
    X_coordinates = point_cloud[:,0]
    Y_coordinates = point_cloud[:,1]
    Z_coordinates = point_cloud[:,2]
    Ref_values = point_cloud[:,3]

    print("Creating Lidar Image...")

    image_lidar = np.zeros(image_size, dtype=np.uint8)


    xyz = point_cloud.copy()
    xyz[:,3] = 1.0 # Assign all reflectance to 1 
# project into image
    velo_img = np.dot(P_velo_image, xyz.T).T #P_velo_image = P_rect[i] *R_rect_00*T_cam_velo, 
# normalize homogeneous coordinates
    velo_img = np.true_divide(velo_img[:,:2], velo_img[:,[-1]]) #Divide the first two columns by the third column element for each row
velo_img = np.round(velo_img).astype(np.uint16) #Arrondit à l'entier supérieur car les index des pixels doivent être des entiers 

#Compute DHI channels 

# compute depth
    depth = 255 * (1 -np.minimum(X_coordinates/max(X_coordinates), 1))
    depth = np.round(depth).astype(np.uint16)

#compute height
    height = 255 * (1 -np.minimum(Z_coordinates/max(Z_coordinates), 1))
    height = np.round(height).astype(np.uint16)

#compute intensity 
    intensity = 255 * (1 -np.minimum(Ref_values/max(Ref_values), 1))
    intensity = np.round(intensity).astype(np.uint16)

    for pt in range(0, velo_img.shape[0]):
        row_idx = velo_img[pt][1]
        col_idx = velo_img[pt][0]

        if (row_idx >= 0 and row_idx < image_size[0]) and (col_idx >= 0 and col_idx < image_size[1]):
                # assign point cloud to image pixel
            image_lidar[row_idx][col_idx]=[height[pt],depth[pt],intensity[pt]]

    return image_lidar

这是我的结果:

result

我认为该图片提供的信息不足以用于CNN。

使用的数据集是Kitti数据集。这是与点云关联的摄像机图像:

img

我尝试了另一种方法,但是我认为它对CNN也不起作用。

2dntry

我的代码有什么问题?用于编码深度,高度和反射率的像素值应该是多少,或者仅将深度和反射率编码为什么像素值。我想使用深度图像(从点云生成)和“反射图像”,将其与相机图像一起使用,以通过多模式深度学习进行对象分类。

提前谢谢

0 个答案:

没有答案