feature op• Data kinds: voxel → curvature
• Call: import fullseye as fs; fs.ledger.curvature_maps(vol, device='cpu', mc=0.000625) (to call the implementation directly, import match3d; match3d.curvature_maps(vol, device='cpu', mc=0.000625); from the registry, ops3d.get("curvature_maps"))
• GPU: this op has a GPU path (device="cuda")
Principal curvatures of a level set → the shape index S (Koenderink) and curvedness. Closed form (Kindlmann 2003).
Line→surface lift of the 2D contour curvature (1 scalar): a surface has 2 principal curvatures κ1,κ2. mean = (κ1+κ2)/2 = (|g|²trH − gᵀHg)/|g|³, Gauss K = κ1κ2 = gᵀadj(H)g/|g|⁴ (g=∇, H=Hessian). S=(2/π)atan2(κ1+κ2, κ1−κ2) ∈[-1,1] is a local surface type invariant to intensity and rotation (cup−1/rut/saddle0/ ridge+.5/cap+1). Under the outward-normal convention, a bright convex blob = cap(+1). Returns (S, curvedness, mask, |g|), all torch.
Units: the separable-conv gain 32 of sobel3d (deriv[-1,0,1]×smoothing[1,2,1]²) is divided back out here, so κ1,κ2/curvedness are in true 1/voxel units (curvedness=1/R on a spherical shell of radius R), and |g| and the mask threshold mc are in true gradient units per voxel. The old version (up to 2026-08-29) forgot to divide back:
curvedness was 1/32 times and mc was in raw sobel3d units (the shape index S is a ratio and unaffected). If you used old mc values, pass them multiplied by 1/32 (the default 0.02→6.25e-4 has also been converted equivalently).
• 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.
• diff_features — py -3.11 examples_3d/diff_features.py
curvature as input)feature)sobel3d · hessian3d · edt_jfa · 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.