最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

PLY 形式

Version 1.0 の PLY 形式は、Stanford 三角形式とも呼ばれ、3 次元データを保存するための柔軟で組織的なスキームを定義します。ASCII ヘッダーには、それぞれ一連の "プロパティ" をもつ "要素" を定義して、ファイルにどのようなデータが含まれるかを指定します。多くの PLY ファイルには頂点と面のデータしか含まれませんが、色情報、頂点の法線、アプリケーション固有のプロパティなど、その他のデータを含めることも可能です。

メモ

Computer Vision System Toolbox™ の点群データ関数では、(x,y,z) 座標、法線および色のプロパティのみがサポートされます。

ファイル ヘッダー

ヘッダーの例を次に示します (右側のテキストはコメントです)。

ply

ファイル ID

format binary_big_endian 1.0

データの形式とバージョンを指定します

element vertex 9200

"vertex" 要素を定義します

property float x

 

property float y

 

property float z

 

element face 18000

"face" 要素を定義します

property list uchar int vertex_indices

 

end_header

この行の後からデータが始まります

ファイルは "ply" で始まっており、PLY ファイルであることを示しています。ヘッダーには、次の構文をもつ形式行も含めなければなりません。

format <データ形式> <PLY のバージョン>

サポートされるデータ形式は、"ascii" (テキストとして保存されるデータの場合)、"binary_little_endian" および "binary_big_endian" (バイナリ データの場合) です (リトル/ビッグ エンディアンは、マルチバイト データのバイト順を表します)。要素の定義は "element" 行で始まり、その後に要素プロパティの定義が続きます。

element <要素名> <ファイル内の数>

property <データ型> <プロパティ名 1>

property <データ型> <プロパティ名 2>

property <データ型> <プロパティ名 3>

...

たとえば、"element vertex 9200" は、要素 "vertex" を定義し、ファイルに 9200 個の頂点が保存されることを指定します。各要素の定義の後には、その要素のプロパティの一覧が続きます。プロパティには、スカラーとリストの 2 種類があります。スカラー プロパティの定義の構文は次のとおりです。

property <データ型> <プロパティ名>

<データ型> には次のいずれかを指定します。

名前
char(8 ビット) 文字
uchar(8 ビット) 符号なし文字
short(16 ビット) short 型整数
ushort(16 ビット) 符号なし short 型整数
int(32 ビット) 整数
uint(32 ビット) 符号なし整数
float(32 ビット) 単精度浮動小数点
double(64 ビット) 倍精度浮動小数点

システム間の互換性を維持するには、各データ型のビット数が一致しなければならないことに注意してください。リスト タイプでは、カウントが保存され、その後にスカラーの一覧が続きます。リスト プロパティの定義の構文は次のとおりです。

property list <カウントのデータ型> <データ型> <プロパティ名>

たとえば以下のようになります。

property list uchar int vertex_index

これにより、vertex_index プロパティでは、最初にバイト数、その後に整数値が保存されることが定義されます。この方法は、各面の頂点のインデックスが可変数でも指定できる柔軟性があるため、多角形の連結性を保存する場合に便利です。

ヘッダーにはコメントを含めることもできます。コメントの構文は 1 行のみで、"comment" で始まり、その後に 1 行のコメントが続きます。

comment <コメント テキスト>

コメントでは、ファイルの作成者、データの説明、データ ソース、その他のテキスト データなど、データに関する情報を提供できます。

データ

ヘッダーに続いて、要素データが ASCII データまたはバイナリ データのいずれか (ヘッダーの形式行で指定) で保存されます。ヘッダーの後には、要素とプロパティの定義順にデータが保存されます。まず、最初の要素型のすべてのデータが保存されます。例に挙げたヘッダーでは、最初の要素型は "vertex" で、ファイルに 9200 個の頂点が保存されることと、浮動小数点プロパティ "x"、"y" および "z" が指定されています。

float vertex[1].x

float vertex[1].y

float vertex[1].z

float vertex[2].x

float vertex[2].y

float vertex[2].z

...

float vertex[9200].x

float vertex[9200].y

float vertex[9200].z

通常、各要素のプロパティ データは一度に 1 つの要素に対して保存されます。

<property 1> <property 2> ... <property N> element[1]

<property 1> <property 2> ... <property N> element[2]

...

リスト タイプのプロパティでは、最初にカウントが保存され、その後にスカラーの一覧が続きます。たとえば、要素型 "face" にリスト プロパティ "vertex_indices" があり、uchar 型のカウントと int 型のスカラーが指定されています。

uchar count

int face[1].vertex_indices[1]

int face[1].vertex_indices[2]

int face[1].vertex_indices[3]

...

int face[1].vertex_indices[count]

uchar count

int face[2].vertex_indices[1]

int face[2].vertex_indices[2]

int face[2].vertex_indices[3]

...

int face[2].vertex_indices[count]

...

共通の要素とプロパティ

PLY 形式には柔軟性があり、多くのタイプの要素とプロパティを定義できる一方で、プログラム間で一連の共通の要素を認識できるように、共通の 3 次元データ型をやり取りできるようになっています。Turk 氏は、プログラムで標準とするべき要素とプロパティの名前を示しています。

必須コア プロパティ要素プロパティデータ型プロパティの説明
vertexxfloatx、y、z 座標
 yfloat 
 zfloat 
  nxfloat法線の x、y、z
  nyfloat 
  nzfloat 
  reduchar頂点の色
  greenuchar 
  blueuchar 
  alphauchar透明度
  material_indexint材料のリストのインデックス
facevertex_indicesint のリスト頂点のインデックス
  back_red uchar背面色
  back_greenuchar 
  back_blueuchar 
 edgevertex1int頂点のインデックス
  vertex2int他の頂点のインデックス
  crease_tagucharサブ分割面の折り目
 materialreduchar材料の色
  greenuchar 
  blueuchar 
  alphauchar透明度
  reflect_coefffloat反射光の量
  refract_coefffloat屈折光の量
  refract_indexfloat屈折のインデックス
  extinct_coefffloat吸光係数

参考

|