상세 컨텐츠

본문 제목

[Open3D Tutorial] bounding volumes

AI/Open3D

by 쑤야. 2024. 8. 13. 16:55

본문

bounding volumes


코드를 살펴보기 전, bounding volumes에 대한 이해부터 필요할 것 같아 bounding volumes이 무엇인지, 어떤 형태들이 존재하는지를 찾아보았다. 

 

open3d의 Bounding Volumes은 포인트 클라우드나 메쉬와 같은 3D 데이터의 공간적 경계를 나타내는 기하학적 형태로, 3D 데이터를 포함하는 최소한의 공간을 정의하고 다양한 분석과 계산에서 효율성을 높이는 데 사용된다. open3d에서는 주로 Axis-Aligned Bounding Box (AABB)와 Oriented Bounding Box (OBB) 2 가지 형태를 지원한다. 

 

 

1. Axis-Aligned Bounding Box (AABB)

  • AABB는 축에 정렬된 경계 상자로 항상 x, y, z 축과 평행하게 배치되며 주어진 3D 데이터를 포함하는 최소한의 직육면체를 정의한다
  • AABB는 계산이 간단하고, 많은 경우에 빠르게 경계를 정의할 수 있다
  • 데이터의 회전이나 방향성을 고려하지 않기 때문에, 경계 상자가 실제 데이터보다 더 큰 경우가 많다


2. Oriented Bounding Box (OBB)

  • OBB는 입력 데이터의 방향을 고려한 경계 상자
  • 데이터의 주축에 맞춰 회전된 직육면체 형태로, 더 작은 부피의 경계 상자를 제공할 수 있다
  • OBB는 AABB보다 더 정확한 경계를 제공할 수 있지만, 계산이 복잡
  • OBB는 데이터의 회전 및 방향을 반영하기 때문에, 더 정확하게 데이터를 감싸는 경계 상자를 생성
  • AABB보다 계산이 복잡하지만, 더 효율적인 경계 정보를 제공


bounding volumes의 활용

  1. 충돌 감지(Collision Detection)
    • 3D 공간에서 물체 간의 충돌을 빠르게 감지
    • 두 AABB나 OBB가 겹치는지를 확인하는 것은 복잡한 메쉬와의 충돌을 감지하는 것보다 훨씬 효율적
  2. 가시성 테스트(Visibility Testing)
    • 3D 데이터의 일부가 특정 시점에서 보이는지를 평가할 때, 대략적인 가시성 테스트를 수행 가능
  3. LOD(Level of Detail)
    • bounding volumes의 크기와 위치를 기반으로, 객체의 level of detail을 동적으로 조정 가능
    • 멀리 있는 객체는 간단한 bounding volumes로 대체 가능
  4. 데이터 필터링
    • 포인트 클라우드나 메쉬 데이터에서 특정 영역을 필터링하거나 관심 영역을 추출할 때, bounding volumes을 사용하여 원하는 부분만을 쉽게 선택 가능

import open3d as o3d

demo_crop_data = o3d.data.DemoCropPointCloud()
pcd = o3d.io.read_point_cloud(demo_crop_data.point_cloud_path)
vol = o3d.visualization.read_selection_polygon_volume(demo_crop_data.cropped_json_path)
chair = vol.crop_point_cloud(pcd)

aabb = chair.get_axis_aligned_bounding_box()
aabb.color = (1, 0, 0)
obb = chair.get_oriented_bounding_box()
obb.color = (0, 1, 0)

o3d.visualization.draw_geometries(
    [chair, aabb, obb],
    zoom=0.7,
    front=[0.5439, -0.2333, -0.8060],
    lookat=[2.4615, 2.1331, 1.338],
    up=[-0.1781, -0.9708, 0.1608]
)

  • 빨간 색 → Axis-Aligned Bounding Box
  • 초록 색 → Oriented Bounding Box 

'AI > Open3D' 카테고리의 다른 글

[Open3D Tutorial] convex hull  (0) 2024.08.14
[Open3D Tutorial] point cloud distance  (0) 2024.08.13
[Open3D Tutorial] vertex normal estimation  (0) 2024.08.12
[Open3D Tutorial] voxel downsampling  (0) 2024.08.12
[Open3D Tutorial] visualize point cloud  (0) 2024.08.12

관련글 더보기