【3D点群処理】Pythonで点群を3次元プロットして可視化する方法4選
はじめに
Pythonで3次元点群を表示する方法をいくつか紹介します。
今回使用するデータは、1000点からなる球の形をした点群です。
numpy配列でサイズ (1000,3) の test_dataを使って可視化していきます。
import numpy as np
import random
def get_ball(num_points,r):
point_cloud = []
for i in range(num_points):
t = random.random()
t = np.arcsin(1-2*t)
u= random.random() * 2 *np.pi-np.pi
x = np.cos(t)*np.cos(u)*r
y = np.cos(t)*np.sin(u)*r
z= np.sin(t)*r
point_cloud.append([x, y, z])
return np.array(point_cloud)
#点群作成
num_points=1000
r=0.5
test_data=get_ball(num_points,r)
matplotlib
matplotlibの3次元散布図プロットを使用します。
matplotlib はすでにインストールしている方も多いと思うので、既存のライブラリでサクッと3次元点群を表示したい方におすすめ。
インストールしていない方は下記を実行してインストールしてください。
pip install matplotlib
コード
import matplotlib.pyplot as plt
#点群作成
num_points=1000
r=0.5
test_data=get_ball(num_points,r)
# matplotlibで可視化
fig = plt.figure(figsize = (8, 8))
ax= fig.add_subplot(111, projection='3d')
ax.scatter(test_data[:,0],test_data[:,1],test_data[:,2], s = 1, c = "blue")
plt.show()
plotly
plotlyはJupyter notebookで実行するとインタラクティブに可視化することができます。
カーソル位置の座標を表示してくれたり、グラフィックがきれいで見やすいです。
基本的にサクサク動きますが、 大きいサイズ(10万点規模)の点群を表示しようとすると表示までに若干時間がかかります。
インストールしていない方は下記を実行してインストールしてください。
pip install plotly
ploty: https://plotly.com/python/line-and-scatter
コード
import plotly.express as px
#点群作成
num_points=1000
r=0.5
test_data=get_ball(num_points,r)
# plotlyで可視化
fig=px.scatter_3d( x=test_data[:,0],y=test_data[:,1], z=test_data[:,2])
fig.update_traces (marker={ 'size': 1})
fig.show()
Open3D
Open3Dを使って点群を表示します。Open3Dでは、numpy配列をOpen3Dのデータ構造に変換してから可視化します。
マウス操作で拡大や縮小、キーボード操作で色やマーカーのサイズを変えることもできます。
'h’キーを押すとヘルプが出てきます。
Open3dのドキュメント: http://www.open3d.org/docs/release/tutorial/geometry/file_io.html#Point-cloud
インストールしていない方は下記を実行してインストールしてくだい。
pip install open3d
コード
import open3d as o3d
#点群作成
num_points=1000
r=0.5
test_data=get_ball(num_points,r)
#numpy open3d に変換
pcd=o3d.geometry.PointCloud()
pcd.points = o3d. utility.Vector3dVector(test_data)
# Open3dで可視化
o3d.visualization.draw_geometries([pcd])
GoogleColabやJupyter noteookで可視化したい人は以下のように可視化。
Open3Dでplotlyの点群表示機能が使えるようになっています。
o3d.visualization.draw_plotly([pcd])
K3D
K3Dを使って点群を表示します。
K3DはJupyter notebook を拡張した3Dデータ可視化ライブラリです。
Jupyter notebookを使って大きいサイズの点群を解析する人におすすめです。
K3Dのドキュメント: https://k3d-jupyter.org
インストールしていない方は下記を実行してインストールしてください。
pip install k3d
コード
import k3d
#k3dで可視化
plot=k3d.plot(camera_auto_fit=True)
point_size=0.01
plot+=k3d.points(test_data[:,:3],point_size=point_size,shader="3d",color=0x0000ff)
plot.display()
ディスカッション
コメント一覧
まだ、コメントがありません