点云学习笔记
参考:
点云ply格式文件详解_weixin_44324586的博客-CSDN博客
点云格式介绍(二)_点云数据格式_Coding的叶子的博客-CSDN博客
目录
PLY文件格式是Stanford大学开发的一套三维mesh模型数据格式,图形学领域内非常多著名的模型数据,比方Stanford的三维扫描数据库(当中包含非常多文章中会见到的Happy Buddha, Dragon, Bunny兔子),Geogia Tech的大型几何模型库。北卡(UNC)的电厂模型等,最初的模型都是基于这个格式的。
PLY多边形文件格式的开发目标是建立一套针对多边形模型的,结构简单可是可以满足大多数图形应用须要的模型格式,并且它同意以ASCII码格式或二进制形式存储文件。PLY的开发人员希望。这样一套既简单又灵活的文件格式,可以帮助开发人员避免反复开发文件格式的问题。然而因为各种各样的原因,在工业领域内,新的文件格式仍然在不断的出现,可是在图形学的研究领域中,PLY还是种经常使用且关键的文件格式。
PLY作为一种多边形模型数据格式,不同于三维引擎中经常使用的场景图文件格式和脚本文件。每一个PLY文件仅仅用于描写叙述一个多边形模型对象(Object),该模型对象能够通过诸如顶点、面等数据进行描写叙述,每一类这种数据被称作一种元素(Element)。相比于现代的三维引擎中所用到的各种复杂格式。PLY实在是种简单的不能再简单的文件格式,可是假设细致研究就会发现,就像设计者所说的,这对于绝大多数的图形应用来说已经是足够用了。
结构
PLY的文件结构简单:文件头+元素数据列表。当中文件头中以行为单位描写叙述文件类型、格式与版本号、元素类型、元素的属性等,然后就依据在文件头中所列出元素类型的顺序及其属性,依次记录各个元素的属性数据。
典型的PLY文件结构:
头部
顶点列表 Vertex List
面片列表 Face List
(其它元素列表)(lists of other elements)
点云组成可以是以下几种形式数据的排列组合。
(1)x、y、z:点云的空间坐标。
(2)i:强度值,强度反应了点的密集成度。
(3)r、g、b:rgb色彩信息。
(4)a:a代表alpha(透明度)。
(5)nx、ny、nz:n代表Normal,点云的法向量。
头部
头部是一系列以回车结尾的文本行。用来描写叙述文件的剩余部分。如:
ply
format ascii 1.0 { ascii/binary, format version number }
comment Created by Blender 2.77 (sub 0) - www.blender.org, source file: '' { comments keyword specified, like all lines }
element vertex 35034 {定义“vertex”(顶点)元素,在文件里有35034个}
property float x {顶点的第一个元素x,浮点型}
property float y {顶点的第一个元素y,浮点型}
property float z {顶点的第一个元素z,浮点型}
property float nx {n代表Normal,点云的法向量}
property float ny {同上}
property float nz {同上}
property uchar red {顶点颜色r}
property uchar green {顶点颜色G}
property uchar blue {顶点颜色B}
element face 11678 {有11678个face,下面是property对应面的组成}
property list uchar uint vertex_indices { “vertex_indices”(顶点素引)是一列整数 "vertex_indices" is a list of ints }
end_header { 划定头部结尾 }
在“element”行之后列出的属性定义了属性的数据类型,以及每个元素的属性出现的顺序。
element <元素名> <在文件里的个数>
property <数据类型> <属性名-1>
property <数据类型> <属性名-2>
property <数据类型> <属性名-3>
属性可以具有两种数据类型:标量、字符串和列表。其中字节数非常重要,并且在实现过程中不能改动以使这些文件可移植。
名称 类型 字节数
-------------------------------
int8 字符 1
uint8 非负字符 1
int16 短整型 2
uint16 非负短整型 2
int32 整型 4
uint32 非负整型 4
float32 单精度浮点数 4
float64 双精度浮点数 8
Vertex List
上述例子中没出现的几个元素,在这里记录一下,万一以后遇到
property float confidence #置信度,浮点型
property float intensity #强度(反应了点的密集程度),浮点型
property float alpha #透明度,浮点型
继续上述例子
- 17~35050行都是Vertex List的内容(35050-17+1=35034,与在头部中定义的顶点元素数目相同)
- vertex list有9列(每行有9个元素),分别是x,y,z,nx,ny,nz,red,green,blue
Face List
继续上述例子
- 35051~46728行都是Vertex List的内容(46728-35051+1=11678,与在头部中定义的face数目相同)
- vertex list有4列(每行有9个元素),倒数3个是vertex list中的索引
读文件
import plyfile
plydata = plyfile.PlyData.read(f)
print(plydata)#头文件
print(plydata.elements[0].data[0])#第一行点
print(plydata.['vertex'])#头文件
print(plydata['vertex'].data[0])#第一行点
print("type:",type(plydata.elements[0].data))#点的数据类型
pc = plydata['vertex'].data
pc_array = np.array([[x, y, z, nx, ny, nz, r, g, b] for x, y, z, nx, ny, nz, r, g, b in pc])#此处矩阵的所有参数都必须被拉出来,参数数量查看头文件
参考:
点云ply格式文件详解_weixin_44324586的博客-CSDN博客