Jim Blinn What`s the Deal with DCT?
Transcription
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