概要
本記事では、Blenderなどで作成したモデルを、トポロジーデータ解析などに使われるポイントクラウドデータに変換する方法を示す。pythonでポイントクラウドを扱うことは少ないが、トポロジーデータ解析など解析分野で良いライブラリがあるので、解析用途で使用することがある。
その解析にobjデータを使う際、open3Dで読み込み、ポイントクラウドに変換する必要があるため、記載する。
少し調べたら出てきたので、忘備録用。
open3d
ポイントクラウドのデータを解析するライブラリ。基本的には、ポイントクラウドのマッチングや異常値の解析ができる。Depth情報を含むRGBDデータからポイントクラウド群の構築も可能。
objデータの変換
ポイントクラウド(ply)形式でデータが配布されるのは稀で、3Dモデルはobj,fbxなどの形式で読み込まれる。そのため、以下のプログラムのようにobjデータのvertices(頂点)のみ取り出し、メッシュ情報を除去することで、ポイントクラウドに変換可能。
import open3d as o3d
import numpy as np
def obj_mesh(path):
return o3d.io.read_triangle_mesh(path)
def draw_mesh(mesh):
mesh.paint_uniform_color([1., 0., 0.])
mesh.compute_vertex_normals()
o3d.visualization.draw_geometries([mesh])
def mesh2ply(mesh):
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(np.asarray(mesh.vertices))
return pcd
if __name__ == "__main__":
path = "/Users/washizakikai/data/obj3d/IronMan.obj"
mesh = obj_mesh(path)
pcd = mesh2ply(mesh)