medial op• Data kinds: voxel → voxel
• Call: import fullseye as fs; fs.ledger.skeleton_endpoints3d(vol) (to call the implementation directly, import medial; medial.skeleton_endpoints3d(vol); from the registry, ops3d.get("skeleton_endpoints3d"))
Return the end points of a 3-D skeleton (at most one skeleton voxel in the 26-neighbourhood) as a voxel mask.
Isolated voxels (degree 0) are also counted as endpoints. 3D version of the 2D r2_endpoints_skeleton.
Procedure: _ensure_skeleton converts the input to bool; if there is an interior voxel whose 6-neighbourhood is all foreground, it is thinned with skeletonize_vol; then a convolution with a 3x3x3 kernel of all 1s (centre 0, outside 0 with mode="constant") counts the skeleton voxels in each voxel's 26-neighbourhood (degree), and skel & (degree <= 1) is returned. A skeleton voxel on the volume border, since the outside counts as 0, becomes an endpoint if the branch is cut off there.
Returns: a bool array of the same shape as the input (endpoint = True). All False if there is no foreground. np.argwhere gives (z, y, x) coordinates, and .sum() gives the number of endpoints.
Validation (ValueError): input that is not 3-D, an empty array, or a float containing NaN/Inf. ImportError if thinning is needed in an environment without scikit-image.
Notes:
• Endpoints are exact at each branch tip, but the tips of spurs (short branches created by thinning) also count as endpoints. If you only want the ends of the structure, trim first with skeleton_prune3d.
• A skeleton consisting only of closed loops (rings) has 0 endpoints.
• If you only want the count, topology_signature returns endpoints / isolated separately.
• 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 · skeletonize_vol · medial_axis_points · topology_signature · medial_match · skeleton_junctions3d · 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.