annotate_invert_visibility — ANNOTATE overlay op

• Datenarten: image2d × mask → table

• Aufruf: import fullseye as fs; fs.ledger.annotate_invert_visibility(img, mask, mode='complement', alpha=1.0, bits=128) (die Implementierung direkt: import annotate; annotate.annotate_invert_visibility(img, mask, mode='complement', alpha=1.0, bits=128); aus dem Register: opsannotate.get("annotate_invert_visibility"))

Verwendung

Misst vor dem Zeichnen, ob die invertierte Farbe auf diesem Untergrund tatsächlich sichtbar ist.

Der Vorteil invertierter Farbe ist, dass "man die Grundfarbe nicht kennen muss", aber sie hat nur 1 Schwäche, und die ist fatal -- in Mitteltönen ergibt die Invertierung dieselbe Farbe. Bei 8bit-Grau ist das Komplement von v=128 v=127, und das WCAG-Kontrastverhältnis ist 1.014 (Verhältnis 1.0 ist "dieselbe Farbe"; gemessen 2026-09-08). Das Band unter Verhältnis 1.5 umfasst v ∈ [113, 142], 30/256 Stufen = 12 % aller Stufen.

annotate_invert und annotate_invert_path rufen dies intern auf und warnen, aber wer selbst fail-closed sein will, misst mit diesem op, bevor er zeichnet (min_contrast ansehen und bei niedrigem Wert auf mode="contrast" ausweichen).

Parameters

img : (H,W) oder (H,W,C)

Grund. Wertebereich [0,1].

mask : (H,W)

Wo die Invertierung aufgetragen wird. Boolesch oder Gewichte in [0,1]. Abweichende Form ist eine Exception.

mode : str

Eines von INVERT_MODES.

alpha : float

Stärke der Invertierung. Denselben Wert wie beim Zeichnen übergeben -- die Sichtbarkeit bestimmt nicht "die invertierte Farbe", sondern

die tatsächlich gesetzte Farbe; senkt man alpha, ändert sich die Antwort.

Returns

dict

pixels (Anzahl Pixel mit Gewicht >= 0.5) / min_contrast /

median_contrast / invisible_fraction (Anteil mit Verhältnis unter

INVERT_MIN_CONTRAST) / worst_xy (schlechtestes Pixel,

None, falls keines).

Examples

>>> import numpy as np, annotate

>>> flat = np.full((8, 8), 128 / 255.0) # Mittelton -- ein Grund, auf dem Invertierung verschwindet

>>> rep = annotate.annotate_invert_visibility(flat, np.ones((8, 8), bool))

>>> round(rep["min_contrast"], 3)

1.014

>>> rep["invisible_fraction"]

1.0

>>> annotate.annotate_invert_visibility(flat, np.ones((8, 8), bool),

... mode="contrast")["min_contrast"] > 4.5

True

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie figure_annotation

Hintergrundwissen (Physik und Konventionen hinter diesem Operator)

• dataset_conventions — Konventionen für Trainingsdatensätze — COCO / YOLO / VOC und Fallstricke in der Sichtprüfung

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• annotate_paper_tour — py -3.11 examples/annotate_paper_tour.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

—

Gleiche Kategorie (overlay)

overlay_mask · overlay_labels · annotate_invert · annotate_invert_path


*Provenance: annotate.py — ANNOTATE Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.