measure op• Data kinds: labels2d → table
• Call: import fullseye as fs; fs.ledger.blob_features(labels: 'Any', spacing: 'float' = 1.0) -> 'dict' (to call the implementation directly, import blob2d; blob2d.blob_features(labels: 'Any', spacing: 'float' = 1.0) -> 'dict'; from the registry, opsblob.get("blob_features"))
Returns the shape features of each object as 1 array per key.
labels : array_like
Output of blob_label (integers, background 0).
spacing : float
Size of 1 pixel [unit/px]. Lengths are multiplied by it, areas by its 2nd power.
Default 1.0 = stays in pixels.
dict
n (number of objects), spacing, units (mapping item → unit), and
19 arrays of length n (FEATURE_KEYS). Even with 0 objects,
all keys are present with empty arrays (so the caller need not branch).
• angle is the tilt in the matrix coordinate system (+column → +row is positive = clockwise on screen).
• major / minor are the axis lengths of the ellipse with the same 2nd-order moments (4 sqrt(lambda)). It is not the bounding extent of the pixel arrangement, so for a square it comes out slightly longer than the side -- this is as defined, not an error.
• circularity is 4 pi A / P^2. HALCON's circularity is "area / area of the circle whose radius is the farthest point", a different thing, so when comparing values, check the definition.
• Objects with touches_border True have both area and perimeter smaller by the cut-off part. Discard them before counting, or count the ground-truth side by the same convention.
>>> import numpy as np
>>> m = np.zeros((20, 20), bool); m[4:14, 4:9] = True
>>> f = blob_features(blob_label(m))
>>> int(f["n"]), float(f["area"][0])
(1, 50.0)
• 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.
• poc_am_thermal_to_ct — py -3.11 examples/poc_am_thermal_to_ct.py
• poc_bone_trabecular_thickness — py -3.11 examples/poc_bone_trabecular_thickness.py
• poc_bump_coplanarity — py -3.11 examples/poc_bump_coplanarity.py
• poc_fresco_craquelure — py -3.11 examples/poc_fresco_craquelure.py
• poc_gear_tooth_metrology — py -3.11 examples/poc_gear_tooth_metrology.py
• poc_leaf_disease_area — py -3.11 examples/poc_leaf_disease_area.py
• poc_metal_grain_size — py -3.11 examples/poc_metal_grain_size.py
• poc_nuclei_ploidy — py -3.11 examples/poc_nuclei_ploidy.py
• poc_particle_sizing — py -3.11 examples/poc_particle_sizing.py
• poc_particle_tracking — py -3.11 examples/poc_particle_tracking.py
• poc_peg_insertion_tactile — py -3.11 examples/poc_peg_insertion_tactile.py
• poc_print_warpage_risk — py -3.11 examples/poc_print_warpage_risk.py
• poc_pv_thermal_survey — py -3.11 examples/poc_pv_thermal_survey.py
• poc_real_coin_metrology — py -3.11 examples/poc_real_coin_metrology.py
• poc_rotation_invariance_audit — py -3.11 examples/poc_rotation_invariance_audit.py
• poc_sea_ice_concentration — py -3.11 examples/poc_sea_ice_concentration.py
• poc_solar_el_inspection — py -3.11 examples/poc_solar_el_inspection.py
• poc_solder_fillet_aoi — py -3.11 examples/poc_solder_fillet_aoi.py
• poc_traffic_counting — py -3.11 examples/poc_traffic_counting.py
• poc_vessel_network — py -3.11 examples/poc_vessel_network.py
• poc_weld_radiograph_porosity — py -3.11 examples/poc_weld_radiograph_porosity.py
• poc_wound_area_tracking — py -3.11 examples/poc_wound_area_tracking.py
table as input)—
measure)—
*Provenance: blob2d.py — BLOB 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.