tsdf_from_depth — 3D transform op

• 데이터 종류: depth → sdf

• 호출: import fullseye as fs; fs.ledger.tsdf_from_depth(depth, fx, fy, cx, cy, size=64, bounds=None, trunc=3.0)(구현을 직접 호출하려면 import match3d; match3d.tsdf_from_depth(depth, fx, fy, cx, cy, size=64, bounds=None, trunc=3.0), 원장에서 가져오려면 ops3d.get("tsdf_from_depth"))

사용법

깊이 맵(2.5D) → TSDF volume(RGB-D 재구성의 표준 표현). depth→TSDF 변환.

각 voxel을 영상에 투영하고, 시선 위의 관측 깊이와의 부호 있는 절단 거리 [-1,1]을 저장(표면 앞 +·뒤 −·표면 0). KinectFusion 계열의 기본 표현.

격자: bounds=(lo, hi)는 (X, Y, Z)의 카메라 좌표(depth_to_points와 같음)이며, None이면 깊이를 역투영한 점군의 min−2 / max+2(깊이 단위). 출력은 (size,size,size) float32이고 축 순서는 (Z, Y, X), voxel 중심 = lo + (i + 0.5)/size·(hi − lo). bounds의 배열 (x,y,z)와 배열의 축 (z,y,x)가 반대라는 점에 주의.

값: 각 voxel 중심을 u = X·fx/Z + cx, v = Y·fy/Z + cy로 화소에 반올림하고, 그 화소의 관측 깊이 d로부터 clip((d − Z)/trunc, −1, 1)(trunc는 깊이와 같은 단위). 영상 밖에 떨어지는 voxel·관측 깊이가 0 이하·Z가 0 이하인 voxel은 +1(미관측=자유)로 한다(가장자리 화소로 clip하여 관측된 것처럼 꾸미지 않는다). 깊이 0이 무효값이라는 규약.

• 깊이가 모두 0이고 bounds=None이면 점군이 비어 numpy의 min에서 예외.

• 1 시점의 TSDF이므로 시선의 뒤쪽은 −1로 채워진다(닫힌 물체가 되지 않는다).

후단: voxel_to_mesh(tsdf, iso=0.0)로 면을 얻는다. 점유로 바꾸려면 sdf_to_occupancy.

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• transforms_repr — py -3.11 examples_3d/transforms_repr.py

타입이 이어지는 다음 연산자(sdf 를 입력으로 받는 것)

sdf_to_occupancy · fuse_to_voxel · integrate · extract_surface_points · query_distance · sdf_union · sdf_intersect · sdf_subtract

같은 카테고리(transform)

points_to_voxel · gaussians_to_voxel · mesh_to_voxel · mesh_to_points · depth_to_points · voxel_to_mips · voxel_to_mesh · signed_distance_field


*Provenance: match3d.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.