Преобразование двоичных данных лидара (.bin) в формат данных облака точек (.pcd)

У меня есть данные лидара, собранные с помощью Velodyne-128 в формате .bin. Мне нужно преобразовать его в формат pcd. Я использую NVIDIA Driveworks для обработки данных, но нет инструмента для преобразования двоичных данных лидара в pcd.

Таким образом, есть ли способ конвертировать двоичные данные лидара в формат pcd?


person uguros    schedule 03.03.2020    source источник


Ответы (3)


Вот фрагмент для преобразования данных лидара (в формате .bin) в формат .pcd

with open ("lidar_velodyne64.bin", "rb") as f:
    byte = f.read(size_float*4)
    while byte:
        x,y,z,intensity = struct.unpack("ffff", byte)
        list_pcd.append([x, y, z])
        byte = f.read(size_float*4)
np_pcd = np.asarray(list_pcd)
pcd = o3d.geometry.PointCloud()
v3d = o3d.utility.Vector3dVector
pcd.points = v3d(np_pcd)

Согласно примеру, здесь, вы можете сохраните его в файл, как показано ниже:

import open3d as o3d
o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd)
person Victoria Kepler    schedule 13.05.2020

Хотя все остальные решения, вероятно, верны, я искал простую версию только для numpy. Вот:

import numpy as np
import open3d as o3d

# Load binary point cloud
bin_pcd = np.fromfile("lidar_velodyne64.bin", dtype=np.float32)

# Reshape and drop reflection values
points = bin_pcd.reshape((-1, 4))[:, 0:3]

# Convert to Open3D point cloud
o3d_pcd = o3d.geometry.PointCloud(o3d.utility.Vector3dVector(points))

# Save to whatever format you like
o3d.io.write_point_cloud("pointcloud.pcd", o3d_pcd)
person rayon    schedule 03.11.2020

Я нашел код с github (ссылка приведена ниже):

import numpy as np
import struct
from open3d import *

def convert_kitti_bin_to_pcd(binFilePath):
    size_float = 4
    list_pcd = []
    with open(binFilePath, "rb") as f:
        byte = f.read(size_float * 4)
        while byte:
            x, y, z, intensity = struct.unpack("ffff", byte)
            list_pcd.append([x, y, z])
            byte = f.read(size_float * 4)
    np_pcd = np.asarray(list_pcd)
    pcd = PointCloud()
    pcd.points = Vector3dVector(np_pcd)
    return pcd

Справка: https://gist.githubusercontent.com/HTLife/e8f1c4ff1737710e34258ef965b48344/raw/76e15821e7cd45cac672dbb1f14d577dc9be5ff8/convert_kitti_bin_to_pcd.py

person uguros    schedule 04.03.2020