코드를 살펴보기 전 down-sampling과 up-sampling에 대한 이해가 필요하다고 생각해 아래 링크에 이에 대한 정리를 해보았다.
https://developer-ssooya.tistory.com/entry/up-sampling-and-down-sampling
import open3d as o3d
print("Load a ply point cloud")
ply_point_cloud = o3d.data.PLYPointCloud()
pcd = o3d.io.read_point_cloud(ply_point_cloud.path)
print("downsample the point cloud with a voxel of 0.05")
downpcd = pcd.voxel_down_sample(voxel_size=0.05)
o3d.visualization.draw_geometries(
[downpcd],
zoom=0.3412,
front=[0.4257, -0.2125, -0.8795],
lookat=[2.6172, 2.0475, 1.532],
up=[-0.0694, -0.9768, 0.2024]
)
여기서 voxel_size 매개변수 값을 0.05보다 작은 값인 0.01로 설정하였더니 형체를 더욱 뚜렷하게 알아볼 수 있게 되었다.
voxel_size를 작게 할 경우 더 높은 해상도를 유지하여 세밀한 디테일이 보존되지만, 많은 포인트 클라우드들이 유지되는 것이다 보니 처리시간과 메모리 사용량이 증가할 수 있다.
downpcd = pcd.voxel_down_sample(voxel_size=0.01)
반대로 voxel_size를 0.05보다 더 높은 1로 설정할 경우는 아래와 같다.
디테일이 거의 없어졌다고 볼 수 있는데, 포인트 클라우드를 간략화하여 전체적인 형상만 유지하고 작은 디테일은 사라지게 된다.
이 경우에는 남아있는 포인트 클라우드가 거의 없다 보니 세부 정보가 손실되지만, 메모리 사용량과 처리 시간은 줄어드는 특징을 가진다.
downpcd = pcd.voxel_down_sample(voxel_size=1)
voxel_size에 대해 조금 더 정리해 보자면, 다운샘플링에 중요한 매개변수로 여러 영향을 미칠 수 있게 되므로 상황에 맞게 적절한 값을 설정하는 것이 중요하다
[Open3D Tutorial] bounding volumes (0) | 2024.08.13 |
---|---|
[Open3D Tutorial] point cloud distance (0) | 2024.08.13 |
[Open3D Tutorial] vertex normal estimation (0) | 2024.08.12 |
[Open3D Tutorial] visualize point cloud (0) | 2024.08.12 |
Open3D (0) | 2024.08.12 |