 
 
 
 
 
  
 
 
Gegeben sei ein Bild mit einer Menge  von beobachteten Farben. Es sei
 von beobachteten Farben. Es sei
 die Anzahl der verschiedenen Farben in dem Bild.
Wenn der Videocontroller zwar alle
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.
 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
 der Abstand zweier Farbtupel  ,
z.B.
,
z.B. 
 
Optimaler Algorithmus
Gegeben sei eine Menge  von beobachteten Farben.
Gesucht ist eine Menge
 von beobachteten Farben.
Gesucht ist eine Menge  von Repräsentanten, so daß der Ausdruck
 von Repräsentanten, so daß der Ausdruck
 
 ist der maximale Abstand, den eine Farbe zu ihrem
nächsten Repräsentanten hat.
 ist der maximale Abstand, den eine Farbe zu ihrem
nächsten Repräsentanten hat.
Da die exakte Bestimmung von  eine exponentielle Laufzeit
verursacht, begnügt man sich mit einer Näherungslösung.
 eine exponentielle Laufzeit
verursacht, begnügt man sich mit einer Näherungslösung.
Popularity-Algorithmus (1978)
Wähle die  häufigsten Farben.
 häufigsten Farben.
Nachteil: Selten vorkommende Farben werden schlecht repräsentiert.
Diversity-Algorithmus ( , John Bradley, 1989)
, 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: Jeder Repräsentant soll möglichst gleich viele Farbenrepräsentieren.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 enthält und diese durch  verschiedene Farben repräsentiert werden sollen, dann liegt die Laufzeit
in
verschiedene Farben repräsentiert werden sollen, dann liegt die Laufzeit
in  .
.
 
	
	
Abbildung 
8.11
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
![$[0 \ldots 15] \times [0 \ldots 15]$](img402.gif) in einem Bild mit
in einem Bild mit 
 Pixeln.
Eingetragen sind an der Position
 Pixeln.
Eingetragen sind an der Position  die Häufigkeit
des Farbtupels
 die Häufigkeit
des Farbtupels  .
Schnittlinien sind gestrichelt, umschließende Boxen durchgezogen
gezeichnet.
.
Schnittlinien sind gestrichelt, umschließende Boxen durchgezogen
gezeichnet.
 
	
	
Abbildung 8.12 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 
8.10
zeigt Original und quantisierte Versionen einer  Ausschnittvergrößerung,
erstellt von einem
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.
 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.
 
 
 
 
 
  
