region_props — 3D 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"))

Usage

Return the list of region properties of each connected component.

Parameters

vol : array_like

3D array of bool or 0/1.

connectivity : int

6 / 18 / 26.

Returns

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.

Background guides (the physics and conventions behind this op)

• measurement_uncertainty — Measurement uncertainty and calibration — what it takes to claim you are measuring

References (sample data, literature)

• 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.

Runnable examples (verified samples that actually call this op)

• region_props_3d — py -3.11 examples_3d/region_props_3d.py

Ops the type connects to (they accept table as input)

fuse_to_voxel · mesh_select_lod

Same category (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.