【Python】Open3Dで点群データを読み込んで表示
目次- 1. はじめに
- 2. Open3Dで扱う点群ファイルのフォーマット
- 3. プログラム
- 3.1. 可視化結果
- 3.2. ptsファイルの確認
- 4. おすすめ参考書
はじめに
Pythonの点群処理ライブラリ「Open3D」を用いて、点群ファイルを読み込みと可視化をしたいと思います。
公式のドキュメントはこちらhttp://www.open3d.org/docs/release/tutorial/geometry/file_io.html
その他ライブラリで可視化する方法も下記にまとめています。
【3D点群処理】Pythonで点群を3次元プロットして可視化する方法4選Open3Dで扱う点群ファイルのフォーマット
フォーマット説明xyz [x, y, z]が各行に格納されている。x,y,zは位置を表す3次元座標xyzn[x, y, z, nx, ny, nz]が各行に格納されている。nx, ny, nzは法線ベクトルxyzrgbEach line contains [x, y, z, r, g, b]が各行に格納されている。r, g, bは0~1のfloatpts最初の行は点の数を表す整数。後続の行は、下記ののいずれかに従う。formats: [x, y, z, i, r, g, b], [x, y, z, r, g, b], [x, y, z, i] , [x, y, z]plyPolygon File Formatを参照。 plyファイルは点群だけでなくメッシュも格納できる。pcdPoint Cloud Dataを参照プログラム
bunnyの点群データで試してみます。プログラムは以下の処理をしています。
「xyz」ファイル読み込み→可視化→「pts」ファイルで保存
import open3d as o3d print("Testing IO for point cloud ...") # Load saved point cloud and visualize it pcd_load = o3d.io.read_point_cloud("bunny.xyz") # Visualization in window o3d.visualization.draw_geometries([pcd_load]) # Saving point cloud o3d.io.write_point_cloud("bunny.pts", pcd_load)読み込む"bunny.xyz"ファイルの中は各行に[x y z]が格納されています。
-0.0378290000 0.1279400000 0.0044740000 -0.0447790000 0.1288870000 0.0019040000 -0.0680090000 0.1512440000 0.0371950000 -0.0022870000 0.1301500000 0.0232200000 -0.0226050000 0.1266750000 0.0071550000 ... 可視化結果 ptsファイルの確認新たに保存された"bunny.pts"ファイルの中は先頭行にデータ数、それ以降の行に[x y z]が格納されていることが確認できます。
30571 -0.0378290000 0.1279400000 0.0044740000 -0.0447790000 0.1288870000 0.0019040000 -0.0680090000 0.1512440000 0.0371950000 -0.0022870000 0.1301500000 0.0232200000 -0.0226050000 0.1266750000 0.0071550000