【Windows11】Python + RealSenseD435 + Open3D + Blender で点群データの表示

Python
スポンサーリンク

スポンサーリンク

はじめに

前回の記事では、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 の撮影位置が異なるので表示はずれています。

次回は、この複数の点群データを合成して、一つの点群データにします。
ずれている点群データを位置合わせする方法について説明します。

コメント

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