Diskrete Kosinus Transformation
Die diskrete Kosinustransformation (engl. Discrete Cosinus Transform, DCT) ist, ähnlich wie die Schnelle Fourier Transformation, eine sehr bedeutende Transformation in der Informatik. Sie wird häufig dazu eingesetzt um Redundanz in Bildsignalen zu reduzieren, so ist sie zum Beispiel das Kernstück der JPEG Kompression.
Vorbemerkungen
Angenommen wir haben eine Funktion , die sich als gewichtete Summe von Funktionen zusammensetzt. Also konkret
Es gibt nun verschiedene Möglichkeiten, wie wir diese Funktion beschreiben können, wenn die bekannt sind. Eine Möglichkeit ist beispielsweise durch Angabe der Koeffizienten . Damit erhalten wir einen Vektor
der eindeutig beschreibt. Diese Darstellungsform nennt man auch Koeffizientendarstellung.
Eine weitere Möglichkeit wäre die Beschreibung der Funktion anhand von paarweise verschiedenen Koordinatenpaaren durch die führt. Diese Darstellungsform heißt auch Stützstellendarstellung.
Die Überführung von einer Darstellung in die andere ist gerade die Aufgabe einer Transformation. Bei der DCT werden für die Funktionen spezielle Kosinusfunktionen benutzt, mehr dazu im nächsten Abschnitt.
Die Inverse Diskrete Kosinunstransformation (IDCT)
Wir fangen rückwärts an, da so die Herleitung einfacher zu verstehen ist. Bei der IDCT will man von der Koeffizientendarstellung in die Stützstellendarstellung transformieren. Also wir haben den Vektor gegeben, und somit die Funktion
Offensichtlich erhält man einen Wert zu einem in der Stützstellendarstellung einfach durch einsetzen. Nun sucht man sich bei der DCT diese Stellen nicht einfach beliebig aus, sondern definiert sie:
Die Funktionen werden auch definiert, nämlich:
Dabei nennt man auch den Skalierungsfaktor.
Wir haben also paarweise verschiedene -Werte für die Stützstellen und paarweise verschiedene Kosinusfunktionen und können so eine Transformationsmatrix definieren:
Die inverse diskrete Kosinustransformation ist nun einfach definiert durch
Dies entspricht nun gerade einer Überführung des Vektors (Koeffizientendarstellung) in einen Vektor , der die Stützstellen an den Werten enthält. Denn wegen der ausgeschriebenen Matrix-Vektormultiplikation für eine Komponente ist
gerade die Auswertung der Funktion an der Stelle !
Die Vorwärtstransformation
Kommen wir nun zur eigentlichen DCT. Wir möchten also den Vektor wieder zurück in den Vektor überführen. Ein bisschen lineare Algebra liefert
Offenbar ist also die Multiplikation von von rechts mit der inversen Transformationsmatrix gerade die Vorwärtstransformation. Also definieren wir
Nun gibt es jedoch noch einen schönen Trick. Man kann nämlich beweisen, dass gilt
Damit folgt nun , was die Berechnung der inversen Transformationsmatrix erheblich vereinfacht! Anders geschrieben ist also
Es gilt also
Diese Formel findet man auch häufig in Büchern.
2D Transformation
Eingangs wurde erwähnt, dass die DCT wichtig für die Kompression von Bilddaten ist. Diese sind jedoch zweidimensional. Wir benötigen also eine DCT die nicht auf Vektoren, sondern auf Matrizen operiert! Sei nun eine Matrix die wir transformieren möchten, so liefert die Multiplikation
die 1D Transformation jedes einzelnen Spaltenvektors von , dessen Transformierte die Spaltenvektoren in sind. Da wir nun noch in die andere Dimension transformieren wollen, müssen wir folgende Operation durchführen:
Wir transponieren also das Zwischenergebnis , führen jetzt die DCT durch und transponieren das Ergebnis zurück. Anschaulich haben wir also eine 1D-DCT mit jedem Zeilenvektor in durchgeführt. Fassen wir zusammen:
Die 2D Diskrete Kosinustransformation ist also
Die Rücktransformation ist damit trivial herleitbar und ist
Damit gilt: Die Matrix ist orthogonal und ihre Spaltenvektoren bilden eine Orthonormalbasis des Vektorraums . Das heißt je zwei paarweise verschiedene Spalten von liegen orthogonal zueinander, und ihre Norm beträgt jeweils . Die Matrizen und heißen auch orthogonal äquivalent.
Interpretation
Nochmal zur Erinnerung: Bei der Vorwärtstransformation transformieren wir Vektoren, die eine Stützstellendarstellung haben, in Vektoren die eine Koeffizientendarstellung der einzelnen Summanden der Kosinusterme haben. Fassen wir die Stützstellen als die zeitdiskreten Amplituden eines Audiosignals zu den Zeitpunkten auf, so liefert die Transformation quasi die Stärke der Einzelfrequenzen, die durch die Kosinusterme beschrieben werden. Man zerlegt also ein Signal in seine einzelnen Frequenz-Bestandteile aus denen es zusammengesetzt ist.
Weiteres zur DCT
- http://de.wikipedia.org/wiki/Diskrete_Kosinustransformation
Diskrete Kosinustransformation auf Wikipedia - http://www.iti.fh-flensburg.de/lang/algorithmen/fft/dct.htm
Diskrete Kosinustransformation