구성(Construction)
- 복셀 블록 그리드는 다음과 같이 구성할 수 있습니다:
if config.integrate_color:
vbg = o3d.t.geometry.VoxelBlockGrid(
attr_names=('tsdf', 'weight', 'color'),
attr_dtypes=(o3c.float32, o3c.float32, o3c.float32),
attr_channels=((1), (1), (3)),
voxel_size=3.0 / 512,
block_resolution=16,
block_count=50000,
device=device)
else:
vbg = o3d.t.geometry.VoxelBlockGrid(attr_names=('tsdf', 'weight'),
attr_dtypes=(o3c.float32,
o3c.float32),
attr_channels=((1), (1)),
voxel_size=3.0 / 512,
block_resolution=16,
block_count=50000,
device=device)
GPT 설명
- 공통 속성:
voxel_size=3.0 / 512
: 각 복셀의 크기를 설정합니다. 여기서는 3m 공간을 512개의 복셀로 나누어 복셀 하나의 크기를 약 0.00586m로 설정합니다.
block_resolution=16
: 각 복셀 블록이 몇 개의 복셀을 가로, 세로, 깊이로 가지는지를 결정합니다. 여기서는 (16 \times 16 \times 16) 크기의 복셀 블록을 생성합니다.
block_count=50000
: 해시 맵에 포함될 최대 블록 수를 설정합니다.
- 여기서는 최대 50,000개의 블록을 관리합니다.
- TODO: 이걸 바꿔야할수도
device=device
: CPU 또는 GPU를 지정합니다.
2.3 복셀 블록 그리드의 속성
attr_names
: 복셀 블록이 저장할 속성의 이름입니다.
'tsdf'
:
- 잘린 부호 거리 함수(Truncated Signed Distance Function, TSDF)를 저장
- TSDF는 3D 공간에서 표면을 표현하는 데 사용되는 값
'weight'
: TSDF 값의 신뢰도를 나타내는 가중치
'color'
: (선택 사항) 컬러 이미지를 저장하기 위한 속성
attr_dtypes
: 각 속성의 데이터 타입을 설정합니다. 여기서는 모두 float32
로 설정되어 있습니다.
attr_channels
: 각 속성의 채널 수를 설정합니다.
(1)
: 단일 채널, TSDF와 가중치는 하나의 값을 가집니다.
(3)
: RGB 컬러는 3개의 채널을 가집니다.
3. 해시 맵과 배열 구조
- 해시 맵:
- 복셀 블록을 관리하기 위해 사용되며, 전역적으로 공간을 효율적으로 표현
- 해시 맵의 키는
(3,)
형태의 3D 좌표(정수형)
- 이 좌표는 각 복셀 블록이 공간에서 어디에 위치하는지를 나타냄
- 배열의 구조(SoA):
- 해시 맵의 값은 각 블록에 있는 복셀의 정보를 구조화된 배열(Structure of Array, SoA) 형태로 저장
- 각 블록은 크기
(16, 16, 16)
의 복셀로 구성되며, 각 복셀에 TSDF, 가중치, 그리고 (선택적으로) RGB 컬러 정보가 포함됩니다.
4. 해시 맵의 값 구성 요소
- TSDF: 잘린 부호 거리 함수로, 블록 내의 각 복셀에 대해
(16, 16, 16, 1)
형태로 저장됩니다. 이 값은 각 복셀의 표면까지의 거리를 나타내며, 3D 공간의 물체 모양을 표현하는 데 사용됩니다.
- 가중치: TSDF의 신뢰도를 나타내며, 역시
(16, 16, 16, 1)
형태로 저장됩니다.
- RGB 색상 (선택 사항): 컬러 데이터가 포함될 경우, 각 복셀에 대해
(16, 16, 16, 3)
형태로 RGB 값을 저장합니다.
글 설명
- 이 예제에서 다중 값 해시 맵은
(3,)
의 키 모양과 int32
의 데이터 타입을 가지고 있습니다.
- 해시 맵의 값은 배열의 구조(SoA)로 정리되어 있습니다.
- 해시 맵의 값에는 다음이 포함됩니다: 기본적으로 다음 항목을 포함합니다:
- Truncated Signed Distance Function, TSDF:
(16, 16, 16, 1)
- 가중치:
(16, 16, 16, 1)
- (선택적으로) RGB 색상:
(16, 16, 16, 3)
- 경험적으로, 거실 규모의 장면에 대해 빈번한 재해시(rehashing)를 방지하기 위해 50000개의 블록을 예약합니다.
- 사용자 지정 속성도 추가할 수 있습니다.
- 예를 들어,
float32
타입의 요소 모양 (16, 16, 16, 1)
을 가지는 강도(intensity)나
int32
타입의 요소 모양 (16, 16, 16, 1)
을 가지는 레이블 등을 정의할 수 있습니다.
- 데이터를 처리하는 방법에 대해서는 "Customized Integration(사용자 정의 통합)"을 참조하세요.