石鑫华视觉 手机微信QQ:13450001061

视觉技术

PLY

文章来源:石鑫华视觉网时间:2022-08-24 11:15:22 点击:281

PLY

石鑫华机器视觉网:PLY 是一种电脑档案格式,全名为 多边形档案(Polygon File Format  史丹佛三角形档案(Stanford Triangle Format

image.png

史丹佛大学的  The Digital Michelangelo Project 计划采用 PLY 格式储存极高分辨率之 米开朗基罗 的作品 "大卫" 雕塑。

该格式主要用以储存立体扫描结果的三维数值,透过多边形片面的集合描述三维物体,与其他格式相较之下这是较为简单的方法。它可以储存的资讯包含颜色、透明度、表面法向量、材质坐标与资料可信度,并能对多边形的正反两面设定不同的属性。

在档案内容的储存上 PLY 有两种版本,分别是纯文字(ASCII)版本与二元码(binary)版本,其差异在储存时是否以 ASCII 编码表示元素资讯。

档案格式

每个 PLY 档都包含档头(header),用以设定网格模型的元素属性,以及在档头下方接着一连串的元素数值资料。一般而言,网格模型的元素就是顶点(vertices)、面(faces),另外还可能包含有边(edges)、深度图样本(samples of range maps)与三角带(triangle strips)等元素。无论是纯文字与二元码的 PLY 档,档头资讯都是以 ASCII 编码编写,接续其后的数值资料才有编码之分。PLY 档案以此行:

 ply

开头作为 PLY 格式的识别。接着第二行是版本资讯,目前有三种写法:

 format ascii 1.0

 format binary_little_endian 1.0

 format binary_big_endian 1.0

其中 ascii, binary_little_endian, binary_big_endian 是档案储存的编码方式,而 1.0 是遵循的标准版本(现阶段仅有 PLY 1.0 版)。在档头中可使用 'comment' 作为一行的开头以编写注解,例如:

 comment This is a comment!

描述元素及属性,必须使用 'element' 'property' 的关键字,一般的格式为 element 下方接着属性列表,例如:

 element <element name> <number in file>

 property <data_type> <property name 1>

 property <data_type> <property name 2>

 property <data_type> <property name 3> 

'property' 不仅定义了资料的型态,其出现顺序亦定义了资料的顺序。内定的资料形态有两种写法:一种是 char uchar short ushort int uint float double, 另外一种是具有位元长度的 int8 uint8 int16 uint16 int32 uint32 float32 float64 例如, 描述一个包含 12 顶点的物体,每个顶点使用 3 个单精度浮点数 (x,y,z) 代表点的座标, 使用 3 unsigned char 代表顶点颜色,颜色顺序为 (B, G, R), 则档头的写法为:

 element vertex 12

 property float x

 property float y

 property float z

 property uchar blue

 property uchar green

 property uchar red

其中 vertex 是内定的元素类型,接续的 6 property 描述构成 vertex 元素的数值字段顺序代表的意义,及其资料形态。

另一个常使用的元素是。由于一个面是由 3 个以上的顶点所组成,因此使用一个顶点列表即可描述一个面, PLY 格式使用一个特殊关键字 'property list' 定义之。 例如, 一个具有 10 个面的物体,其 PLY 档头可能包含:

 element face 10

 property list uchar int vertex_indices

'property list' 表示该元素 face 的特性是由一行的顶点列表来描述。列表开头以 uchar 型态的数值表示列表的项目数,后面接着资料型态为 int 的顶点索引值 (vertex_indices),顶点索引值从 0 开始。

最后,标头必须以此行结尾:

 end_header

档头后接着的是元素资料(端点坐标、拓扑连结等)。在 ASCII 格式中各个端点与面的资讯都是以独立的一行描述,而二元编码格式则连续储存这些资料,加载时须以 'element' 定义的元素数目以及 'property' 中设定的资料形态计算各笔字段的长度。

范例

一个典型的 PLY 档案结构分成三部分:

 檔頭 ( ply 開始到 end_header )

 頂點元素列表

 面元素列表

其中的 顶点元素列表 一般以 x y z 方式排列,形态如档头所定义;而 面元素列表 是以下列格式表示。

 <組成面的端點數 N> <端點#1的索引> <端點#2的索引> ... <端點#N的索引>

例如画出一个有 4 个顶点,4 个面的四面体,档案内容为:

 ply

 format ascii 1.0

 comment 這是一個正四面體

 element vertex 4

 property float x

 property float y

 property float z

 element face 4

 property list uchar int vertex_index

 end_header

 0 3 0

 2.449 -1.0 -1.414

 0 -1 2.828

 -2.449 -1.0 -1.414

 3 0 1 3

 3 0 2 1

 3 0 3 2

 3 1 2 3

其中 1~10 行是档头, 11~14 行是顶点元素列表, 15~18 行则是面元素列表 

历史

PLY 格式发展于 90年代中期,在史丹佛大学图学实验室的 Marc Levoy 教授指导下,由 Greg Turk 及其他成员开发出来。PLY 格式受 Wavefront .obj 格式的启发,但改进了 Obj 格式所缺少的对任意属性及群组的扩充性。因此 PLY 格式发明了 "property" "element" 这两个关键词,来概括顶点、面、相关资讯、群组的概念。

首页
84162741QQ
联系