点云存储文件格式简介
在众多存储点云的文件格式中,有些格式是为点云数据“量身打造”的,也有一些文件格式(如计算机图形学和计算机和学领域的3D模型或通讯数据文件)具备表示和存储点云的能力,应用于点云信息的存储。本文将这些文件格式一并视为“点云存储文件格式”。
从这个意义上说,除了包含基本的点的笛卡尔坐标信息之外,有些文件格式还可能包含点之间的连接关系(拓扑结构),以及法线等其他信息。
一、常见点云存储文件格式简介
每个人都可以定义自己的数据存储格式,也因此产生了不计其数点云存储文件格式。一些文件格式致力于标准化与通用性,而今被多个相关软件或软件库所支持,也被大多数业内人士所认同和使用。下面按字母排列顺序简单介绍几种最常见的点云格式。
*.las
LiDAR数据的工业标准格式,旨在提供一种开放的格式标准,允许不同的硬件和软件提供商输出可互操作的统一格式。是一种二进制文件格式。
LAS文件包含以下信息:
l C--class(所属类)
l F一flight(航线号)
l T一time(GPS时间)
l I一intensity(回波强度)
l R一return(第几次回波)
l N一number of return(回波次数)
l A一scan angle(扫描角)
l RGB一red green blue(RGB颜色值)
示例:
可以看出,las文件格式除了基本的三维坐标之外,保留了原始扫描的数据采集信息。LAS格式定义中用到的数据类型遵循1999年ANSI(AmericanNationalStandardsInstitute,美国国家标准化协会)C语言标准。
参考资料:
https://www.cnblogs.com/chenbokai/p/6010143.html
*.obj
是由Alias|Wavefront Techonologies公司从几何学上定义的3D模型文件格式,是一种文本文件。通常用以“#”开头的注释行作为文件头。数据部分每一行的开头关键字代表该行数据所表示的几何和模型元素,以空格做数据分隔符。
对于点云数据来说,其中最基本的两个关键字:
v 几何体顶点 (Geometric vertices)
f 面 (Face)
示例:
一个四边形的数据表示:
v -0.58 0.84 0
v 2.68 1.17 0
v 2.84 -2.03 0
v -1.92 -2.89 0
f 1 2 3 4
其它元素请参考资料:
https://www.cnblogs.com/slysky/p/4081307.html
*.off
相对于obj格式文件,off文件有更简单的存储格式。是一种文本格式。
OFF格式文件头有两行:第一行以off关键字开头,第二行表示顶点数、面数、边数。主体分为顶点坐标(顶点列表)和面的顶点索引(面列表)两个部分,其中每个面的顶点数可以指定,用第一个数表示。
示例:(一个立方体)
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
参考资料:
https://blog.csdn.net/dongleivip/article/details/17203413
可用off格式数据:
ModelNet [http://modelnet.cs.princeton.edu/]
Wu, S. Song, A.Khosla, F. Yu, L. Zhang, X. Tang and J. Xiao . 3D ShapeNets:A Deep Representation for Volumetric Shapes. Proceedings of 28th IEEE Conference onComputer Vision and Pattern Recognition (CVPR2015)
*.pcap
一种通用的数据流格式,现在流行的Velodyne公司出品的激光雷达默认采集数据文件格式。它是一种二进制文件。
数据构成结构如下:
整体一个全局头部(GlobalHeader),然后分成若干个包(Packet),每个包又包含头部(Header)和数据(Data)部分。
二进制文件示例篇幅较大不在此摘录,具体请参考资料:
https://blog.csdn.net/u013793399/article/details/51474831
*.pcd
PCL库官方指定格式,典型的为点云量身定制的格式。优点是支持n维点类型扩展机制,能够更好的发挥PCL库的点云处理性能。文件格式有文本和二进制两种格式。
pcd格式具有文件头,用于描绘点云的整体信息。数据本体部分由点的笛卡尔坐标构成,文本模式下以空格做分隔符。
示例:
# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F FFF
COUNT 1 1 1 1
WIDTH 213
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 213
DATA ascii
0.93773 0.33763 0 4.2108e+06
0.90805 0.35641 0 4.2108e+06
除了PCL库之外,MatLab也可以通过pcread函数直接载入该格式。
参考资料:
http://www.pclcn.org/study/shownews.php?lang=cn&id=54
*.ply
一种由斯坦福大学的Turk等人设计开发的多边形文件格式,因而也被成为斯坦福三角格式。文件格式有文本和二进制两种格式。
典型的PLY对象定义仅仅是顶点的(x,y,z)三元组列表和由顶点列表中的索引描述的面的列表。
文件结构如下:
· Header (头部)
· Vertex List (顶点列表)
· Face List (面列表)
· (lists of other elements) (其它元素列表)
示例:
ply
format ascii1.0 { ascii/binary, formatversion number }
comment made byGreg Turk { comments keyword specified,like all lines }
comment thisfile is a cube
element vertex8 { define "vertex"element, 8 of them in file }
property floatx { vertex contains float"x" coordinate }
property floaty { y coordinate is also avertex property }
property floatz { z coordinate, too }
element face6 { there are 6"face" elements in the file }
property listuchar int vertex_index { "vertex_indices" is a list of ints }
end_header { delimits the end of theheader }
0 0 0 { start of vertex list }
0 0 1
0 1 1
0 1 0
1 0 0
1 0 1
1 1 1
1 1 0
4 0 1 2 3 { start of face list }
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
MatLab也可以通过pcread函数直接载入该格式。
参考资料:
http://paulbourke.net/dataformats/ply/
https://blog.csdn.net/lafengxiaoyu/article/details/72871570
*.pts
被称之为最简便的点云格式,属于文本格式。只包含点坐标信息,按X Y Z顺序存储,数字之间用空格间隔。
示例:
0.780933-45.9836 -2.47675
4.75189 -38.1508 -4.34072
7.16471 -35.9699 -3.60734
9.12254 -46.1688 -8.60547
15.4418 -46.1823 -9.14635
2.83145 -52.2864 -7.27532
0.160988 -53.076 -5.00516
参考资料:
https://blog.csdn.net/billbliss/article/details/47066339
*.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 ∥整个文件结束
二进制STL文件用固定的字节数来给出三角面片的几何信息。
l 80字节:文件头,放任何文字信息
l 4字节:三角面片个数
l 每50字节:一个三角面
Ø 3 x 4字节:法向量浮点数
Ø 3 x 4 x 3 字节:三个顶点坐标
Ø 最后2个字节:预留位
参考资料:
https://baike.baidu.com/item/stl%E6%A0%BC%E5%BC%8F/3511640?fr=aladdin
https://blog.csdn.net/bcbobo21cn/article/details/53863531
https://baike.baidu.com/item/STL/7899225
*.xyz
一种文本格式,前面3个数字表示点坐标,后面3个数字是点的法向量,数字间以空格分隔。
示例:
0.031822 0.0158355-0.047992 0.000403 -0.0620185 -0.005498
-0.002863 -0.0600555-0.009567 -0.001945 -0.0412555 -0.001349
-0.001867 -0.0423475-0.0019 0.002323 -0.0617885 -0.00364
二、点云文件格式的软件支持
以CloudCompare2.9.1为例,该软件支持的输入文件格式如下:
其中,标黄的格式均为上面介绍的常见格式。可以看到,大部分常见格式均点云软件支持和实现。
文件格式 |
文件名 |
*.asc |
ASCII cloud |
*.csv |
ASCII cloud |
*.neu |
ASCII cloud |
*.pts |
ASCII cloud |
*.txt |
ASCII cloud |
*.xyz |
ASCII cloud |
*.bin |
CloudCompare entities |
*.icm |
Clouds + calibrated imaged |
*.pov |
Clouds + sensor info. |
*.csv |
CSV matrix cloud |
*.dp |
DotProduct cloud |
*.dxf |
DXF geometry |
*.e57 |
E57 cloud |
*.fbx |
FBX mesh |
*.las |
LAS cloud |
*.laz |
LAS cloud |
*.soi |
Mensi Soisic cloud |
*.obj |
OBJ mesh |
*.off |
OFF mesh |
*.mac |
PDMS primitives |
*.pdms |
PDMS primitives |
*.pdmsmac |
PDMS primitives |
*.psz |
Photoscan project |
*.ply |
PLY mesh |
*.pcd |
Point Cloud Library cloud |
*.pn |
Point+Normal cloud |
*.pv |
Point+Value cloud |
*.ptx |
PTX cloud |
*.* |
RASTER grid |
*.rdb |
Riegl files |
*.rds |
Riegl files |
*.rdbx |
Riegl RDB 2 loader |
*.poly |
Salome Hydro polylines |
*.shp |
SHP entity |
*.sx |
Sinusx curve |
*.out |
Snavely's Bundler output |
*.stl |
STL mesh |
*.vtk |
VTK cloud or mesh |
其中,标黄的格式均为上面介绍的常见格式。可以看到,大部分常见格式均点云软件支持和实现。
CloudCompare官网地址:
http://www.cloudcompare.org/
小结
处理点云的软件和其它点云格式还有很多。对于常见的几种文本格式,本篇只给出了简单介绍,意在助力不熟悉的读者快速了解点云存储格式的概貌。
在定义自己项目的点云文件存储格式之前,可以先了解一下有的文件格式形式。选择合适的通用格式可以更好地与其它工具乃至其它组织对接,进而提高工作效率。
END
注意