PLY 形式
Version 1.0 の PLY 形式は、Stanford 三角形式とも呼ばれ、3 次元データを保存するための柔軟で組織的なスキームを定義します。ASCII ヘッダーには、それぞれ一連の "プロパティ" をもつ "要素" を定義して、ファイルにどのようなデータが含まれるかを指定します。多くの PLY ファイルには頂点と面のデータしか含まれませんが、色情報、頂点の法線、アプリケーション固有のプロパティなど、その他のデータを含めることも可能です。
メモ
Computer Vision 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 <データ型> <プロパティ名> |
<データ型> には次のいずれかを指定します。
| Name | 型 |
|---|---|
| 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" が指定されています。
|
|
|
|
|
|
| ... |
|
|
|
通常、各要素のプロパティ データは一度に 1 つの要素に対して保存されます。
<property 1> <property 2> ... <property N> element[1] |
<property 1> <property 2> ... <property N> element[2] |
... |
リスト タイプのプロパティでは、最初にカウントが保存され、その後にスカラーの一覧が続きます。たとえば、要素型 "face" にリスト プロパティ "vertex_indices" があり、uchar 型のカウントと int 型のスカラーが指定されています。
|
|
|
|
| ... |
|
|
|
|
|
| ... |
|
| ... |
共通の要素とプロパティ
PLY 形式には柔軟性があり、多くのタイプの要素とプロパティを定義できる一方で、プログラム間で一連の共通の要素を認識できるように、共通の 3 次元データ型をやり取りできるようになっています。Turk 氏は、プログラムで標準とするべき要素とプロパティの名前を示しています。
| 必須コア プロパティ | 要素 | Property | データ型 | プロパティの説明 |
|---|---|---|---|---|
| ✓ | vertex | x | float | x、y、z 座標 |
| ✓ | y | float | ||
| ✓ | z | float | ||
| nx | float | 法線の x、y、z | ||
| ny | float | |||
| nz | float | |||
| red | uchar | 頂点の色 | ||
| green | uchar | |||
| blue | uchar | |||
| alpha | uchar | 透明度 | ||
| material_index | int | 材料のリストのインデックス | ||
| face | vertex_indices | int のリスト | 頂点のインデックス | |
| back_red | uchar | 背面色 | ||
| back_green | uchar | |||
| back_blue | uchar | |||
| edge | vertex1 | int | 頂点のインデックス | |
| vertex2 | int | 他の頂点のインデックス | ||
| crease_tag | uchar | サブ分割面の折り目 | ||
| material | red | uchar | 材料の色 | |
| green | uchar | |||
| blue | uchar | |||
| alpha | uchar | 透明度 | ||
| reflect_coeff | float | 反射光の量 | ||
| refract_coeff | float | 屈折光の量 | ||
| refract_index | float | 屈折のインデックス | ||
| extinct_coeff | float | 吸光係数 |