Convex Hull이란?

주어진 점들을 모두 포함하는 최소 볼록 껍질. 고무줄로 점들을 감싼 것처럼 바깥쪽 경계를 형성.

왜 필요한가?

복잡한 3D 형상을 단순화해서 충돌 감지, 부피 계산, 객체 경계 파악 등에 활용


코드 예제

import open3d as o3d

bunny = o3d.data.BunnyMesh()
mesh = o3d.io.read_triangle_mesh(bunny.path)
mesh.compute_vertex_normals()

pcl = mesh.sample_points_poisson_disk(number_of_points=2000)
hull, _ = pcl.compute_convex_hull()
hull_ls = o3d.geometry.LineSet.create_from_triangle_mesh(hull)
hull_ls.paint_uniform_color((1, 0, 0))

o3d.visualization.draw_geometries([pcl, hull_ls])

image.png

sample_points_poisson_disk(number_of_points) 함수에서 number_of_points 값을 낮출 경우, 아래와 같이 이전보다 섬세함이 떨어지는 것을 확인할 수 있다

pcl = mesh.sample_points_poisson_disk(number_of_points=100)

image.png

sample_points_poisson_disk(number_of_points)

number_of_points의 영향

  1. **포인트 클라우드의 밀도:**값이 클수록 더 많은 점이 생성되기 때문에 더 밀집된 형태를 가지며, 더욱 세밀하게 표현할 수 있다
  2. **포인트 클라우드의 해상도:**포인트 수가 많아지면 해상도가 높아지는데, 메쉬의 표면을 더 잘 샘플링하게 되어 복잡한 형상이나 곡률이 잘 반영된 포인트 클라우드를 생성할 수 있게 한다