常见点云文件解析

1. 为什么会有这么多的点云文件

我们在做2D视觉时,处理的就是类似一系列类似的二维数组,数组以图片的形式进行保存,处理的图片也有甚多的格式,比如png,jpg,bmp等。那我们在做3D视觉的时候,处理的主要是点云,点云就是由一些点的集合。点云在组成特点上分为两种,一种是有序点云,一种是无序点云。

有序点云: 一般由深度图还原的点云,有序点云按照图方阵一行一行的,从左上角到右下角排列,当然其中有一些无效点。因为有序点云按顺序排列,可以很容易的找到它的相邻点信息。有序点云在某些处理的时候还是很便利的,但是很多情况下是无法获取有序点云的。

无序点云: 无序点云就是其中的点的集合,点排列之间没有任何顺序,点的顺序交换后没有任何影响,是比较普遍的点云形式。有序点云也可看做无序点云来处理。

在这里插入图片描述
在对点云这个格式有了初步的了解之后,我们来看看该怎么保存这些点云呢。

目前就文件格式而言 有ASCII码和二进制 两种编码形式,ASCII码可以直接阅读里面存储的内容,二进制的保存形式则不可读,但体积会更小。这两种保存都是没有进行过压缩的。

文件的内容的组成就有很多种形式了,也是本篇文章主要介绍的内容,我们来看看常见的格式:

*.pcd
*.off
*.xyz
*.ply
*.obj
*.stl
*.vtk
*.3ds

2. 常见的点云文件格式解析

2.1 pcd格式

# .PCD v0.7 - Point Cloud Data file format   //注释
VERSION 0.7 //PCD文件版本
FIELDS x y z r g b intensity timestamp //每个点包含哪些维度,xyz表示XYZ三维坐标,rgb表示颜色(可以分开表示,也可以一个浮点数表示),intensity表示激光反射强度,timestamp表示时间戳,normal_x、normal_y、normal_z表示平面法线三维坐标,j1、j2、j3表示不变矩。
SIZE 4 4 4 1 1 1 1 8 //每个维度的数据占用字节大小
TYPE F F F U U U U F //每个维度的数据类型,I表示有符号类型int8(char)、int16(short)、int32(int),U表示无符号类型uint8(unsigned char)、uint16(unsigned short)、uint32(unsigned int),F表示浮点型
COUNT 1 1 1 1 1 1 1 1 //每个维度含有多少个元素(如果未提供COUNT属性,默认值为1)
WIDTH 32 //用点的数量表示点云数据集的宽度。有两种含义:1.无序数据集的点云中点的数量 2.有序点云数据集的宽度(一行中点的数量),有序点云数据集中,点云类似图片或矩阵的结构,分为行和列,这种数据通常来自于立体摄像机(stereo camera)、时间飞行摄像机(Time Of Flight camera,使用红外线或者光脉冲来估计光线从发射到检测到的时间延迟来测量距离),知道点的相邻关系,使算法计算更高效。
HEIGHT 2172 //用点云数据集中点的数量表示点云数据集的高度。高度有如下两种含义:1.有序的点云数据集中,行的数量 2.无序点云数据集中,高度为1(可以用来判断一个数据集是有序的还是无序的)
VIEWPOINT 0 0 0 1 0 0 0 //指定数据集合中点的采集视点。可以用来后续可能的坐标转换,或者求平面法线坐标。格式是平移(tx ty tz) + 四元数(qw qx qy qz),默认是0 0 0 1 0 0 0。
POINTS 69504 //点云中点的总数(冗余字段)
DATA binary_compressed //点云数据的存储类型,0.7版本支持两种存储方式:ascii和binary。

文件格式头中的顺序不能改变,即一定是如下顺序:
VERSION、FIELDS、SIZE、TYPE、COUNT、WIDTH、HEIGHT、VIEWPOINT、POINTS、DATA

pcd作为PCL库官方指定格式,典型的为点云量身定制的格式。优点是支持n维点类型扩展机制,能够更好的发挥PCL库的点云处理性能。文件格式有文本和二进制两种格式。仅能支持点云数据,不能支持线面数据。

2.2 off格式

OFF格式文件头有两行:第一行以off关键字开头,第二行表示顶点数、面数、边数。主体分为顶点坐标(顶点列表)和面的顶点索引(面列表)两个部分,其中每个面的顶点数可以指定,用第一个数表示。

OFF
顶点数 面数 边数
x y z
x y z
…

n个顶点 顶点1的索引 顶点2的索引 … 顶点n的索引
…

举个例子

OFF
8 6 0
-0.500000 -0.500000 0.500000
0.500000 -0.500000 0.500000
-0.500000 0.500000 0.500000
0.500000 0.500000 0.500000
-0.500000 0.500000 -0.500000
0.500000 0.500000 -0.500000
-0.500000 -0.500000 -0.500000
0.500000 -0.500000 -0.500000
4 0 1 3 2
4 2 3 5 4
4 4 5 7 6
4 6 7 1 0
4 1 7 5 3
4 6 0 2 4

OFF相对其他格式,更加的简单,可以存储点和面,仅有文本格式。

2.3 xyz格式

前面3个数字是坐标,后面3个数字是法向量(也有代表颜色信息),有多少行就代表有多少个点。

17.371559 -6.531680 -8.080792 0.242422 0.419118 0.874970  //一般前三个数带标xyz,后面三个数代表法向量,也有代表颜色信息的。
15.640106 -16.101347 -9.550241 -0.543610 -0.382877 0.746922  
17.750742 -6.395478 -8.307115 0.333093 0.494766 0.802655  
15.432834 -15.947010 -9.587061 -0.548083 -0.385148 0.742473  
23.626318 -7.729815 -13.608750 0.081697 0.502976 0.860431  
15.300377 -15.610346 -9.547507 -0.569658 -0.341132 0.747743  
23.975805 -7.512131 -13.775388 0.082388 0.564137 0.821561  
24.251831 -7.345085 -13.949208 0.099309 0.574142 0.812711  

2.4 ply格式

PLY,多边形文件格式,表示存储描述为多边形集合的图形对象的 3D 文件格式。这种文件格式的目的是建立一种简单易用的文件类型,该文件类型足够通用,可用于各种模型。 PLY 文件格式有 ASCII 和二进制格式,用于紧凑存储、快速保存和加载。

ply                                          //关键字
format ascii 1.0                    //文件编码格式
comment author: Greg Turk                            // 注释
comment object: another cube                      //注释
element vertex 8                                        // 定义元素为顶点 数目为8个
property float x                                          // 上述顶点元素中的属性 x,数据类型为float
property float y                                          // 上述顶点元素中的属性 y,数据类型为float
property float z                                          // 上述顶点元素中的属性 z,数据类型为float
property uchar red                                   // 上述顶点元素中的属性 red,数据类型为uchar
property uchar green                               // 上述顶点元素中的属性 green,数据类型为uchar
property uchar blue                                // 上述顶点元素中的属性 blue,数据类型为uchar
element face 7                                        // 定义面元素,数目为7个
property list uchar int vertex_index      // 定义面元素内的列表属性,列表开头以uchar的数值表示列表的项目数,后面接着型态为int的顶点索引值(vertex_indices),顶点索引值从0开始。
element edge 5                                      //定义元素为边,数目为5个
property int vertex1                  
property int vertex2                  
property uchar red                    
property uchar green
property uchar blue
end_header                                                  // 文件头部分结束
0 0 0 255 0 0                         //顶点的开始,分别为x y z r g b
0 0 1 255 0 0
0 1 1 255 0 0
0 1 0 255 0 0
1 0 0 0 0 255
1 0 1 0 0 255
1 1 1 0 0 255
1 1 0 0 0 255
3 0 1 2                           //面的开始,这是个三角行,分别有第0 ,1, 2 相连
3 0 2 3                           
4 7 6 5 4                        // 这是个四边形,顶点分别是第 7 6 5 4个点 
4 0 4 5 1
4 1 5 6 2
4 2 6 7 3
4 3 7 4 0
0 1 255 255 255                   // 边的开始,顶点分别是第0个与第一个点,颜色是255,255,255
1 2 255 255 255
2 3 255 255 255
3 0 255 255 255

2.5 obj格式

obj是一种文本文件,通常用以“#”开头的注释行作为文件头,数据部分每一行的开头关键字代表该行数据所表示的几何和模型元素,以空格做数据分隔符。

# The units used in this file are centimeters. 
  g default                           // 组名称
  v -0.500000 -0.500000 0.500000     // v 代表顶点坐标
  v 0.500000 -0.500000 0.500000 
  v -0.500000 0.500000 0.500000 
  v 0.500000 0.500000 0.500000 
  v -0.500000 0.500000 -0.500000 
  v 0.500000 0.500000 -0.500000 
  v -0.500000 -0.500000 -0.500000 
  v 0.500000 -0.500000 -0.500000 
  vt 0.000000 0.000000                   //"vt"代表点的贴图坐标
  vt 1.000000 0.000000 
  vt 0.000000 1.000000 
  vt 1.000000 1.000000 
  vt 0.000000 2.000000 
  vt 1.000000 2.000000 
  vt 0.000000 3.000000 
  vt 1.000000 3.000000 
  vt 0.000000 4.000000 
  vt 1.000000 4.000000 
  vt 2.000000 0.000000 
  vt 2.000000 1.000000 
  vt -1.000000 0.000000 
  vt -1.000000 1.000000 
  vn 0.000000 0.000000 1.000000       //vn 代表顶点法线
  vn 0.000000 0.000000 1.000000 
  vn 0.000000 0.000000 1.000000 
  vn 0.000000 0.000000 1.000000 
  vn 0.000000 1.000000 0.000000 
  vn 0.000000 1.000000 0.000000 
  vn 0.000000 1.000000 0.000000 
  vn 0.000000 1.000000 0.000000 
  vn 0.000000 0.000000 -1.000000 
  vn 0.000000 0.000000 -1.000000 
  vn 0.000000 0.000000 -1.000000 
  vn 0.000000 0.000000 -1.000000 
  vn 0.000000 -1.000000 0.000000 
  vn 0.000000 -1.000000 0.000000 
  vn 0.000000 -1.000000 0.000000 
  vn 0.000000 -1.000000 0.000000 
  vn 1.000000 0.000000 0.000000 
  vn 1.000000 0.000000 0.000000 
  vn 1.000000 0.000000 0.000000 
  vn 1.000000 0.000000 0.000000 
  vn -1.000000 0.000000 0.000000 
  vn -1.000000 0.000000 0.000000 
  vn -1.000000 0.000000 0.000000 
  vn -1.000000 0.000000 0.000000 
  s off                                                   //表示关闭光滑组
  g pCube1                                         //
  usemtl initialShadingGroup             //表示使用的材质
  f 1/1/1 2/2/2 4/4/3 3/3/4                 //f 面,顶点索引/uv点索引/法线索引
  f 3/3/5 4/4/6 6/6/7 5/5/8 
  f 5/5/9 6/6/10 8/8/11 7/7/12 
  f 7/7/13 8/8/14 2/10/15 1/9/16 
  f 2/2/17 8/11/18 6/12/19 4/4/20 
  f 7/13/21 1/1/22 3/3/23 5/14/24 

2.6 stl格式

3D Systems公司创建的模型文件格式,用于表示三角形网格,主要应用于CAD、CAM领域。STL从功能上只能用来表示封闭面或体,有文本和二进制两种文件格式。

文本格式的STL文件的首行给出了文件路径及文件名,下面逐行给出三角面片的几何信息,每一行以1个或2个关键字开头。STL文件格式以三角面(facet)为单位组织数据,每一个三角面由7 行数据组成:facet normal 是三角面片指向实体外部的法矢量坐标,outer loop 说明随后的3行数据分别是三角面片的3个顶点坐标(vertex),3顶点沿指向实体外部的法矢量方向逆时针排列。最后一行是结束标志。

solidfilenamestl  //文件路径及文件名

facet normal x yz // 三角面片法向量的3个分量值
outer loop
vertex x y z  //三角面片第一个顶点的坐标
vertex x y z // 三角面片第二个顶点的坐标
vertex x y z //三角面片第三个顶点的坐标
endloop
endfacet // 第一个三角面片定义完毕
……
……
endsolid filenamestl ∥整个文件结束
  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PCD点云文件处理模型是一种用于处理点云数据的计算机模型。点云是由离散的三维点组成的集合,它可以用来表示三维物体的形状和位置。 PCD点云文件处理模型通常包括以下几个步骤:导入点云数据、预处理、分割、特征提取、分类或识别、导出处理结果。 首先,将PCD点云文件导入到处理模型中,可以使用各种点云库或软件实现此步骤。导入后,对点云数据进行预处理,例如去噪、滤波和重采样。这些预处理步骤旨在减少数据噪声和降低数据密度,以提高后续处理的效果。 接下来,进行分割操作,将整个点云分割为不同的子集。这通常通过识别点云中的平面或曲面来实现,可以使用各种分割算法,如基于几何特征或统计学方法的算法。 然后,进行特征提取,目的是从点云中提取有意义和区分度高的特征。常见的特征包括形状描述子、表面法线、曲率等。这些特征可以用于后续的分类、识别或其他应用。 最后,根据具体应用需求,可以进行分类、识别或其他处理任务。分类任务是将点云划分为不同的类别,例如将点云中的物体分类为汽车、行人、建筑物等。识别任务是识别点云中的特定目标,例如在点云中检测和识别交通标志、行人等。 处理完成后,根据应用需求,可以将处理结果导出到PCD或其他格式的文件中,以供后续使用或展示。 综上所述,PCD点云文件处理模型提供了处理点云数据的一整套流程和方法,它可以应用于各种领域,如计算机视觉、机器人技术、地理信息系统等。 ### 回答2: PCD点云文件处理模型是指将点云数据进行分析、处理、编辑和可视化的方法和工具。点云数据是由3D激光扫描仪或其他传感器获取到的大量点的集合,代表了物体或场景的表面形状。 PCD点云文件处理模型包括以下几个主要步骤: 1. 数据加载:从PCD文件中读取点云数据,并将其加载到内存中以便后续处理。常用的点云处理库,如PCL(Point Cloud Library),提供了API用于加载PCD文件。 2. 数据滤波:对点云数据进行滤波处理,去除噪点和异常点,提高后续处理的准确性。常用的滤波方法包括半径滤波、统计滤波和直通滤波等。 3. 特征提取:通过计算点云数据的几何、颜色和法线等特征,提取出物体或场景的有用信息。常用的特征提取方法包括表面法线计算、曲率计算和轮廓提取等。 4. 数据配准:将多个点云数据进行配准,以便生成更完整的场景模型。常用的配准方法包括ICP(Iterative Closest Point)和非刚体配准等。 5. 数据重建:基于点云数据,进行三维重建和模型生成。常用的重建方法有体素网格化、三角网格化和基于特征的重建等。 6. 数据可视化:将处理后的点云数据以三维图形的形式进行可视化展示,方便用户观察和分析。常用的可视化工具有PCL可视化模块和PointCloudViewer等。 PCD点云文件处理模型的应用非常广泛,包括三维建模、机器人导航、物体识别和虚拟现实等领域。通过有效处理和分析点云数据,可以帮助我们更好地理解和利用三维信息,提高相关应用的效果和性能。 ### 回答3: PCD(Point Cloud Data)是一种用于存储三维点云数据的文件格式,常用于进行三维点云的处理和分析。PCD点云文件处理模型是指对PCD文件进行操作和处理的一系列算法和方法。 PCD点云文件处理模型主要包括以下几个步骤: 1. 加载点云:首先,需要将PCD文件加载到内存中,以便进行后续的处理。可以使用特定的库或软件来读取和解析PCD文件。 2. 数据预处理:对加载的点云数据进行预处理,以去除无效点、噪声和异常点等。常用的预处理方法包括滤波、去噪和降采样等。 3. 特征提取:对预处理后的点云数据提取相关特征,以便进行后续的分析和识别。特征可以包括几何、表面和局部特征等,如法线、曲率、几何描述子等。 4. 分割和聚类:对点云进行分割和聚类,将点云分成不同的区域或对象。可以使用分割算法来提取出感兴趣的目标区域,如平面、边缘或物体等。 5. 三维重建和建模:根据点云数据进行三维重建和建模,将点云转换为三维模型,以便后续的可视化、分析和应用。可以使用点云配准和融合算法,将多个点云数据拼接成一个完整的三维模型。 6. 其他应用:PCD点云文件处理模型还可以用于其他一些应用,如目标检测和识别、路径规划和导航、虚拟现实和增强现实等。 综上所述,PCD点云文件处理模型是一种用于对PCD点云文件进行操作和处理的方法和算法集合。通过加载、预处理、特征提取、分割和聚类、三维重建和建模等步骤,可以对点云数据进行分析、识别和应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值