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"))
Suspected merge: length of the membrane "chord" crossing the interior of a label / diameter of the label. One row per label (connected component).
Procedure: inside a component (deeper than band px from the boundary), pixels with membrane response > tau are grouped into 8-connected components; for each membrane component of at least min_segment px, it is thickened by 3 px and the largest distance between 2 points among the pixels touching the boundary band (band < distance ≤ band + 3) is taken as the chord length. score = max chord length / sqrt(area). A membrane joining 2 places on the boundary (= the border between 2 cells stuck together) has score ≈ 1; fragments that do not touch the boundary give 0 or small values. Membrane components with holes (holes of at least min_hole px = closed rings = mitochondria, vesicles) are excluded from the chord candidates -- a ring touching 2 points of the boundary has the same "2 distant points" as a chord, so they are separated first by whether they have a hole. Membranes whose ring is broken into an arc cannot be excluded (the main reason AUC does not reach 1 on real data).
On CREMI sample A (512² sections, 12 slices, prototype), artificially merged components vs the rest: AUC 0.83 (tau 0.2).
Columns: label / component / area / score / chord_px / n_segments / cy / cx (descending by score). Components smaller than min_area are not counted (the chord of a small fragment is about its diameter and always comes out high).
>>> table = seg_membrane_chord_score(labels, seg_membrane_response(raw))
>>> table["label"][:5], table["score"][:5] # most suspicious first
• 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_em_second_opinion — py -3.11 examples/poc_em_second_opinion.py
table as input)seg_synapse_partners · seg_wiring_variation · seg_synapse_nri · seg_wiring_exposure
suspect)*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.