derivative op• Data kinds: voxel → hessian
• Call: import fullseye as fs; fs.ledger.voxel_to_hessian(vol, sigma=1.0, scale_normalize=False) (to call the implementation directly, import reprconv; reprconv.voxel_to_hessian(vol, sigma=1.0, scale_normalize=False); from the registry, opsreprconv.get("voxel_to_hessian"))
• GPU: none (CPU reference implementation only)
Volume voxel → the six components (zz, yy, xx, zy, zx, yx) of the 3-D Hessian hessian. The entry into hessian built with numpy and scipy only.
Returns the same form as hessian3d (torch conv3d): a list of length 6, each (D,H,W) float32, in the order (zz, yy, xx, zy, zx, yx) (axis 0=z, 1=y, 2=x), in units of 1/voxel², with replicated edges (mode="nearest" of scipy.ndimage). So hessian_determinant / hessian_vesselness read it as is, and the chain voxel → hessian → voxel works even in a plain pip install fullseye without torch.
sigma is the scale of the Gaussian smoothing (voxels). Diagonal components are "2nd order on that axis × smoothing on the other 2 axes", cross components are "1st order on 2 axes × smoothing on the remaining axis", as separable convolutions. The kernels have the shape of Gaussian derivatives, with the sum and the 1st/2nd moments matched exactly (a sampled Gaussian-derivative kernel does not sum to 0, so brightness leaks into the 2nd derivative), so for a quadratic ½xᵀAx + bᵀx the interior gives H = A to rounding. sigma=0 is not "no smoothing" but the same 3-tap kernels as hessian3d ([1,−2,1] / [−0.5,0,0.5] / [1,2,1]/4) —— it agrees with the torch version to float32 rounding. scale_normalize=True multiplies by σ² (Lindeberg's γ=1 normalisation, for comparing values across scales; the same convention as the internal Hessian of vol_frangi).
2-D images are not accepted: the hessian sort is the six 3-D components, and its consumers need (D,H,W). For a 2-D Hessian response use sk_hessian / sk_hessian_det / xsk_hessian_eig (image → image).
Args:
vol: a 3-D volume (D,H,W), real, finite.
sigma: scale of the Gaussian smoothing (voxels). Finite and >= 0. 0 gives the same kernels as hessian3d. Default 1.0.
scale_normalize: True multiplies every component by σ² (cannot be combined with sigma=0).
Returns:
list of 6 np.ndarray, each (D,H,W) float32, in the order (zz, yy, xx, zy, zx, yx).
Raises:
ValueError: empty / not 3-D / non-finite / sigma not a finite non-negative number /
scale_normalize combined with sigma=0.
Empty input (vol with 0 elements) raises ValueError.
• 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.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• hessian_numpy_chain — py -3.11 examples/hessian_numpy_chain.py
hessian as input)hessian_determinant · hessian_vesselness
derivative)gradient_magnitude · gradient_coherence · hessian_determinant · hessian_vesselness
*Provenance: reprconv.py — REPRCONV 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.