首先了解一下什么是PCD格式的文件,PCD(Point Cloud Data) 文件是 PCL(Point Cloud Library) 引入的一种新的描述点云的格式。让我详细介绍一下 PCD 文件的结构和内容。
(1)文件头部:
- 每个 PCD 文件都包含一个文件头,用于标识并声明存储在文件中的点云数据的一些特性。
- PCD 文件头必须以 ASCII 编码表示。
- 文件头的每个字段以及 ASCII 点数据都使用 新行(\n) 分隔。
(2)PCD 文件头的字段:
下面是 PCD 文件头的一些字段,按照指定的顺序精确指定:
- VERSION:指定 PCD 文件版本,目前 PCL 支持的版本为 0.7。
- FIELDS:指定点具有的维度或字段的名称,例如 x、y、z 坐标、法线、颜色等。
- SIZE:指定每个维度的大小(以字节为单位)。
- TYPE:将每个维度的类型指定为一个字符,例如 F(浮点型)、U(无符号整型)等。
- COUNT:指定每个维度有多少个元素,通常为 1。
- WIDTH:以点数为单位指定点云的宽度,即点的数量。
- HEIGHT:有组织的点云数据集的高度,即扫描线数。
- VIEWPOINT:为数据集中的点指定采集视点,用于构建不同坐标系之间的变换或处理需要一致方向的特征,如曲面法线。
- POINTS:指定云中的点总数。
- DATA:指定存储点云数据的数据类型,支持三种类型:ascii、binary 和 binary_compressed。
(3)优势:
- PCD 文件格式相对于其他文件格式的优势包括:
- 存储和处理有组织的点云数据集的能力,对于实时应用和增强现实、机器人等研究领域至关重要。
- 二进制/数据类型是将数据加载和保存到磁盘的最快方法。
- 存储不同的数据类型允许点云数据在存储和处理方面灵活高效。
- 特征描述符的 n-D 直方图对于 3D 感知/计算机视觉应用非常重要。
(4)代码示例
import open3d as o3d
# 提取三维模型的信息
def extract_info_to_nparray(pcd):
data = {}
data["points"] = np.asarray(pcd.points)
data["colors"] = np.asarray(pcd.colors)
data["normals"] = np.asarray(pcd.normals)
return data
if __name__ =="__main__":
# demo_icp_pcds = o3d.data.DemoICPPointClouds()
# source = o3d.t.io.read_point_cloud(demo_icp_pcds.paths[0])
# target = o3d.t.io.read_point_cloud(demo_icp_pcds.paths[1])
source = o3d.io.read_point_cloud("./data/output.pcd")
target = o3d.io.read_point_cloud("./data/cloud_bin_1.pcd")
print(extract_info_to_nparray(target))
官网关于点云类型的数据的API:https://www.open3d.org/docs/release/python_api/open3d.geometry.PointCloud.html