Python/Open3Dで点群データのダウンサンプリング

Open3Dの使い方
https://tech-deliberate-jiro.com/downsampling-grid/


Stanford bunnyのダウンロード
使うのは bunny/reconstruction/bun_zipper.ply
graphics.stanford.edu

import open3d as o3d
import numpy as np
import plotly.graph_objects as go

print("Load a ply point cloud, print it, and render it")
f = './bun_zipper.ply'
pcd = o3d.io.read_point_cloud(f)
points = np.asarray(pcd.points)

pcd1 =pcd.voxel_down_sample(voxel_size=0.00818)
points1 = np.asarray(pcd1.points)

pcd2 =pcd.voxel_down_sample(voxel_size=0.01818)
points2 = np.asarray(pcd2.points)

pcd3 =pcd.voxel_down_sample(voxel_size=0.02818)
points3 = np.asarray(pcd3.points)

print(pcd)
print(pcd1)
print(pcd2)
print(pcd3)

fig = go.Figure(
  data=[
    go.Scatter3d(
      x=points[:,0], y=points[:,1], z=points[:,2],
      mode='markers',
      marker=dict(size=2, color=colors)
)
],
  layout=dict(
    scene=dict(
      xaxis=dict(visible=False),
      yaxis=dict(visible=False),
      zaxis=dict(visible=False)
)
)
)

fig1 = go.Figure(
  data=[
    go.Scatter3d(
      x=points1[:,0], y=points1[:,1], z=points1[:,2],
      mode='markers',
      marker=dict(size=2, color=colors)
)
],
  layout=dict(
    scene=dict(
      xaxis=dict(visible=False),
      yaxis=dict(visible=False),
      zaxis=dict(visible=False)
)
)
)

fig2 = go.Figure(
  data=[
    go.Scatter3d(
      x=points2[:,0], y=points2[:,1], z=points2[:,2],
      mode='markers',
      marker=dict(size=2, color=colors)
)
],
  layout=dict(
    scene=dict(
      xaxis=dict(visible=False),
      yaxis=dict(visible=False),
      zaxis=dict(visible=False)
)
)
)

fig3 = go.Figure(
  data=[
    go.Scatter3d(
      x=points3[:,0], y=points3[:,1], z=points3[:,2],
      mode='markers',
      marker=dict(size=2, color=colors)
)
],
  layout=dict(
    scene=dict(
      xaxis=dict(visible=False),
      yaxis=dict(visible=False),
      zaxis=dict(visible=False)
)
)
)

fig.show()
fig1.show()
fig2.show()
fig3.show()
Load a ply point cloud, print it, and render it
PointCloud with 35947 points.
PointCloud with 1178 points.
PointCloud with 241 points.
PointCloud with 96 points.

35497点

1178点

241点

96点