16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Open3Dの使い方:自分で点群を生成

Last updated at Posted at 2018-03-21

pythonで点群処理できるOpen3Dの探検.Open3Dの使い方:読み込みと表示,点と法線の取得の続き.

点群のコンストラクタはpy3d.PointCloud().コピーコンストラクタしかないようなので,空で生成しておいて後から.points追加.するとhas_points()も自動的に更新される.

コード

open3d
import sys
sys.path.append("../..") # Open3D/build/lib/ へのパス
import numpy as np
import py3d

# 球状の点群を生成
## 面倒なので立方体中にランダムな点を作ってL2ノルムで正規化.よい子は真似しない
sphere = np.random.rand(10000, 3) - np.array([0.5, 0.5, 0.5])
sphere /= np.linalg.norm(sphere, axis=1, keepdims=True)


pcd = py3d.PointCloud() # コンストラクタ
print("has points?", pcd.has_points()) # ここではFalse
pcd.points = py3d.Vector3dVector(sphere)
print("has points?", pcd.has_points()) # ここでTrueになってる
py3d.draw_geometries([pcd], "sphere points", 640, 480)

print("has color?", pcd.has_colors()) # ここではFalse
pcd.colors = py3d.Vector3dVector(np.random.rand(10000, 3))
print("has color?", pcd.has_colors()) # ここでTrueになってる
py3d.draw_geometries([pcd], "sphere points with random colors", 640, 480)

print("has normals?", pcd.has_normals()) # ここではFalse
py3d.estimate_normals(pcd, search_param = py3d.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))
print("has normals?", pcd.has_normals()) # ここでTrueになってる
py3d.draw_geometries([pcd], "sphere points with normals", 640, 480)

結果

結果
has points? False
has points? True
has color? False
has color? True
has normals? False
has normals? True

点を生成
スクリーンショット 2018-03-21 21.43.36.png

ランダムに色をつけた
スクリーンショット 2018-03-21 21.43.44.png

法線を計算するとシェーディングされる
スクリーンショット 2018-03-21 21.43.52.png

16
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?