histogram_match — COLORTRANSPORT matching op

• Datenarten: image2d × image2d → image2d

• Aufruf: import fullseye as fs; fs.ledger.histogram_match(src, ref, bins=None, ties='average') (die Implementierung direkt: import colortransport; colortransport.histogram_match(src, ref, bins=None, ties='average'); aus dem Register: opscolortransport.get("histogram_match"))

Verwendung

Gleicht die Werteverteilung von src an ref an (exakter 1-D-Optimaltransport).

Ersetzt Werte unter Erhalt des Rangs durch die Quantile der Referenz. Mit bins wird über die Verteilungsfunktion mit so vielen Stufen genähert -- schneller, aber nicht mehr exakt, daher ist der Standard None (exakt).

Wie Pixel gleichen Werts behandelt werden, ändert die Bedeutung des Bildes. Bei einer monotonen Abbildung sollte "gleiche Eingaben werden auf gleiche Ausgaben abgebildet" gelten, aber naives Ersetzen nach Rang reißt gleiche Werte auseinander. Gemessen (ein Integer-Bild mit 4 Pixeln vom Wert 2): die Ausgabe zerfiel in die 4 Werte 0.2222 / 0.3333 / 0.4444 / 0.5556. Das heißt, in einem zuvor flachen Bereich sprießen Tonwerte, die im Original nicht vorhanden waren. Integer-Bilder sind voller gleicher Werte, daher ist das keine Ausnahme, sondern der Normalfall.

• ties="average" (Standard) -- Pixel gleichen Werts erhalten von den ihnen zugewiesenen Referenzwerten den Mittelwert. Gleiche Eingaben werden auf gleiche Ausgaben abgebildet, die Monotonie bleibt erhalten. Dafür stimmt die Ausgabeverteilung nicht mehr exakt mit der Referenz überein (je Klumpen gleicher Werte wird die Verteilung treppenförmig gerundet). Bei kontinuierlicher Eingabe (keine gleichen Werte) bleibt sie exakt.

• ties="break" -- reißt nach rohem Rang auseinander. Die Ausgabeverteilung stimmt exakt mit der Referenz überein, aber in flachen Bereichen entstehen falsche Tonwerte. Nur wenn das Ziel die exakte Verteilung ist und man weiß, dass man es nicht als Bild betrachtet.

Jede Wahl kostet etwas (Exaktheit der Verteilung oder Flachheit flacher Bereiche), daher wurde es ein Argument, statt stillschweigend eines festzulegen.

Direkt auf ein mehrkanaliges Bild angewendet, zerstört es die Korrelation zwischen den Kanälen. Die Randverteilung jeder Achse passt, aber die Farbkombinationen können solche werden, die es im Original nicht gab. Um die Korrelation mitzutransportieren, method="gaussian" von color_transfer verwenden.

Hintergrundwissen (Physik und Konventionen hinter diesem Operator)

• colorimetry — Farbmetrik und Spektren — Farbe ist nur durch Spektrum × Lichtart × Beobachter bestimmt

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)

• color_transport — py -3.11 examples/color_transport.py

• poc_change_detection_misreg — py -3.11 examples/poc_change_detection_misreg.py

Typkompatible Folge-Operatoren (nehmen image2d als Eingabe)

poisson_blend

Gleiche Kategorie (matching)

color_transfer · gaussian_transport_map


*Provenance: colortransport.py — COLORTRANSPORT 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.