概要
python用open3d库 实现PCD格式点云转换为LAS格式,本以为用文心一言和讯飞星火大模型做这种小功能,应该是小菜一碟,但谁知道还是翻车了
整体架构流程
安装open3d库
读取PCD格式数据
写入LAS格式
技术名词解释
- Open3D是一个用于处理3D数据的开源库,它提供了许多功能,如点云处理、几何变换、可视化等
- PCD(Point Cloud Data)是一种常见的开放式点云数据存储格式,最初由ROS(Robot Operating System)中的PCL(Point Cloud Library)项目引入。
它广泛用于点云数据的存储和共享,可以包含元数据,如坐标系、点云类型等。
PCD格式具有广泛的支持,可以使用各种点云处理工具来读取和写入PCD文件。
与BIN(Binary)格式相比,PCD格式通常包含元数据,而BIN格式以二进制形式存储点云数据,更紧凑,适用于大型点云数据的存储 - 从本质上来说,LAS格式是一种二进制文件格式。其目的是提供一种开放的格式标准,允许不同的硬件和软件提供商输出可互操作的统一格式。现在LAS格式文件已成为LiDAR数据的工业标准格式。
技术细节
import os
import open3d as o3d
import numpy as np
import laspy
def pcd_to_las(pcd_file, las_file):
pcd2 = o3d.t.io.read_point_cloud(pcd_file)
pcd_intensity = pcd2.point["intensity"] # 强度
pcd_points = pcd2.point["positions"] # 坐标
pcd_intensity = pcd_intensity[:, :].numpy() # 转换为数组类型
pcd_points = pcd_points[:, :].numpy() # 转换为数组类型
las = laspy.create()
las.x = pcd_points[:, 0]
las.y = pcd_points[:, 1]
las.z = pcd_points[:, 2]
las.intensity = pcd_intensity[:, 0]
# 保存las文件
las.write(las_file)
# 使用示例
pcd_to_las("D:/input.pcd", "D:/output.las")
小结
文心一言和讯飞星火给出的代码,要么不能读取pcd格式数据,要么保存的las中没有强度数据。
刚开始还怀疑可能是库的版本问题导致的,但当我在提示词中加入Open3D的库版本,还是有问题,看来代码生成工具还是有很长的路要走啊。