edt_jfa — 3D feature op

• Data kinds: voxel → sdf

• Call: import fullseye as fs; fs.ledger.edt_jfa(seed_bool, device='cpu') (to call the implementation directly, import match3d; match3d.edt_jfa(seed_bool, device='cpu'); from the registry, ops3d.get("edt_jfa"))

• Return value through the ledger: fullseye.ledger.edt_jfa(...) returns only the declared out type sdf (the underlying function also returns auxiliary values). When you need what was dropped, use fullseye.ledger.edt_jfa.raw(...) or call match3d.edt_jfa directly.

• GPU: this op has a GPU path (device="cuda")

Usage

3-D Euclidean distance transform via the Jump Flooding Algorithm (GPU). Each voxel → the distance to its nearest seed.

Measured to match scipy EDT exactly (max|err|=0, N≤160, JFA+2). scipy (C implementation) is faster for small N, but GPU-JFA overtakes it at N≥96 (measured on RTX5090: 96→2.6× / 128→4.7×). Running all voxels in parallel, it can stay resident on the GPU; the point is to make chamfer an all-GPU pipeline without CPU round trips. The final step=1 is done as 2 passes (JFA+2), which also removes the approximation error for large N. Returns the distance field (D,H,W) as a torch tensor.

Argument seed_bool is a (D,H,W) bool (True=seed, distance 0). Returns a torch float32 tensor (D,H,W) (on device, not numpy; via the ledger fs.ledger.edt_jfa it is converted to numpy). Distances are Euclidean distances between voxel centres (in voxel units). If there is not even 1 seed, every voxel saturates at 1e6 (no exception). It jumps in 26 directions × log2(max(D,H,W)) stages, so memory is a few (3,D,H,W) float32 arrays.

Uses: signed_distance_field (both sides), match_chamfer_3d(edt="jfa"). The CPU version gives the same values as scipy.ndimage.distance_transform_edt(~seed).

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

Runnable examples (verified samples that actually call this op)

• diff_features — py -3.11 examples_3d/diff_features.py

Ops the type connects to (they accept sdf as input)

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

Same category (feature)

sobel3d · hessian3d · curvature_maps · edt_jfa_vector · vol_frangi · vol_local_std · vol_local_thickness · vol_orientation_coherence


*Provenance: match3d.py — 3D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

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