※当サイトはPRを含みます

【Python】Open3Dで点群データを読み込んで表示

2023年8月30日

はじめに

Pythonの点群処理ライブラリ「Open3D」を用いて、点群ファイルを読み込みと可視化をしたいと思います。

公式のドキュメントはこちら
http://www.open3d.org/docs/release/tutorial/geometry/file_io.html

その他ライブラリで可視化する方法も下記にまとめています。

Open3Dで扱う点群ファイルのフォーマット

フォーマット説明
xyz [x, y, z]が各行に格納されている。x,y,zは位置を表す3次元座標
xyzn[x, y, z, nx, ny, nz]が各行に格納されている。nxnynzは法線ベクトル
xyzrgbEach line contains [x, y, z, r, g, b]が各行に格納されている。rgbは0~1のfloat
pts最初の行は点の数を表す整数。後続の行は、下記ののいずれかに従う。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

おすすめ参考書