Convex hull
- Convex Hull은 주어진 포인트 클라우드의 바깥쪽 경계를 형성하는 최소한의 볼록 다면체로
- 3D 포인트 클라우드 데이터에서 다양한 분석과 처리를 수행하는 데 매우 유용한 기하학적 도구
- 복잡한 3D 데이터를 단순화하거나 효율적으로 처리해야 하는 경우에 유용하게 사용할 수 있다
convex hull의 활용
- 부피 계산:
- Convex Hull을 사용해 복잡한 형상의 부피를 추정할 수 있다
- 포인트 클라우드가 잡음(noise)이 많거나 불완전할 때, Convex Hull을 통해 단순화된 형태의 부피를 계산할 수 있다
- 충돌 감지(Collision Detection):
- Convex Hull은 컴퓨터 그래픽스나 로보틱스에서 충돌 감지 알고리즘의 기초로 사용될 수 있다
- 복잡한 3D 모델을 Convex Hull로 단순화함으로써, 연산 비용을 줄이고 더 빠른 충돌 감지를 수행할 수 있다
- 예시
- 로봇 경로 계획: 로봇이 주변 물체와 충돌하지 않도록 경로를 계획할 때, 물체의 Convex Hull을 사용하여 효율적인 충돌 감지를 수행
- 가상현실(VR) 및 게임 개발: 가상 환경에서 객체 간의 충돌을 빠르게 감지하고 처리하는 데 Convex Hull을 사용
- 외곽선 추출 및 단순화:
- 복잡한 포인트 클라우드 데이터를 단순화하여 주요 외곽선을 추출할 수 있다
- 데이터 시각화나 분석을 더 쉽게 만들어 준다
- 패턴 인식 및 분류:
- 포인트 클라우드에서 객체의 형상 정보를 추출하고, 이를 바탕으로 패턴 인식이나 분류 작업을 수행하는 데 유용
- 데이터 필터링 및 클러스터링:
- 포인트 클라우드 데이터에서 노이즈를 제거하거나 클러스터를 식별하는 데 사용
- 노이즈 제거: 포인트 클라우드의 외곽을 형성하는 Convex Hull을 계산하여, 외곽선 내부의 데이터를 중심으로 필터링하거나 노이즈를 제거
- 클러스터링: 다수의 객체가 포함된 포인트 클라우드에서 각 객체의 Convex Hull을 계산하여, 객체 간의 경계를 구분하고 클러스터링
- 3D 인쇄 및 제조:
- 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])
sample_points_poisson_disk(number_of_points) 함수에서 number_of_points 값을 낮출 경우, 아래와 같이 이전보다 섬세함이 떨어지는 것을 확인할 수 있다
pcl = mesh.sample_points_poisson_disk(number_of_points=100)
sample_points_poisson_disk(number_of_points)
- 3D mesh 표면으로부터 균일하게 분포된 포인트 클라우드를 샘플링하는 방법 중 하나
- number_of_points 매개변수를 통해 생성할 포인트의 개수를 지정
- 값이 클수록 더 많은 포인트가 샘플링되며, 표면의 디테일이 더 잘 표현된다
number_of_points의 영향
- 포인트 클라우드의 밀도:
값이 클수록 더 많은 점이 생성되기 때문에 더 밀집된 형태를 가지며, 더욱 세밀하게 표현할 수 있다
- 포인트 클라우드의 해상도:
포인트 수가 많아지면 해상도가 높아지는데, 메쉬의 표면을 더 잘 샘플링하게 되어 복잡한 형상이나 곡률이 잘 반영된 포인트 클라우드를 생성할 수 있게 한다
- 계산 비용:
포인트 수가 많아지면 샘플링하는 데 필요한 계산 비용이 증가하며, 연산 속도가 느려질 수 있으므로 매우 큰 메쉬나 실시간 응용 프로그램에서 중요한 고려사항이다
- convex hull의 정확성:
포인트 수가 많아질 수록 메쉬의 표면을 잘 표현하기 때문에 보다 정확하게 포인트 클라우드의 경계를 둘러싸 convex hull의 정확성이 높아질 수 있다