はじめに
前回の記事では、3Dソフトで点群データを確認できる形式のメッシュデータを作成しました。
今回は、実際に Blender 上で表示してみます。併せて、Python プログラム上で Open3D ライブラリを使用して点群データを表示します。
前提条件
前提条件は以下の通りです。
- pyrealsense2
- OpenCV ==4.6.0
- Python == 3.9.13
- Windows11
- open3D = 0.16.0
- 前回作成した点群データ “output2.ply”
Blender のインストール
Blender のインストーラはこちらからダウンロードできます。
使用するOSはWindowsで、Installer を選択してください。 .msi ファイルがダウンロードされます。

インストーラを実行して、インストールが完了したら、Blender を起動してください。

最初に Quick Setup の画面が表示されますが、こだわりがなければそのまま “Next” をクリックしてください。
Blender で点群データの表示
次に、以下の画像のように、File > Import > Stanford(.ply) を選択してください。

以下のようにグレーの物体が表示されます。

参考までに、前回出力した 3Dモデルを表示しておきます。

形状は大体あっていますね。色情報が保存されておらず、グレー表示となっています。
Open3D で点群データの表示
続いて、Python から Open3D ライブラリを呼び出して点群データを表示します。
コードは、以下となります。
import numpy as np
import open3d as o3d
pcd = o3d.io.read_point_cloud("output2.ply")
print(pcd)
np_pcd = np.asarray(pcd.points)
print(np_pcd, np_pcd.shape)
o3d.visualization.draw_geometries([pcd])
これだけです。非常に簡単です。
コードを順に説明していきます。
pcd = o3d.io.read_point_cloud("output2.ply")
o3d.io.read_point_clound() で output2.ply を読込みます。
返り値は open3d.geometry.PointCloud のタイプとなります。
公式サイトの説明はこちらにあります。
print(pcd)
np_pcd = np.asarray(pcd.points)
print(np_pcd, np_pcd.shape)
open3d.geometry.PointCloud のタイプは、np.asarray() で numpy タイプに変換可能です。
o3d.visualization.draw_geometries([pcd])
o3d.visualization.draw_geometries() は、cv2.imshow() のように、3Dモデルを window上に 表示します。
o3d.visualization.draw_geometries の説明はこちらにあります。
上記プログラムを実行すると、以下の出力が得られます。

複数の点群データを表示
先ほど、window上への描画関数について説明しました。
o3d.visualization.draw_geometries([pcd])
読み込んだ pcd をリスト形式で渡していますね。
そうなんです、複数同時に表示することも可能です。
今回は少しだけずらした output.ply を用意しました。
import numpy as np
import open3d as o3d
pcd1 = o3d.io.read_point_cloud("output2.ply")
pcd2 = o3d.io.read_point_cloud("output.ply")
print(pcd1)
np_pcd = np.asarray(pcd1.points)
print(np_pcd, np_pcd.shape)
o3d.visualization.draw_geometries([pcd1, pcd2])
以下の出力が得られます。

撮影した realsense の位置が違うので、点群データもその分ずれます。
同じ位置から撮影すればうまく重なると思います。
おわりに
今回は Open3D で作成した点群データを Blender と Open3D それぞれで表示しました。
複数の点群データを一つの window上に 表示することも可能です。
もちろん、realsense の撮影位置が異なるので表示はずれています。
次回は、この複数の点群データを合成して、一つの点群データにします。
ずれている点群データを位置合わせする方法について説明します。
コメント