Jim Blinn What`s the Deal with DCT?

P
roseminar
Proseminar
Pioniere der Computergraphik : Jim Blinn
What’s the Deal with DCT?
Johannes Speckmann
Universität Ulm
J
im
B
linn
P
roseminar
J
Einführung
Unbearbeitete Grafiken sind oftmals zu Groß, um sie im World Wide Web zu
veröffentlichen oder in größerer Zahl auf einem begrenzten Datenträger wie zum
Beispiel einer Diskette speichern zu können. Um die Datengröße zu verringern,
werden Grafiken mit Hilfe von so genannten Kompressionsverfahren komprimiert.
Eines dieser Verfahren ist die Diskrete Kosinus Transformation (kurz DCT), welche
aufgrund ihrer sehr guten Eigenschaften in allen heutigen Standards zur Bild- und
Videokodierung angewandt wird.
Die DCT wurde aus der DFT abgeleitet, der Diskreten Fourier Transformation, auf
die ich im folgenden Teil näher eingehen werde.
Allgemeine Erklärung
Eine Transformation kann man sich als eine Maschine vorstellen, die Funktionen in
andere Funktionen umformt. Ähnlich ist es bei der Fourier Transformation, welche
man als eine Frequenz -Transformation bezeichnen kann. Diese zerlegt eine
Funktion, s(x), der Zeit (wie eine Schallwelle) oder des Raumes (wie ein Bild) in ihre
Sinus- und Kosinus-Bestandteile (Basisfunktionen) mit verschiedenen Frequenzen.
Es entsteht eine Funktion, F(f), die in ihren Frequenzbereich transformiert wurde.
Wie bei allen vorausgegangenen Bildkomprimierungsverfahren wurde auch bei der
DCT und DFT das Bild in 8x8 Pixelblöcke eingeteilt. Auf die entstandenen
Pixelblöcke werden zweidimensionale DCT’ s angewandt.
Frequenzen werden innerhalb einer Einheit betrachtet. Eine Einheit besteht aus
einem Bereich von acht Samples (Ein Sample ist eine Farbkomponente eines
Pixels). Zum Beispiel ist eine Frequenz von 1 eine Sinus- oder Kosinuskurve mit
einem Zyklus über den acht Samples.
im
B
linn
P
roseminar
Die Diskrete Fourier Transformation
Zum besseren Verständnis der zweidimensionalen DFT wird zunächst die
Eindimensionale vorgestellt. Hierbei ist sx eine Liste, bestehend aus 8 Werten
(Pixelwerte). Die Definition lautet:
Ff = ‚ sx e-2 pifx ê 8
7
x=0
Mit Hilfe der Trigonometrie, lässt sich die Funktion deutlicher gliedern. Durch trenne
des realen und des imaginären Teils folgt:
Ff = ‚ sx cos J
7
2 pfx
2 pfx
N - i ‚ sx sin J
N
8
8
x=0
7
x=0
Kurze Herleitung der obigen Funktion:
Ff = ‚ sx e-2 pifx ê 8
7
x=0
ïFf =
7
„
- ix J
sx e
2 pf N
8
x=0
Zu erkennen ist nun die Eulersche Formel:
eix = cosx + i * sinx
Woraus durch einsetzen folgt:
Ff = ‚ sx cos J
7
x=0
7
2 pfx
2 pfx
N - i ‚ sx sin J
N
8
8
x=0
Dabei ist
FRf = ‚ sx cos J
7
x=0
2 pfx
N
8
der reale und
FIf = ‚ sx sin J
7
x=0
2 pfx
N
8
der imaginäre Teil.
f
J
im
B
linn
P
roseminar
J
Beim genaueren anschauen der Gleichungen könne wir sehen, dass man die Fourier
Transformation auch als Matrixprodukt schreiben kann. Dieses setzt sich für den
realen bzw. den imaginären Teil aus einer Matrix der Kosinus- bzw. Sinuswerte,
multipliziert mit dem Samplevektor sx, zusammen. Die Werte der Matrix lassen sich
laut der Gleichung immer als ein vielfaches von 2л / 8 =л / 4 = 45° berechnen. Zur
besseren Übersicht schreiben wir sin(45°) = cos(45°) = sqrt(2) / 2 ≡ r
1
r
0.5
1
2
3
4
5
6
-0.5
-1
Über das Berechnen der Kosinuswerte entsteht der reale Teil der Transformation:
FR = Rs
i FR0 y
i1
FR1
1
FR2
1
FR3
1
=
1
FR4
1
FR5
1
FR6
k FR7 { k 1
1 1 1
r
0 -r
0 -1 0
-r 0 r
-1 1 -1
-r 0 r
0 -1 0
r
0 -r
1 1 1 1 y i s0 y
s1
-1 -r 0 r
s2
1 0 -1 0
-1 r
0 - r s3
1 - 1 1 - 1 s4
-1 r
0 - r s5
1 0 -1 0
s6
- 1 - r 0 r { k s7 {
Über das Berechnen der Sinuswerte entsteht der imaginäre Teil der Transformation:
FI = Ss
i FI0 y
i0
FI1
0
FI2
0
FI3
0
=
0
FI4
0
FI5
0
FI6
0
k
k FI7 {
0 0 0 0 0 0 0 y i s0 y
r
1 r 0 - r - 1 - r s1
1 0 - 1 0 1 0 - 1 s2
r - 1 r 0 - r 1 - r s3
0 0 0 0 0 0 0
s4
-r 1 -r 0 r -1 r
s5
-1 0 1 0 -1 0 1
s6
-r -1 -r 0 r
1 r { k s7 {
im
B
linn
P
roseminar
J
Beim genaueren analysieren der entstandenen Matrizen fällt auf, dass beide
symmetrisch sind. Das heißt, dass die Matrix R gleich der transponierten Matrix von
R ist (R[i, j] = R[j, i]). Des Weiteren sind sie aufgrund sich wiederholender Reihen
singulär (dh. sie haben nicht den vollen Rang).
Die Reihen der Matrix R sind mit einer Abtastrate ((Abtast-)Frequenz) digitalisierte
Kosinusfunktionen, wogegen die der Matrix S Sinusfunktionen darstellen, digitalisiert
mit der gleichen Abtastrate.
Eine Reihe einer solchen Matrix wird Basisfunktion genannt.
Die Inverse Diskrete Fourier Transformation
Die inverse (umgekehrte) Transformation ist definiert als:
sx =
1 7
2 pfx
1 7
2 pfx
‚ Ff cos J
N+i
‚ Ff sin J
N
8 f =0
8
8 f =0
8
Nachweisen kann man dies folgendermaßen:
Die „forward“ Transformation ist definiert als die folgende 8x8 Matrix:
Ff = R - iS
Die Matrixform der Umkehrung („inverse“) ist:
sx = 1/8 (R + iS)
Wenn man diese zwei Matrizen multipliziert ergibt sich:
Id = 1/8 ((RR + SS) + i(SR – RS))
Beispiel:
Die Basisfunktionen (die Reihen der Matrix) sind orthogonal. Das heißt, dass jedes
Skalarprodukt zweier verschiedener Reihen immer 0 ergibt. Somit lässt sich das
Produkt von RR und SS leicht berechnen.
i8 0 0 0 0 0 0 0y
0
0
0
RR =
0
0
0
k0
4
0
0
0
0
0
4
0
4
0
0
0
4
0
0
0
4
0
4
0
0
0
0
0
8
0
0
0
0
0
4
0
4
0
0
0
4
0
0
0
4
0
4
0
0
0
0
0
4{
im
B
linn
P
roseminar
i0
0 0 0
0 4 0 0
0 0 4 0
0 0 0 4
SS =
0 0 0 0
0 0 0 -4
0 0 -4 0
k 0 -4 0
0
J
0 0 0 0 y
0 0 0 -4
0 0 -4 0
0 -4 0 0
0 0 0 0
0 4 0 0
0 0 4 0
0 0 0 4 {
Des Weiteren addiert man die erhaltenen Matrizen und teilt sie anschließend durch
8. Man erhält eine identische Matrix.
Die identische Matrix sagt uns, dass es nach der „forward“ und der anschließenden
„inverse“ Transformation keine Veränderung, sprich keinen Verlust gibt. Dies stimmt
mit der Realität nicht zu 100% überein, da bei der Rechnung mit r meist
Rundungsfehler auftreten.
Eine kompaktere Form
Die DFT benötigt eine Liste aus 8 Nummern und erzeugt daraus 16, welche sich aus
8 realen und 8 imaginären Koeffizienten zusammensetzen. Dies scheint das „Gesetz
der Erhaltung“ („law of conservation“) zu verletzen. Dieses sagt im Groben aus, dass
aus gegebenen Informationen nicht mehr Informationsgehalt gewonnen werden
kann.
Aufgrund der vorher erlangten Informationen wissen wir aber, dass die Matrizen
singulär sind. Beim betrachten der Matrix R fällt die Gleichheit verschiedener Reihen
auf. Somit ist die Reihe 3 gleich der Reihe 5, Reihe 2 gleich der Reihe 6 und Reihe 1
gleich der Reihe 7. Es gibt also nur 5 unabhängige Reihen, da 5,6 und 7 redundante
Informationen erhalten.
Ähnlich in Matrix S. Hier ist Reihe 0 gleich der Reihe 4, Reihe 3 gleich dem Minus
der Reihe 5, Reihe 2 gleich dem Minus der Reihe 6 und Reihe 1 gleich dem Minus
der Reihe 7. Somit enthalten Reihe 1,2 und 3 interessante Informationen. Aus den
erlangten Informationen bilden wir eine Transformationsmatrix, welche nur die
interessanten Informationen der DFT enthält. Außerdem müssen wir uns einen Ausgangsvektor definieren, der nur die einzigartigen Elemente von F beinhaltet. Diese
sind F0, der reale und imaginäre Teil von F1, F2 und F3 und der reale Teil von F4.
Wir erhalten die Matrix F:
i FR0 y
1 1 1 1 1 1 y i s0 y
i1 1
FR1
s1
1 r
0 -r -1 -r 0 r
FI1
0 r
1 r
0 - r - 1 - r s2
FR2
s3
1 0 -1 0 1 0 -1 0
=
0 1 0 - 1 0 1 0 - 1 s4
FI2
0 - r s5
1 -r 0 r -1 r
FR3
0 r -1 r
0 - r 1 - r s6
FI3
k FR4 { k 1 - 1 1 - 1 1 - 1 1 - 1 { k s7 {
im
B
linn
P
roseminar
J
Die Basisfunktionen der Matrix könne auch graphisch dargestellt werden:
Hierbei stellt die Reihe 0 die DC Komponente da, die als Mittelwert der Funktion
(Grundfarbe des Bildes) gesehen werden kann. Reihe 1 und 2 sind digitalisierte
Sinus- und Kosinuskurven der Frequenz 1, Reihe 3 und 4 der Frequenz 2, Reihe 5
und 6 der Frequenz 3 und Reihe 7 eine Kosinuskurve der Frequenz 4.
Die Diskrete Kosinus Transformation
Wie in der Erklärung zur DFT gezeigt, besteht das Ergebnis dieser aus komplexen
Zahlen. Das Ziel bei der nun folgenden Diskreten Kosinus Transformation ist es ohne
komplexe Zahlen auszukommen.
Ausführen wollen wir dies mit der Veränderung der Basisfunktionen, indem wir nur
die Kosinusfunktionen verwenden. Außerdem verwenden wir halbzahlige
Frequenzen. Das heißt, wir benutzen anstatt der bis zu diesem Zeitpunkt
verwendeten Frequenzen 0, 1, 2, 3, 4 die Frequenzen 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5 .
All dies läuft auf folgende Definition der DCT hinaus:
Guê2 =
7
H2 x + 1L up
1
Ku ‚ sx cos J
N
2
16
x=0
K0 = sqrt(2)/2 und Ku = 1 für alle u ≠ 0 sind definiert.
Gu/2 beschreibt das Ausgabeelement, gekennzeichnet mit der Frequenz für die es
steht. Da die DCT Formel allein auf Samples der Kosinusfunktion zugreift, können
wir uns zur Einfachheit eine Funktion definieren:
cj ª cos J
jp
N
16
Man brauch nur die Werte des ersten Quadranten der Kosinusfunktion betrachten,
co,…,c7 , da die Kosinus von allen anderen Winkeln durch das Verlagern und
Reflektieren zurück zum ersten Quadranten erhalten werden können.
1
0.5
1
-0.5
-1
2
3
4
5
6
im
B
linn
P
roseminar
Die Werte sind in folgender Tabelle dargestellt:
Die Definition der DCT geschrieben als Matrix lautet:
G = Cs
i G0 y
i c4
G1ê2
c1
G1
c2
G3ê2
1 c3
=
G2
2 c4
G5ê2
c5
c6
G3
c7
k
G
k 7ê2 {
c4 c4 c4
c3 c5 c7
c6 -c6 -c2
-c7 -c1 -c5
-c4 -c4 c4
-c1 c7 c3
-c2 c2 -c6
-c5 c3 -c1
c4
-c7
-c2
c5
c4
-c3
-c6
c1
c4 c4 c4 y i s0 y
-c5 -c3 -c1 s1
-c6 c6 c2
s2
c1 c7 -c3 s3
-c4 -c4 c4
s4
-c7 c1 -c5 s5
c2 -c2 c6
s6
-c3 c5 -c7 { k s7 {
Die oberste Reihe müsste eigentlich die Werte K0c0 enthalten. Da K0 = c4 und c0 = 1
ist, wurde zur Einfachheit nur c4 geschrieben.
Wenn man sich die Matrix genauer anguckt, sieht man auch hier verschieden
Muster. Wenn man z.B. die Minuszeichen ignoriert und die Reihe c4 als eine
unkenntlich gemachte c0 betrachtet, enthält jede Reihe jeden Wert von cj.
Außerdem ist die Matrix C nicht symmetrisch, aber sie hat die Eigenschaft der
Orthogonalität. Des Weiteren ergibt jede Reihe multipliziert mit sich selbst 1. Das
heißt, dass die Matrix C multipliziert mit der transponierten Matrix C die identische
Matrix ergibt. Die transponierte Matrix ist also gleich der Inversen.
Resultat: Die DCT Matrix ist eine Rotationsmatrix im 8-dimensionalen Raum.
J
im
B
linn
P
roseminar
J
Vergleich zwischen DFT und DCT
Die kompakte Form der DFT (Matrix F) könnte man fast als Rotationsmatrix
bezeichnen. Die Eigenschaften einer solchen Matrix sind:
•
•
•
det R = 1
RT = R - 1
RTR = RRT = Idn
Um F einer Rotationsmatrix gleich zu machen muss man die oberste Reihe mit
sqrt(1/8) und die folgenden unteren Reihen mit sqrt(1/4) skalieren. Das Ergebnis der
Transformation, die Frequenzkomponenten, müssten ebenfalls geändert werden. Es
entsteht der Ausgabevektor ´FR0 ≡ sqrt(1/8)* FR0, ´FR1 ≡ sqrt(1/4)* FR1 usw. .
Die Hauptsache beim Vergleich zwischen DFT und DCT ist folgender Punkt. Alle
Multiplikationen der DFT schließen die eher simplen Nummern 0, 1, -1, r und –r ein.
Somit ist die kompakte DFT mit nur vier Multiplikationen von r und ein paar
Additionen und Subtraktionen darzustellen. Beim Matrixprodukt der DCT mussten
wir alle möglichen Permutationen der Produkte von cj und sx berechnen. Dies sieht
auf den ersten Blick nach 64 Multiplikationen aus. Mit Hilfe von DCT Algorithmen,
welche den Vorteil der Symmetrie ausnutzen, ist die Berechnung aber schnell
möglich. Die Schnelligkeit einer acht - Element DFT besitz trotzdem keiner.
Warum ist die DCT besser?
Der Grund, warum die DCT trotz schwerer Berechnung häufiger verwendet wird als
die DFT ist, dass zur guten Annäherung an ein Signal weniger DCT Koeffizienten
gebraucht werden als DFT Koeffizienten. Das heißt, dass die DCT mehr Energie
bzw. mehr Bedeutung den niedrigen Frequenzen zuweist als die DFT. Der einzige
Grund einer Transformation ist also die Erwartung, dass die Koeffizienten mit der
höheren Frequenz gröber quantisiert werden, als die Koeffizienten mit der niedrigen
Frequenz.
Die DCT und DFT Koeffizienten sind in folgender Tabelle aufgeführt:
im
B
linn
P
roseminar
J
Wählt man aus diesen, die drei Größten (vom absoluten Wert) aus, und führt
anschließend die jeweilige inverse Transformation durch, erhält man folgende Werte:
Graphisch dargestellt:
original Funktion
inverse DCT
inverse DFT
Zu sehen ist das bessere Ergebnis der DCT. Dies kommt daher, weil die DFT
versucht eine Wiederholung der Funktion zu modellieren. Aufgrund dessen eher
geeignet für periodische Signale.
Die DCT dagegen arbeitet mit einer Dreieckskurve, welche aufgrund weniger
Unterbrechungen, den Gebrauch von hohen Frequenzen verringert.
Der zweidimensionale Raum
Die Bildkompression allerdings basiert auf der zweidimensionalen DCT. Diese
besteht aus dem Anwenden der eindimensionalen DCT auf jede Spalte, gefolgt von
jeder Reihe. Daraus entsteht eine 8x8 Matrix G:
G = FsFt
im
B
linn
P
J
roseminar
im
Quantisierung
Auf die DCT folgt die Quantisierung. Die DCT-Koeffizienten werden durch einen
Quantisierungsfaktor (Quantisierungsmatrix) geteilt und auf den nächsten Integerwert
gerundet. Der DC-Koeffizient, der den Farbmittelwert des Blocks (und damit die
Hauptinformation) enthält, wird nicht dividiert. Die Umkehrabbildung multipliziert den
quantisierten Wert später einfach wieder mit dem Quantisierungsfaktor. Durch die
dabei entstehenden Rundungsfehler gehen Informationen verloren.
Bei JPEG kann man den Grad der Kompression wählen, dabei wird einfach nur der
Quantisierungsfaktor entsprechend skaliert. Eine Kompression von kleiner 1/10 ist
ohne großen Informationsverlust möglich, zu starke Komprimierung führt allerdings
zu Artefakten, das bedeutet , dass die Blockstruktur des Gesamtbildes sichtbar wird.
Das Bild wirkt "pixelig".
Beispiel - Quantisierung
1260 -1
-23 -17
-11
-9
-7
-2
-1
-1
2
0
-1
0
-3
2
-12
-6
-2
0
1
2
0
-4
-5
-3
2
1
2
0
-1
-2
2 -2 -3 1
-3 0 0 -1
0 -1 -1 0
1 0 0 0
0 -1 1 1
-1 1 1 -1
0 2 1 -1
2 1 -1 0
79
-2
-1
0
0
0
0
0
Quantisierung
Beispiel - Quantisierungsmatrix
Luminanz:
79
-2
-1
0
0
0
0
0
0
-1
-1
0
0
0
0
0
-1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
-1
0
0
0
0
0
-1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
B
linn
P
roseminar
J
Entropiekodierung
Die abschließende Entropiekodierung (z.B. durch Huffman) arbeitet die 64 Werte in
einer Zick-Zack-Kurve ab und erzeugt so einen Bitstrom von 64 Integer-Werten. Der
erste Wert ist der DC-Koeffizient, allerdings wird nur die Differenz zum DCKoeffizienten im vorhergehenden Block kodiert. Dadurch und durch die Abarbeitung
hin zu den höheren Frequenzen entstehen erneut kleinere Zahlen.
Auf Beispiel oben bezogen: 79 0 -2 -1 -1 -1 0 0 -1
im
B
linn
P
roseminar
Literaturverzeichnis
•
Blinn, Jim (1998). What’s the Deal with DCT. In: Jim Blinn’s Corner.
Morgan Kaufmann Publishers
•
Hendrich, Norman (2004). Kapitel 6 - Bilder, JPEG, Kapitel 7 – Grundlagen
der Videokodierung, Kapitel 8 – MPEG1. In: Skript für Medientechnologie,
www.tech-www.informatik.uni-hamburg.de
•
Jendryschik, Michael & Becker, Jens (2004). Diskrete Kosinus
Transformation. In: www.jendryschik.de
•
Milde, Thorsten (1999). Videokompressionsverfahren im Vergleich. JPEG,
MPEG, H.261, XCCC, Wavelets, Fraktale. Heidelberg: dpunkt-Verlag
•
Strutz, Thilo (2002). Bilddatenkompression: Grundlagen, Codierung, JPEG,
MPEG, Wavelets. Wiesbaden: Vieweg Verlag
•
Wickenburg, Sebastian & Rooch, Aeneas & Groß, Johannes. Kapitel 6a Die Eindimensionale Diskrete Kosinus Transformation. In: Die JPEGKompression,
www.mathematik.de/spudema/spudema_beitraege/beitraege/rooch
Weitere URL:
•
•
•
•
www.educeth.ch
www.wikepedia.de (Fourier-Transformation)
www.mathworld.com
www.comnets.rwth-aachen.de
J
im
B
linn