Open3Dで線分を描画してみた[open3d.geometry.LineSet()]

三次元点群処理

Open3Dを使用した線分を描画するためには、線分(ワイヤーフレーム)を扱うためのクラスである、open3d.geometry.LineSet()を使用します。

点(points)と線(lines)の情報を指定して3Dオブジェクトを可視化できます。

以下、基本的な使い方を例題を交えて説明します。

open3d.geometry.LineSet() の基本

open3d.geometry.LineSet() は、以下の2つの属性(property)を持っています:

  • points:線分の頂点座標を格納する numpy 配列
  • lines:頂点インデックスのペア([start, end])のリスト

さらに、オプションとして colors を指定すると、線の色を設定できます。

例題:三角形のワイヤーフレームを描画する

サンプルコード

import open3d as o3d
import numpy as np

# 頂点の定義(3点)
points = np.array([
[0, 0, 0], # 点0
[1, 0, 0], # 点1
[0.5, 1, 0] # 点2
], dtype=np.float64)

# 線の定義(3本の線)
lines = np.array([
[0, 1], # 点0 → 点1
[1, 2], # 点1 → 点2
[2, 0] # 点2 → 点0
])

# 線の色(オプション、すべて赤色)
colors = np.array([
[1, 0, 0], # 赤
[1, 0, 0], # 赤
[1, 0, 0] # 赤
])

# LineSet オブジェクトを作成
line_set = o3d.geometry.LineSet()
line_set.points = o3d.utility.Vector3dVector(points) # 頂点を設定
line_set.lines = o3d.utility.Vector2iVector(lines) # 線を設定
line_set.colors = o3d.utility.Vector3dVector(colors) # 色を設定

# 表示
o3d.visualization.draw_geometries([line_set])

以下が、サンプルコードにて描画される三角形です。

左下が[0,0,0]、右下が[1,0,0]、上が[0.5, 1, 0]であり、XY平面に位置しています。

解説

  • points:3つの頂点座標を numpy 配列で指定。
  • lines:各線分を始点・終点のインデックスで指定。
  • colors:線ごとの色を指定(RGB 形式)。
  • o3d.geometry.LineSet() を作成し、pointslinescolors を設定して描画。

まとめ

本記事では、open3d.geometry.LineSet()による線分の描画方法を、簡単な例題を交えて解説しました。

私が線分描画方法を学習・調査した理由は、同次変換の記事作成の際に「本当に移動・回転したかわからないから各軸にスケール描画したい」という発想から始まりました。以下の記事ものぞいていただけましたら幸いです(後日執筆予定)。

三次元点群処理は二次元の画像処理よりも情報が少なく、手探りで書籍や論文、公式ドキュメントを調査する日々です。

その中で、導入しやすいPythonとOpen3Dで三次元点群処理を体系的にまとめた書籍が以下になります。現在数少ない三次元点群処理の書籍ですので私も重宝しています。是非参考にしてみてください。

また、Open3Dによる三次元点群処理の全体像をまとめた記事を執筆しましたのでご参考にどうぞ。

参考

open3d.geometry.LineSet

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