Skip to main content


Zutaten: Zucker, Kakaomasse (50%), Milchzucker, Weizenmehl, Vollmilchpulver, Magermilchpulver, Butterreinfett, Sahnepulver, Butter (1,4%)
Kann Spuren von Analysis und Geometrie enthalten.

60-titel_kosinus

Wie das JPG-Format funktioniert

Max hat beim Frauenhandball eines befreundeten Vereins Fotos gemacht. Es war recht anstrengend. Er hatte nur einen kleinen Chip und hat viele Fotos gemacht. Doch sie sehen echt verpixelt aus. Nun fragt er Rike um Rat.

60_DSC9931-ausschnitt
©Foto (unkomprimiert): Dorothea Deppermann, HS OWL, 2016.

Max Schau mal, ist da was zu retten?

Rike Hmm, zeig mal, was sind denn Deine Einstellungen?

Das JPG-Format

Max Ich hatte nicht so viel Platz auf dem Speicher, da habe ich die kleinste Größe 2000 px gewählt und JPG. Die Bilder sind ja für ein Online-Magazin, da muss es nicht größer sein. Das Bild hier wär' ein echt gutes Titelbild!

Rike Hey Max, ich glaube, da ist nichts zu machen.

Max Ja, kannst Du das denn nicht „entpacken“?

Rike Ja weißt Du, wenn Du JPG wählst und eine hohe Kompression, dann kommt eben so etwas heraus. Pass auf, ich erklär's Dir! Ich fange mal eindimensional an.

Max Hmm.

Rike Das JPG-Format verkleinert die Files, das weißt Du ja.

Max Ja!

Rike Doch dafür zahlst Du einen hohen Preis. Schau, wenn Du eine Funktion hast, sagen wir mal

\(f(x) = x^2\),

dann ist es möglich, die durch andere Funktionen anzunähern. Die bekannteste Näherung hat sich Fourier ausgedacht, da nimmt man für Funktionen auf dem Intervall von \((-\pi, + \pi)\) die Sinus- und Kosinusfunktionen. In der Bildverarbeitung hat man für das JPG-Format nur ein halbes Intervall genommen.

Max Ok

Die 1-dimensionale Kosinustransformation

Rike Stell' Dir vor, Du hast einen Farbverlauf in einem Bild, nur in \(x-\)Richtung, und zwar einen quadratischen. Wir nehmen nur die Helligkeiten, bei Farben geht das genauso, Du mußt den Algorithmus nur mehrfach machen, für jede Farbe einmal.

Max Ja, lass uns nur Helligkeiten betrachten.

Rike Wir versuchen nun, Deinen Helligkeitsverlauf durch Funktionen zu nähern. Dazu wird das Bild in Streifen von je 8 Pixeln zerlegt, und in jedem Streifen hofft man, durch Kosinusschwingungen, den Helligkeitsverlauf anzunähern.

Kosinusfunktionen \(\cos(mx)\) auf \((0, \pi)\)

Max Warum in Streifen mit 8 Pixeln?

Rike Eigentlich ist es zweidimensional in Kästchen mit 8 mal 8 Pixeln. Das ist ein guter Kompromiss.

Max Und weiter?

Rike Wir versuchen nun, \(f(x)\) als Summe von Kosinusfunktionen zu schreiben. Diese Kosinusfunktionen bilden - genauer gesagt - so eine Art Vektorsystem, die einen geeigneten Funktioneraum aufspannen.

Max Was?

Rike Ja, die Kosinusfunktionen,

\(\cos (mx),\; m=0,1,2,3,\dots \),

unendlich viele!, bilden eine Verallgemeinerung der Einheitsvektoren eines Koordinatensystems. Wir müssen sie geeignet normieren, damit sie die Länge 1 haben, und wir müssen es irgendwie schaffen, dass sie senkrecht aufeinander stehen.

Max Ok.

Das Skalarprodukt

Rike Dieses senkrecht Aufeinanderstehen organisiert das Skalarprodukt. Wenn Du zwei reellwertige Funktionen \(f\) und \(g\) auf dem Intervall \((0, \pi)\) hast, dann erklärt man

\(\langle f, g \rangle := \int_0^\pi f(x) g(x) dx\)

als Skalarprodukt. Wenn das 0 wird, sagt man, die Funktionen stehen senkrecht aueinander.

Max OK

Rike Ja, und \(\cos (mx)\) steht senkrecht auf \(\cos (nx)\) für \(m\neq n\).

Max Ja?

Rike Ja, kannst Du nachrechen. Der Funktionenraum mit einem Skalarprodukt heißt Hilbertraum. In dem haben wir auch eine Norm, eine Länge:

\(\Vert f\Vert := \sqrt{\langle f,f \rangle}\)

Max Eine Länge einer Funktion?

Rike Ja, eine Länge einer Funktion. Und damit kann man die Abstände von Funktionen messen. Wenn wir also \(f(x)\) durch

\(a_0 + a_1 \cos (x) + a_2 \cos(2x) + \dots \)

annähern, fragen die Mathematiker, was „nähern“ bedeutet, und wie gut es ist. Hier schau mal, wenn ich das mal ausrechne, kriege ich für

\(f(x)=x^2\)

die folgenden Näherungen:

 

 

Max Die letzte Näherung passt am Rand nicht so gut. Kannst Du nicht einfach noch mehr Schwingungen dazu nehmen?

Rike Max, stimmt, genau das ist das Problem, der JPG-Algorithmus nähert nur für \(m=0, \dots , 7,\) und am Rand von allen 8er Streifen oder Kästchen ist die Näherung besonders schlecht. Das ist dann im Bild zu sehen. Und wenn Du die Näherung mit \(m=0\) benutzt, hast Du nur eine Konstante im gesamten Streifen. Da geht viel Information verloren.

Max Ja, das war wohl dann so bei mir.

Die Güte der Näherung

Rike Die Kosinustransformation geht so:

\(f(x) \rightarrow f_N(x) = a_0 + a_1 \cos (x) + a_2 \cos(2x) + \dots + a_N \cos (Nx) \)

und

\(f(x)-f_N(x) \rightarrow 0\) für \(N\rightarrow \infty\)

und zwar in der Norm des Hilbertraumes.

Max Was heißt das?

Rike Das konvergiert im quadratischen Mittel:

\(\int_0^\pi (f(x) - f_N(x))^2 dx \rightarrow 0\) für \(N\rightarrow \infty\)

Für eine gute Näherung müßten wir sehr viele Schwingungen benutzen. Aber das JPG lässt nur \(N\) bis 7 zu.

Max Dann haben wir ja immer einen Fehler?

Rike Aber auch eine gute Kompression, wir merken uns nur die Koeffizienten \(a_0, a_1, \dots, a_7\) anstelle der Funktion \(f(x)\).

Max Aber sagt mal, wenn ich 8 Bildpunkte mit 8 Helligkeiten habe und mir 8 Zahlen \(a_m\) dazu merken muß, die immer einen Informationsverlust bringen, soll ich das denn nicht lassen?

Rike Ja genau! Es gibt noch einen weiteren Aspekt: Du weißt ja schon, dass wir bei Bildern gar keine Funktionen auf einem Intervall \((0, \pi)\) haben. Wir haben nur 8 diskrete Punkte. Die nähern wir dann durch diese Kosinustransformation an, als wäre sie diskretisiert:

60_kosinus_diskret
Die Diskretisierung von \(f(x) = x^2\).

 

Und wenn Du das für diskrete Punkte \(x\) zeichnest, für Pixel, dann sieht das so aus:

 

Max Ok, jetzt kann ich mir das etwas vorstellen. Ich wäre nicht auf solche Ideen gekommen, danke, Rike!

* * *

Übungsaufgaben

  1. Kontrolliere, dass zwei Kosinusfunktionen \(\cos (mx)\) und \(\cos (nx)\) senkrecht aufeinander stehen!
  2. Welche und wie viele Kosinusfunktionen braucht man im 2-dimensionalen Fall?
  3. Finde selbst die Berechnungsvorschrift zur Berechnung der Koeffizienten \(a_m\)!

Lösungen

2. Im 2-dimensionalen Fall bilden \(\cos (mx) \cdot \cos(ny)\) das orthogonale System für \(x,y \in (0, \pi), m, n \in \{0,1,2,3,\dots , 7\}\). Das sind 64 verschiedene.