medial op• Data kinds: voxel → voxel
• Call: import fullseye as fs; fs.ledger.skeletonize_vol(vol) (to call the implementation directly, import medial; medial.skeletonize_vol(vol); from the registry, ops3d.get("skeletonize_vol"))
Thin a 3-D binary voxel volume into a one-voxel-wide skeleton. A wrapper around skimage's Lee (1994) method.
method='lee' is a topology-preserving thinning that supports 3D. It collapses even blobs into a line skeleton (if you want a medial *surface*, use distance_ridge). The return value is a bool array of the same shape as the input.
Args:
vol: binary voxels (bool / 0-1 3D).
Returns:
skeleton (bool 3D): skeleton voxels.
Input handling: _as_binary_volume normalises a 3-D array to bool (non-zero = foreground). Not 3-D, an empty array, or a float containing NaN/Inf gives ValueError. Axis order is (z, y, x); distances and thicknesses are in voxel units, and isotropic sampling is assumed (with anisotropic voxels the thinning result is biased per axis; make it isotropic first with vol_resize).
Behaviour:
• If there is no foreground, returns an all-False array of the same shape (skimage is not called).
• skimage.morphology.skeletonize(mask, method="lee") is imported lazily. In an environment without scikit-image this raises ImportError.
• The Lee method preserves topology (does not change the number of connected components, holes or cavities), but a thick blob collapses into several branches, and spurs (short branches) appear according to surface bumps. Spurs are trimmed with skeleton_prune3d.
Where to use: input to topology_signature (counts of endpoints and branches), skeleton_junctions3d / skeleton_endpoints3d / skeleton_branches3d. If you need the local radius of skeleton voxels, look up the edt of distance_ridge at the skeleton positions.
• 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.
• medial_topology — py -3.11 examples_3d/medial_topology.py
voxel as input)voxel_to_mips · voxel_to_mesh · signed_distance_field · to_points · sobel3d · hessian3d · curvature_maps · edt_jfa
medial)distance_ridge · medial_axis_points · topology_signature · medial_match · skeleton_junctions3d · skeleton_endpoints3d · skeleton_prune3d · skeleton_branches3d
*Provenance: medial.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.