Gegeben sei ein Bild mit einer Menge von beobachteten Farben. Es sei
die Anzahl der verschiedenen Farben in dem Bild.
Wenn der Videocontroller zwar alle
Farben darstellen kann, aus
Platzgründen aber dennoch eine Farbtabelle benötigt wird, so ist es
sinnvoll die Farben so zu wählen, daß sie das gegebene Bild möglichst
gut repräsentieren.
Zunächst wird für jede Farbe die Häufigkeit ihres
Auftretens ermittelt.
Ggf. muß ``vorquantisiert'' werden von 24 Bit auf
15 Bit (je 5 Bit für Rot, Grün, Blau); hierdurch
erhält das Histogramm maximal 32768 Einträge.
Sei der Abstand zweier Farbtupel
,
z.B.
Optimaler Algorithmus
Gegeben sei eine Menge von beobachteten Farben.
Gesucht ist eine Menge
von Repräsentanten, so daß der Ausdruck
Da die exakte Bestimmung von eine exponentielle Laufzeit
verursacht, begnügt man sich mit einer Näherungslösung.
Popularity-Algorithmus (1978)
Wähle die häufigsten Farben.
Nachteil: Selten vorkommende Farben werden schlecht repräsentiert.
Diversity-Algorithmus (, John Bradley, 1989)
Initialisiere M mit der häufigsten Farbe
for i := 2 to K do
erweitere M um die Farbe des Histogramms,
die zu allen Farben aus M den größten Abstand hat
end
Median-Cut (Heckbert, MIT 1980)
Ziel:
Finde Repräsentanten, die jeweils
möglichst gut gleich viele Farben
repräsentieren.
Idee:
Zerlege den RGB-Würfel mit den beobachteten
Farbhäufigkeiten solange sukzessive in Unterwürfel
durch Aufsplitten an einer Trennfläche, bis
Unterwürfel entstanden sind.
Initialisiere RGB-Wuerfel mit Häufigkeiten der beobachteten Farbtupel
Initialisiere Wurzel des Schnittbaums mit Gesamtzahl der PixelWhile noch_nicht_genügend_Blätter do
Wähle Blatt mit der größten Pixelzahl
Bestimme umschliessende Box
Bestimme Achse mit größtem Wertebereich
Durchlaufe Box längs dieser Achse
Teile am Median in zwei Hälften
Trage Hälften als Soehne ein
end
Für jedes Blatt wähle den Mittelwert aller in ihm liegenden Farben.
Wenn das Bild verschiedene Farben enthält und diese durch
verschiedene Farben repräsentiert werden sollen, dann liegt die Laufzeit
in
.
Abbildung
9.3
zeigt
die Anwendung des Median-Cut-Algorithmus anhand eines Beispiels.
Zur einfachen Darstellung ist der Farbbaum zweidimensional gewählt.
Gezeigt wird die Verteilung der Farbtupel aus dem Bereich
in einem Bild mit
Pixeln.
Eingetragen sind an der Position
die Häufigkeit
des Farbtupels
.
Schnittlinien sind gestrichelt, umschließende Boxen durchgezogen
gezeichnet.
Abbildung 9.4 zeigt für das vorliegende Beispiel den Schnittbaum nach Anwendung des Median-Cut-Algorithmus. Die Knoten sind markiert mit der Anzahl der noch zu quantisierenden Pixel, an den Kanten ist vermerkt, ob es sich um einen Links/Rechts- oder um einen Oben/Unten-Schnitt handelt.
Floyd-Steinberg-Dithering (1975)
Der bei Verwendung einer Farbtabelle verursachte
Fehler beim Quantisieren eines Pixels wird auf die
Nachbarpixel verteilt (bevor diese quantisiert werden).
for (i = 0; i < M; i++) for (j = 0; j < N; j++) { x = f[i][j]; /* hole Original-Farbe */ k = p(x); /* finde naechsten Repraesentant */ q[i][j] = k; /* zeichne quantisiertes Pixel */ e = d(x, k); /* bestimme Fehlerabstand */ f [i][j + 1] = f[i][j + 1] + e * 3.0/8.0; f [i + 1][j] = f[i + 1][j] + e * 3.0/8.0; f [i + 1][j + 1] = f[i + 1][j + 1] + e * 1.0/4.0; }
![]() 16 Mill. Farben |
![]() 256 Farben |
![]() 16 Farben |
![]() 4 Farben |
Abbildung
9.3
zeigt Original und quantisierte Versionen einer
Ausschnittvergrößerung,
erstellt von einem
True-Color-Bild.
Die Zahl der Farben bezieht sich jeweils auf das Gesamtbild.
Verwendet wurde der Median-Cut-Algorithmus mit anschließendem
Floyd-Steinberg-Dithering.