clahe — 2D gray op

• Datenarten: image → image

• Aufruf: fullseye.apply(img, "clahe", a=0.5, b=0.5) (das 2-D-Modell ist ein Bild plus zwei skalare Regler a,b∈[0,1])

clahe: input → output

*Die Abbildung ist die tatsächliche Ausgabe auf einer synthetischen 128×128-Eingabe. Links Eingabe, rechts Ausgabe. Punktwolken als Draufsicht-Streudiagramm (Helligkeit = z), 1-D-Reihen als Linie, Volumen als Maximum-Projektion entlang z, Videos als mittleres Bild, komplexe Bilder als Betrag; Rückgabewerte, die kein Bild ergeben, werden als Werte gezeigt.*

Regler a durchfahren (0,1 / 0,5 / 0,9, der andere Regler auf Standard):

▸ clahe: Regler a durchfahren (Doku-Website)

Regler b durchfahren (0,1 / 0,5 / 0,9, der andere Regler auf Standard):

▸ clahe: Regler b durchfahren (Doku-Website)

Auf anderen Bildern (synthetische Szene / Foto / Münzen. Obere Reihe: Eingaben, untere Reihe: deren Ausgaben. Regler auf Standard):

▸ clahe: andere Eingaben (Doku-Website)

*Die 4. Spalte ist eine Farb-Eingabe (H,W,3). Dieser Op verarbeitet Farbe, ohne Kanäle zu vermischen (er faltet den Farbkanal nicht als dritte Raumachse).*

Verwendung

Kontrastbegrenzte adaptive Histogrammangleichung (gekachelt, bilinear überblendet).

• a — Anzahl der Kacheln nb = 2 + int(3a) (das Bild wird in nb×nb geteilt)

• b — clip limit. Angegeben als Faktor 256**b relativ zur mittleren Zählung pro Bin (b=0 → 1-fach = ein vollständig eingeebnetes Histogramm = gerade Tonwertkurve = keine Verstärkung; b=1 → 256-fach = der Höchstwert, den 1 Bin annehmen kann, daher wirkt das Abschneiden nicht = reines AHE; b=0.5 → 16-fach. OpenCVs Standard clipLimit=40 entspricht ungefähr b=0.665).

★2026-09-02 (diese Korrektur): Bis dahin war b völlig wirkungslos (gemessen:

max|clahe(x,0.5,0.0) - clahe(x,0.5,1.0)| == 0.0 exakt). Das "C" in CLAHE ist das C von contrast limited, und gerade das clip limit unterscheidet AHE von CLAHE, daher war die Implementierung AHE und nicht CLAHE - der Name hat gelogen. Hier wurde das clip limit implementiert und b zugewiesen, und der Faktor so gewählt, dass b=1 das Ende ist, das mit der alten Implementierung bitidentisch ist (die Obergrenze, bei der kein Abschneiden auftritt = 256-fach, die Anzahl der Bins).

Die Kacheln PARTITIONIEREN das Bild (linspace-Grenzen, daher nimmt die letzte Kachel den Rest H % nb / W % nb auf), die clip-begrenzte CDF jeder Kachel ist ihre lokale Tonwertkurve, und jedes Pixel mischt die Kurven seiner (bis zu) 4 nächsten Kachelmittelpunkte mit bilinearen Gewichten — die Standard-CLAHE-Interpolation (Zuiderveld 1994).

2026-08-30: Interpolation hinzugefügt (KNOWN_ISSUES #4 - die alte Implementierung ebnete jede Kachel unabhängig ein, was an den Kachelgrenzen Unstetigkeiten (ein mit bloßem Auge sichtbares Gitter) erzeugte). In der Nachbarschaft eines Kachelmittelpunkts dominiert die CDF dieser Kachel weiterhin unverändert, daher ist dies eine stetige Version derselben Familie von Abbildungen wie die alte Implementierung.

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie gallery2d_gray_arith

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.

In Studio ausprobieren

Das Programm unten ist nachweislich lauffähig (gleiche Eingabe wie die Abbildung). In der Studio-Hilfe wird dieser Block zu Schaltflächen, die es sofort laden und ausführen.

clahe 0.50 0.50

▸ Diese Pipeline laden  ·  Laden & ausführen

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

• gallery2d_gray_arith — py -3.11 examples/gallery2d_gray_arith.py

• poc_dehazing — py -3.11 examples/poc_dehazing.py

Typkompatible Folge-Operatoren (nehmen image als Eingabe)

identity · gaussian · mean_box · bilateral · unsharp · median · min_filter · max_filter

Gleiche Kategorie (gray)

gamma · quantize_uniform · quantize_lloyd_max · quantization_error · dither_ordered · dither_floyd_steinberg · companding_mu_law · banding_map


*Provenance: ops.py — 2D 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.