regionprops op• Data kinds: voxel → table
• Call: import fullseye as fs; fs.ledger.region_props(vol, connectivity: 'int' = 26) -> 'list[dict]' (to call the implementation directly, import regionprops3d; regionprops3d.region_props(vol, connectivity: 'int' = 26) -> 'list[dict]'; from the registry, ops3d.get("region_props"))
Return the list of region properties of each connected component.
vol : array_like
3D array of bool or 0/1.
connectivity : int
6 / 18 / 26.
list[dict]
One dict per component. Keys:
• label : label number (int)
• volume : voxel count (int)
• centroid : centroid (z, y, x) as a tuple (float)
• bbox : (z0, y0, x0, z1, y1, x1). z1/y1/x1 are exclusive upper ends (stop)
• extent : volume / bbox volume (fill fraction, 0..1)
• principal_axes : (3,3) principal axis vectors (rows, eigenvalues descending)
• principal_lengths: (3,) principal axis lengths = square roots of the coordinate covariance eigenvalues (descending)
• equivalent_radius: equivalent sphere radius (3V/4π)^(1/3)
• surface_area : exposed-face count approximation (in voxel-face units)
• sphericity : surface area of the equal-volume sphere / actual surface area (close to 1 for a sphere, <1 due to discretisation)
An empty list if there are no foreground voxels (or the input is empty).
Notes:
• All quantities are in voxel units (no spacing correction). For physical units multiply volume by the voxel volume and centroid / bbox / principal_lengths by each axis's spacing (with anisotropic spacing the principal axis directions are distorted).
• principal_lengths are the square roots of the eigenvalues of the population covariance of the coordinates (divided by N); they are standard deviations of the coordinates, not radii of the component. For a 1-voxel component, principal_axes is the identity matrix and principal_lengths are all 0.
• surface_area also counts faces touching the array border (zero padding). Because of discretisation, sphericity tops out at about 0.66 even for a sphere (see the module docstring).
• Labels are in order 1..n (the same scipy scan order as label_components), not by volume. Sorting is up to the caller.
• The input is converted to bool with everything other than 0 as foreground (NaN is foreground too). Raises ValueError: input that is not 3-dimensional, connectivity other than 6/18/26.
• measurement_uncertainty — Measurement uncertainty and calibration — what it takes to claim you are measuring
• 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.
• region_props_3d — py -3.11 examples_3d/region_props_3d.py
table as input)fuse_to_voxel · mesh_select_lod
regionprops)label_components · largest_component · filter_by_volume · inner_box3 · vol_label · vol_region_props
*Provenance: regionprops3d.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.