seg_membrane_chord_score — EMPROOF suspect op

• Data kinds: labels2d × image2d → table

• Call: import fullseye as fs; fs.ledger.seg_membrane_chord_score(labels, membrane, tau: 'float' = 0.2, band: 'int' = 4, min_area: 'int' = 1500, min_segment: 'int' = 20, normalize: 'bool' = True, ignore_zero: 'bool' = True, max_points: 'int' = 400, min_hole: 'int' = 4) -> 'dict' (to call the implementation directly, import emproof; emproof.seg_membrane_chord_score(labels, membrane, tau: 'float' = 0.2, band: 'int' = 4, min_area: 'int' = 1500, min_segment: 'int' = 20, normalize: 'bool' = True, ignore_zero: 'bool' = True, max_points: 'int' = 400, min_hole: 'int' = 4) -> 'dict'; from the registry, opsemproof.get("seg_membrane_chord_score"))

• GPU: none (CPU reference implementation only)

Usage

Suspected merge: length of the membrane "chord" crossing the interior of a label / diameter of the label. One row per label (connected component).

Procedure: Make pixels with membrane response > tau inside the component (within band px from the boundary) into 8 connected components, For each membrane component greater than or equal to min_segment px, thicken it by 3 px to the boundary side (distance ≤ band + 3) The chord length is the distance between the two farthest pixels that can be touched. score = max chord length / sqrt(area). A membrane that connects two boundaries (= boundary between two pasted cells) has score ≈ 1, and fragments that do not touch the boundary are 0 or small. Membrane component with holes (min_hole hole larger than px = closed ring = mitochondria/vesicles) is excluded from string candidates --- At two points on the boundary Since the touching rings have the same two distant points'' as the strings, we first divide them based on the presence or absence of holes. The membrane that has been cut into an arc is This cannot be excluded (the main reason why AUC does not reach 1 in real data).

CREMI sample A (12 cross sections of 512², prototype), artificial fusion component vs. others: AUC 0.83 (tau 0.2).

Columns: label / component / area / score / chord_px / n_segments / cy / cx (score descending order). Components less than min_area are not counted (small fragment chords will always come out higher as they are equal to the diameter).

>>> table = seg_membrane_chord_score(labels, seg_membrane_response(raw))

>>> table["label"][:5], table["score"][:5] # Most suspicious

Detailed usage guide

• emproof family guide

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.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_em_second_opinion — py -3.11 examples/poc_em_second_opinion.py

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

seg_synapse_partners · seg_wiring_variation · seg_synapse_nri · seg_wiring_exposure

Same category (suspect)

seg_boundary_membrane_gap


*Provenance: emproof.py — EMPROOF 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.