boundary op• Data kinds: voxel → voxel
• Call: import fullseye as fs; fs.ledger.vol_boundary(vol_binary, connectivity=6, side='inner') (to call the implementation directly, import volops; volops.vol_boundary(vol_binary, connectivity=6, side='inner'); from the registry, ops3d.get("vol_boundary"))
Boundary shell of a binary volume (the 3-D `region_boundary`).
`side='inner'` keeps the foreground voxels that touch background:
`mask & ~erode(mask). side='outer'` keeps the background voxels that
touch foreground: `dilate(mask) & ~mask`. *connectivity* (6/18/26) decides
which neighbours count as "touching" — 6 uses face neighbours only (the
thinnest shell); 26 also counts a diagonal background contact, so shells at
convex corners come out thicker. The volume border counts as background
for the *inner* shell (a mask reaching the border has a boundary there —
the same convention as the surface-area estimate in
:func:vol_region_props); the *outer* shell can only occupy voxels that
exist, so a mask filling the whole volume has an empty outer boundary.
A solid region's interior drops out entirely: the shell of a solid ball of
radius `r voxels is roughly a 3/r` fraction of it (surface over
volume), so the saving grows with size — which is exactly why boundary
representations (and :func:vol_boundary_points) are the memory-frugal way
to hand a shape to the point-cloud / metrology operators.
Returns a `(D, H, W) float64 {0, 1}` volume (chainable into
:func:vol_label, :func:vol_boundary_points, ...).
• 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.
• roi_domain_boundary — py -3.11 examples_3d/roi_domain_boundary.py
voxel as input)voxel_to_mips · voxel_to_mesh · signed_distance_field · to_points · sobel3d · hessian3d · curvature_maps · edt_jfa
boundary)*Provenance: volops.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.