(희소한) 블록 선택 및 활성화
이며, (밀집된) 복셀 값 통합
examples/python/t_reconstruction_system/integrate.py
에서 확인할 수 있습니다.중복 없는 블록 좌표를 생성하는 프러스텀 해시 맵
과 이러한 블록 좌표를 활성화하고 쿼리하는 블록 해시 맵
을 사용하여 구현됩니다.# examples/python/t_reconstruction_system/integrate.py
frustum_block_coords = vbg.compute_unique_block_coordinates(
depth, depth_intrinsic, extrinsic, config.depth_scale,
config.depth_max)
frustum_block_coords
에 해당하는 블록 내의 복셀을 처리할 수 있습니다. 관련된 모든 복셀을 입력 이미지에 투영하고 가중 평균을 수행하는 것
으로, 이는 해시 맵 작업 없이 순수하게 기하학적인 과정입니다.vbg.integrate
함수가 어떤 로직으로 integrate를 수행하는지 파악# examples/python/t_reconstruction_system/integrate.py
if config.integrate_color:
color = o3d.t.io.read_image(color_file_names[i]).to(device)
vbg.integrate(frustum_block_coords, depth, color, depth_intrinsic,
color_intrinsic, extrinsic, config.depth_scale,
config.depth_max)
else:
vbg.integrate(frustum_block_coords, depth, depth_intrinsic,
extrinsic, config.depth_scale, config.depth_max)
깊이 이미지
, 컬러 이미지
, 복셀 그리드의 TSDF
, 복셀 그리드의 가중치
, 복셀 그리드의 컬러
순입니다.template void IntegrateCPU<uint16_t, uint8_t, float, uint16_t, uint16_t>(FN_ARGUMENTS);
template void IntegrateCPU<uint16_t, uint8_t, float, float, float>(FN_ARGUMENTS);
template void IntegrateCPU<float, float, float, uint16_t, uint16_t>(FN_ARGUMENTS);
template void IntegrateCPU<float, float, float, float, float>(FN_ARGUMENTS);
template void IntegrateCUDA<uint16_t, uint8_t, float, uint16_t, uint16_t>(FN_ARGUMENTS);
template void IntegrateCUDA<uint16_t, uint8_t, float, float, float>(FN_ARGUMENTS);
template void IntegrateCUDA<float, float, float, uint16_t, uint16_t>(FN_ARGUMENTS);
template void IntegrateCUDA<float, float, float, float, float>(FN_ARGUMENTS);
# examples/python/t_reconstruction_system/integrate.py
pcd = vbg.extract_point_cloud()
o3d.visualization.draw([pcd])
mesh = vbg.extract_triangle_mesh()
o3d.visualization.draw([mesh.to_legacy()])
extract_triangle_mesh
는 마칭 큐브 알고리즘을 적용하여 메쉬를 생성extract_point_cloud
는 비슷한 알고리즘을 사용하지만 삼각형 면 생성 단계를 생략.npz
파일 형식으로 저장 및 로드할 수 있으며, 이는 numpy
를 통해 접근할 수 있습니다.# examples/python/t_reconstruction_system/integrate.py
for i in tqdm(range(n_files)):
위에서 언급한 복셀 블록 그리드의 .npz
파일에는 다음과 같은 항목이 포함됩니다:
attr_name_tsdf
: 값 버퍼 인덱스: 0
attr_name_weight
: 값 버퍼 인덱스: 1
attr_name_color
: 값 버퍼 인덱스: 2
value_000
: TSDF 값 버퍼
value_001
: 가중치 값 버퍼
value_002
: 색상 값 버퍼
key
: 모든 활성 키
block_resolution
: 8
voxel_size
: 0.0059 = 3.0 / 512
CUDA:0
: 디바이스