sdf_to_occupancy — 3D transform op

• 데이터 종류: sdf → voxel

• 호출: import fullseye as fs; fs.ledger.sdf_to_occupancy(sdf, iso=0.0)(구현을 직접 호출하려면 import match3d; match3d.sdf_to_occupancy(sdf, iso=0.0), 원장에서 가져오려면 ops3d.get("sdf_to_occupancy"))

사용법

SDF → occupancy voxel(iso 이하=안쪽=1). SDF 에서 voxel 로 되돌아가기.

(sdf <= iso).astype(float64)뿐인 op. signed_distance_field의 규약(안쪽 <0)이라면 iso=0.0으로 안쪽=1, 바깥=0. 등호를 포함하므로, 정확히 iso인 voxel은 안쪽에 들어간다. iso를 양수로 하면 바깥으로 iso voxel만큼 부푼 점유, 음수로 하면 줄어든 점유가 된다(SDF가 참 거리라면 등방 dilation/erosion과 같다). tsdf_from_depth의 출력(표면 앞 +· 뒤 −·미관측 +1)에도 같은 iso=0.0으로 쓸 수 있지만, 미관측 영역은 0 쪽(바깥)이 된다. 입력의 형태는 묻지 않으며, 반환값은 같은 형태의 float64(0.0 / 1.0). NaN은 비교가 거짓이므로 0이 된다(경고 없음).

★라벨 volume을 넘기면 배경이 "안쪽"이 된다. backends_typed.TYPE_TO_SORT는 sdf / labels / voxel을 같은 volume으로 접으므로, label_components나 vol_label의 출력을 그대로 이어도 예외는 나지 않는다. 라벨은 0이 배경·1 이상이 전경이므로 <= 0은 배경 그 자체. 실측(2026-09-08, 24³의 정육면체, 참 안쪽 1,728 voxel): SDF를 넘기면 1,728, 같은 형태의 0/1/2 라벨을 넘기면 9,504(5.5배) —— 부호가 반전되어 있다. 라벨로부터 점유를 만들려면 iso가 아니라 labels > 0을 직접 쓸 것.

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

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

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

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

• transforms_repr — py -3.11 examples_3d/transforms_repr.py

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

voxel_to_mips · voxel_to_mesh · signed_distance_field · to_points · sobel3d · hessian3d · curvature_maps · edt_jfa

같은 카테고리(transform)

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


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

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