PCD文件格式

什么是PCD文件

 Point Cloud Data,中文译为点云数据(简称PCD),它是一种存储点云数据的文件格式。其实文件格式有很多种,但是为什么还要重新定义一种新的文件格式呢?那是因为它们都无法满足PCL(Point Cloud Library)的数据处理需求。在PCD格式被定义之前,表示激光扫描仪获取的点云、任意多变形的文件格式有:
  PLY:表示多边形的文件格式;
  STL:CAD文件格式,用3d max或CAD软件处理;
  OBJ:一种几何学格式文件;
  X3D:ISO标准的基于XML格式的计算机3D图形文件格式。

PCD版本

 PCD格式是由多个版本的,如PCD_V5、PCD_V6等,分别表示PCD格式的0.5、0.6两个版本;而在PCL中使用的版本为PCD_V7(即0.7)版本。

 PCD文件内容

 PCD文件必须用ASCII字符编码。其文件内容如下所示(PCD_V7):

# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z
SIZE 4 4 4
TYPE F F F
COUNT 1 1 1
WIDTH 5
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 5
DATA ascii
0.35222197 -0.15188313 -0.10639524
-0.3974061 -0.47310591 0.29260206
-0.73189831 0.66710472 0.44130373
-0.73476553 0.85458088 -0.036173344
-0.46070004 -0.2774682 -0.91676188

 从上面的文件信息中可以看到,文件的前11行,主要说明文件存储点云数据的格式信息。且每个格式的声明及点云数据之间用\n字符隔开。格式包头的关键字的信息说明如下所示:

# .PCD v0.7 - Point Cloud Data file format //注释,说明PCD文件的版本
VERSION 0.7 //PCD文件的版本号
FIELDS x y z //每个点应该包含那些维度信息,xyz表示xyz三维坐标,后面可添加rgb(表示颜色)、intensity(表示激光反射强度)、timestamp(表示时间戳)、normal_x/normal_y/normal_z(表示平面法线三维坐标)、j1/j2/j3(表示不变矩)
SIZE 4 4 4 //每个维度的数据所占用的字节大小
TYPE F F F //每个维度数据的数据类型;I表示有符号类型、U表示无符号类型、F表示浮点数
COUNT 1 1 1 //每个维度含有多少个元素,默认为1
WIDTH 5 //点云数据集合的宽度,用点的数量表示。含义:1.无序数据集的点云中的点的个数;2.有序点云数据集的宽度,即一行中点的数量
HEIGHT 1 //点云数据集合的高度,用点的数量表示;含义:1.无需点云中数据集中,高度为1(可用于判断指定数据集是有序还是无序的);2.有序点云数据集的高度,即行的数量
VIEWPOINT 0 0 0 1 0 0 0 //指定数据集合中点的采集视点;可用于后续坐标的转换,或求平面法线坐标。格式为平移(tx ty tz) 四元数(qw qx qy qz),默认为0 0 0 1 0 0 0
POINTS 5 //点云集合中点的总个数
DATA ascii //点云数据的存储类型,在0.7版本中支持ascii和binary两种格式;前两个版本仅支持ascii格式

备注: 文件格式头的顺序是不能被改变的,即顺序一定要是:VERSION FIELDS SIZE TYPE COUNT WIDTH HEIGHT VIEWPOINT POINTS DATA

 生成PCD文件

  参考生成PCD文件中的代码。

 python加载PCD文件

import open3d as o3d
import numpy as np

#通过python原生文件接口加载pcd文件
def read_pcd_by_open():
    pcd_path = "test_pcd.pcd"
    f = open(pcd_path, 'r')
    data = f.readlines()
    for line in data:
        print("{}".format(line))
    f.close()

#通过open3d库接口函数加载pcd文件
def read_pcd_by_open3d():
    pcd_path = "test_pcd.pcd"
    pcd = o3d.io.read_point_cloud(pcd_path)
    print("{}".format(np.asarray(pcd.points)))


if __name__ == "__main__":
    read_pcd_by_open3d()
    print("\n")
    read_pcd_by_open()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值