[Software Tips] plyファイル(3次元モデリングファイル)の読み方、書き方

最終更新日:2022年9月14日(初版作成日:2021年8月2日)

plyファイルとは

拡張子”.ply”は、polygon(多角形)の略であり、多量の多角形を使って立体を表現している。 正式には、Polygon File Formatもしくは、Standord Trigngle Formatと言う。 PLY(ファイル形式) on Wikipedia

plyフォーマット

plyフォーマットは、ヘッダデータに分かれており、データ部分はテキストデータ、バイナリーデータを選択できる。 変換ソフトウェア( Meshlab など)を使用することで、データ部分を交互に変換できる。 実際にplyファイルをテキストエディタで見ると分かりやすいので、以下で Realsense ViewerIntel RealSenseのViewer) で生成されたplyファイルを見てみる。

“sample.ply”をテキストエディタで開くと、

サンプルデータ ©SKラボラ

上記の”ply”から”end_header”までが、ヘッダで、それ以降、鳴門マークになっているのがバイナリーデータ部分である。 バイナリーデータは直接読むことはできないが、 Meshlab で読み込んで、再度保存するときにバイナリーパラメータを解除すること(下図の赤丸)で、テキストデータとして確認できる。

画像引用元:MeshLab

再度保存したデータをテキストエディタで開くとデータを参照できる(”…”は、省略)。

サンプロデータ ©SKラボラ

plyファイルの読み方

plyファイルは、基本的にはヘッダ頂点情報(点群)とその頂点を使用した面情報からできている。 前段の行番号付きのplyデータを、1行づつ読んでいく。

まず、1行目は、plyファイルであるという識別子”ply”
2行目は、データの”format”。テキストに変換されているので、”ascii 1.0″(データ部をテキストに変換する前の”format”は、バイナリーデータなので、”binary_little_endian 1.0″)
備考)ビックエンディアンの場合、”binary_big_endian 1.0″
3行目は、”comment”文、VCGLIB(Meshlabの)で生成されたというコメント(何もしない行、コメント文を追加して自由に情報を追加できる
4行目から13行目は、データの構成
4行目、頂点(”vertex”)は、149763個
5〜11行目、頂点には次の特徴量がある、x, y, z, red, green, bule, alpha
12行目、面(”face”)は、291156個
13行目、面は、頂点の個数と頂点の番号のリストからなる
14行目、ヘッダの終わり
15〜17行目、x, y, z, red, green, blue, alpha、が149763行続く
20〜22行目、頂点個数(つまり三角形)、使用頂点の通し番号、が291156行続く

備考1.)他のパラメータは、 参考 4. PLY 形式(MathWorks) を参照。

備考2.)plyファイル自体は、長さの単位の情報は持たない。 長さの単位は使用者が決めるため、カメラ等での実際の距離測定の場合は、注意が必要(以下はIntel RealSenseの場合)。
参考)3. How do I get Real Distance of Objects Using .ply Files with Intel® RealSense™ D400 Cameras?

plyファイルの書き方

plyファイルの読み方が分かったところで、豆腐のplyファイルを生成してみる。
平たい長方形なので、頂点は8点、面は6面。
(x, y, z) = (0, 0, 0)を0番目の点として、x方向(画面横)に2、y方向(画面縦)に0.5、z方向(画面奥行き)に1の長方形を作る。

直方体 ©SKラボラ

まず1行目には、”ply”
手で入力していくのでテキストデータにする、“format ascii 1.0”
頂点は8個なので、“element vertex 8”
特徴量はx,y,z、“property float x”, “property float y”, “property float z”
面は6面なので、“element face 6”
頂点のリストフォーマットは、“property list uchar int vertex_indices”
で、最後に、“end_header”
上図に合わせてまず、0番の点座標を入力、“0 0 0”
上図に合わせてまず、1番の点座標を入力、“0 1 0”
…以下7番まで同様に続く
上図に合わせて面情報を入力、まず手前の面。頂点4個で、0 1 3 2で面を作るから、“4 0 1 3 2”
…以下6面分同様に続く

備考1)頂点の通し番号は、0から指定する。
備考2)多角形は、三角形でなくとも良い。
まとめると、以下のようになる。

ply
format ascii 1.0
element vertex 8
property float x
property float y
property float z
element face 6
property list uchar int vertex_indices
end_header
0 0 0
0 0.5 0
2 0 0
2 0.5 0
0 0 1
0 0.5 1
2 0 1
2 0.5 1
4 0 1 3 2
4 3 7 6 2
4 7 6 4 5
4 5 4 0 1
4 1 3 7 5
4 0 2 6 4
直方体 ©SKラボラ

豆腐を車庫に改造してみる。以下は、手前の面と奥の面と底面を抜くplyファイルの記述である。
具体的には、“element face 6”“element face 3”にして、手前、奥、底面の面情報を削除する。

ply
format ascii 1.0
element vertex 8
property float x
property float y
property float z
element face 3
property list uchar int vertex_indices
end_header
0 0 0
0 0.5 0
2 0 0
2 0.5 0
0 0 1
0 0.5 1
2 0 1
2 0.5 1
4 3 7 6 2
4 5 4 0 1
4 1 3 7 5
駐車場型 ©SKラボラ

参考

1. The Stanford 3D Scanning Repository
2. PLY – Polygon File Format
3. How do I get Real Distance of Objects Using .ply Files with Intel® RealSense™ D400 Cameras?
4. PLY 形式(MathWorks)
5. ポリゴンレンダラ-その14(腰も砕けよ 膝も折れよ)

改訂履歴

2022年09月14日:体裁調整
2022年07月23日:WordPress用に色変更
2021年11月23日:体裁修正

タイトルとURLをコピーしました