Druckdatei der Arbeit
Transcrição
Druckdatei der Arbeit
Inhaltsverzeichnis Einleitung 3 1. Grundlagen I: Die menschliche Wahrnehmung 5 2. Grundlagen II: Das digitale Bild 9 3. Exkurs: Die digitale Aufnahme 22 4. Das JPEG-Verfahren 24 5. Farbraumveränderung 27 6. Die Diskrete Kosinustransformation 28 7. Quantisierung 47 8. Codierung 49 9. Decodierung der JPEG-Bilddatei 55 10. Verschiedene Dateitypen im Vergleich 58 11. Änderungen in JPEG2000 58 Resümee 59 Anhang 63 Die Autoren 72 Quellenverzeichnis 73 „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 2/73 Einleitung Das Internet ist aus unserem heutigen modernen Leben nicht mehr wegzudenken: Ob man sich E-Mails schreibt oder im Chatroom miteinander plaudert, im Web seine Bahnfahrkarte, Bücher oder CDs kauft, ob man sich über das Kinoprogramm oder die Busfahrpläne informiert, per Internet seine Bankgeschäfte erledigt, Musik und Software sowie Updates und Gerätetreiber herunterlädt, Computerzubehör und Autos ersteigert, in Foren mit Leuten aus aller Welt über Fachliches diskutiert, für Hausaufgaben und wissenschaftliche Arbeiten recherchiert oder ob man sich und seine Firma auf einer eigenen Homepage darstellt - das World Wide Web ist ein fester Bestandteil unseres Lebens geworden. Und schon längst ist es mehr als nur ein bloßes Netzwerk, es hat die Ebene einer serviceorientierten virtuellen Umgebung erreicht, die von Konzernen und Firmen als Möglichkeit der Selbstdarstellung genutzt wird und in der die verschiedenen Websites um die Gunst der Besucher kämpfen. Bunt, ansprechend, benutzerfreundlich und "in" müssen Homepages heute sein. Umso wichtiger für die Welt des Internets ist im Laufe der letzten Jahre das Bild geworden. Bloßer Text auf Internetseiten ist langweilig, trocken und wirkt veraltet und unprofessionell. Schon längst ist das Bild mehr als nur Illustration. Es macht das möglich, was die Mittel des Internets sonst nicht hergeben: eine individuelle und ästhetische Gestaltung der Inhalte; das Bild ist Bestandteil des Layouts, es ist die Fassade nach außen. Dementsprechend sind Bilder in der Welt des Internets nicht mehr wegzudenken, da sie das Erscheinungsbild der Websites enorm bestimmen, sozusagen ihre Oberfläche sind, wie folgende Beispiele zeigt: Beim oberen Bild ist eine Website 1:1 abgebildet, beim unteren sind alle Bilder (d.h. alle als Bilder definierten Objekte der Homepage, z.B. auch bestimmter Text) weggelassen worden. Viele Websites benutzen Bilder anstelle von Text, um ihr Erscheinungsbild plattformunabhängig und möglichst absolut zu gestalten - so auch www.jaguar.de. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 3/73 Ohne Bilder, das heißt auch ohne als Bilder definierte Textobjekte, ist die Page nutzlos. Jedoch benötigen Bilder im Gegensatz zu reinem Text wesentlich mehr Speicherplatz (dieser Sachverhalt dürfte allgemein bekannt sein; mathematisch wird er in dieser Arbeit u.a. im Kapitel 2 gezeigt). Da die Inhalte des Internets über Datenleitungen übertragen werden, deren Kapazität begrenzt ist, wird also ständig nach einer Möglichkeit gesucht, speicherintensive Objekte, also umfangreiche Datenmengen, zwecks eines schnelleren Transportes zu verkleinern. Datenkompression gibt es nicht erst, seit das Internet die Haushalte der Normalbürger erobert hat, ganz im Gegenteil: Seit Daten (jeder beliebigen Art) ausgetauscht werden, wird schon aus Bequemlichkeit nach Möglichkeiten gesucht, den Umfang des Auszutauschenden zu verkleinern (z.B. durch Abkürzungen beim Schriftwechsel), was mit der Weiterentwicklung der Telekommunikation natürlich zunehmend wichtiger geworden ist. Gerade im Internet begegnen wir heutzutage täglich ausgefeilten Methoden der Datenkomprimierung, ohne es zu merken. Die bekannteste Art der Internet-Datenkompression transparent zu machen und darzustellen, ist Ziel dieser Arbeit. Wir werden erläutern, wie man heute mit ausgearbeiteten mathematischen Methoden Bilddaten verkleinert und gleichzeitig den Verlust an Bildqualität möglichst gering hält. Wir betrachten, erklären und veranschaulichen die Arbeitsweise und die mathematischen Hintergründe des Grafikformats JPEG, des bekanntesten und am weitesten verbreiteten Bildformates im Internet. Zuvor werden wir dazu klären müssen, wie Bilder vom menschlichen Auge überhaupt "gesehen" werden, wie sie technisch in Daten umgewandelt werden und wie sogenannte "digitale Bilder" beschaffen sind und wie sie "funktionieren". Schließlich blicken wir in die nähere Zukunft und beleuchten die neuesten, jedoch noch nicht als Standard etablierten Techniken der Bildkomprimierung fürs Internet. Wer nun anmerkt, einige Kapitel (z.B. Kapitel 1 über die menschliche Wahrnehmung) hätten mit Mathematik wenig zu tun, der möge beachten, dass man "Mathematik im Alltag" schwer anschaulich und für alle Leser (mit unterschiedlichen Vorkenntnissen) verständlich darstellen kann, ohne die umliegenden anderen Wissensgebiete zu betrachten, die mit der Mathematik in diesem Thema zusammenhängen. Eine Zusammenfassung dieser Arbeit (ohne detaillierte Erläuterungen) können Sie im Kapitel „Resümee“ lesen, um sich einen ersten überblick zu verschaffen oder bereits Bekanntes zu wiederholen. Ansonsten führt Sie diese Arbeit Schritt für Schritt mit ausführlichen Erklärungen und Beispielen durch die Thematik. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 4/73 1 Grundlagen I: Die menschliche Wahrnehmung Diese Arbeit beschäftigt sich damit, wie digitalisierte Bilder so bearbeitet werden können, dass sie weniger Speicherplatz in Anspruch nehmen, trotzdem aber möglichst wenig von ihrer Qualität einbüßen müssen. Es ist naheliegend, sich ganz zu Anfang einen überblick zu verschaffen, wie wir überhaupt "sehen". 1.1 Anatomie und Physiologie Die Bilderzeugung im Auge funktioniert wie in einer mechanischen Kamera: Wir "sehen", indem Lichtstrahlen durch die Pupille und die Linse ins Auge fallen. An der Linse (und auch an der Hornhaut, die zu vernachlässigen ist) werden die Lichtstrahlen gebrochen; sie bündelt diese und sorgt für ein klares Abbild der Umgebung auf der Netzhaut, die sich an der Rückwand des Auges befindet. Feine Muskelfasern zwischen Linse und der festen, äußeren Haut des Augapfels können die Dicke der Linse durch Streckung verändern, sodass sowohl von nahegelegenen als auch von weiter entfernten Gegenständen ein scharfes Bild auf der Netzhaut entsteht. Die Netzhaut ist eine Schicht aus feinen lichtempfindlichen Rezeptoren und dünnen Nervenzellen, die in verschiedene Gruppen geteilt sind: - Mit den Stäbchen können wir Lichtintensität unterscheiden, jedoch keine Farben. Mit ihnen sehen wir in der Dämmerung (deshalb auch das Sprichwort, nachts seien alle Katzen grau). - Mit den Zäpfchen sehen wir nur, wenn es hell ist, mit ihnen können wir Farben wahrnehmen. Es wird angenommen, dass es drei Sorten von Zäpfchen gibt, die eine charakteristische Empfindlichkeit auf das Farbspektrum aufweisen, wie in der untenstehenden Grafik verdeutlicht. Stäbchen und Zäpfchen leiten den Lichteindruck ins Gehirn weiter, wo bestimmte Teile des Gehirns die Signale empfangen und verarbeiten. Nun erst sehen wir. Anatomie des menschlichen Auges: 1=Linse / 2=Hornhaut / 3=Iris,Regenbogenhaut / 4=Pupille / 5=Gelber Fleck / 6=Blinder Fleck (Bild: NightSky). Die Zäpfchen finden sich am engsten "zusammengepackt" im Zentrum der Netzhaut, das man "gelber Fleck" nennt; an dieser Stelle ist die Netzhaut am empfindlichsten und die Auflösung, mit der wir sehen, am größten. Je weiter wir uns vom gelben Fleck entfernen, desto weniger Zäpfchen finden wir vor und desto mehr wird ergo „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 5/73 mit den Stäbchen gesehen. Dort, wo der Sehnerv das Auge verlässt, sitzen logischer Weise gar keine Sehzellen, man spricht hier vom blinden Fleck. Nachdem Licht durch Hornhaut und Linse gefallen sowie dort gebrochen und gebündelt worden ist, reagieren Nervenzellen an der Netzhaut auf die Lichtsignale und leiten sie weiter zum Gehirn (Bild: Chibret Augenatlas, 1998). Bedingt durch die "Bauteile" des menschlichen Auges sind unserer Wahrnehmung Grenzen gesetzt: - Auflösung: Insgesamt 6 Millionen Zapfenzellen und 130 Millionen Stabzellen finden sich auf der menschlichen Netzhaut (die größte Dichte der Zäpfchen ist wie gesagt am gelben Fleck, wo sich knapp 160.000 Zapfenzellen pro Quadratmillimeter befinden). Eine ganz alltägliche CCD-Kamera kann da nicht mithalten: Ihr Sensor-Array verfügt meist nur über 756x581, also etwa 440.000 Bildpunkte. - Farben: Wie wir auch noch ausführlich darstellen werden, können digitale Bilder bis zu 256 Graustufen und Farbbilder bis zu etwa 16,7 Millionen verschiedene Farbtöne aufweisen, was ein bisschen Verschwendung ist, da unser Auge nur etwas weniger als 100 Grautöne und etwa 7 Millionen Farben unterschieden kann. 1.2 Wahrnehmungspsychologie Wie gerade eben beschrieben, nehmen wir Farben über die Rezeptoren für farbiges Licht (rot, grün, blau) in der Netzhaut auf. Da die Empfindlichkeit dieser Rezeptoren für andere Farben genetisch kodiert ist, unterscheidet sie sich bei allen Menschen. Jeder Mensch hat demnach ein anderes Farbempfinden. Die Auswirkungen menschlicher Reaktionen auf das Erscheinen einer bestimmten Farbe sind verallgemeinerbar (obgleich der biologische Hintergrund immer noch nicht hinreichend geklärt ist): Farben, die man z.B. mit Geschwindigkeit und Schnelligkeit verbindet und die man als anregend und lebhaft empfindet, sind warm und kräftig (zum Beispiel: Rot, Gelb, Orange). Kalte Farben (wie Blau und Grün) wirken hingegen beruhigend oder entspannend. Auch die Intensität der Farben spielt eine Rolle: Sanfte Farben mit wenig Intensität vermitteln Geborgenheit und Bequemlichkeit, starke Farben mit hoher Intensität wirken aggressiver. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 6/73 Farben wie gelb und Orange werden als warm und lebendig empfunden wie bei "Mädchen mit blauen Vögeln" (August Macke) und "Die Wahrsagerin" (Michelangelo Caravaggio) (Bilder: http://reisserbilder.at). Marc Chagalls "Blumenstilleben" und Claude Monets "Impression (Bütten)" zeigen: Farben wie Blau und Grün wirken beruhigend und kühl (Bilder: http://reisserbilder.at). Es spielt auch eine Rolle, in welcher Umgebung eine bestimmte Farbe gesehen wird. Je nach den Farbtönen, die eine bestimmte Farbe einfassen, wird diese Farbe in unterschiedlichen Tönungen wahrgenommen. Darüber hinaus ist sicherlich jedem bekannt, dass nicht nur Farben, sondern auch Größe und Verhältnisse unterschiedlich wahrgenommen werden, abhängig von ihrer Umgebung. Dies sei hier nicht weiter vertieft. 1.3 Farben Bevor wir uns den Grundlagen der Bilddigitalisierung widmen und dem eigentlichen Thema der Bildkompression nähern, betrachten wir zunächst einmal, was Farben überhaupt sind und wie der Mensch sie (z.B. bei der digitalen Bildverarbeitung) darstellen kann. Das für den Menschen sichtbare Licht nimmt nur einen ganz kleinen Teil des Wellenspektrums ein. Je nach Länge der Wellen in diesem Spektrum erscheint ein Lichtstrahl in einer bestimmten Farbe: Ein Lichtstrahl mit einer Wellenlänge von 700nm erscheint zum Beispiel rot, ein Lichtstrahl mit einer Wellenlänge von ca. 500nm „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 7/73 erscheint blau. Wenn ein weißer Lichtstrahl (ein Gemisch aller Wellenlängen, wie nachher ausführlich gezeigt wird) auf eine Fläche trifft, die alle Wellenlängen außer Rot absorbiert, dann erscheint diese Fläche rot. Wenn wir nun einen bestimmten Farbton mathematisch beschreiben wollen, gibt es mehrere Möglichkeiten, da Farben über verschiedene Schemata definiert werden können (vergleichbar ist dieses mit verschiedenen Zahlenmengen, die es gibt: eine bestimmte ganze Zahl kann als Dezimalzahl, Bruch und Wurzel geschrieben werden, es handelt sich aber stets um die gleichen Zahl). Das RGB-Modell, das man auch additive Farbmischung nennt, baut auf den drei Grundfarben Rot, Grün und Blau auf, aus denen sich jede andere Farbe mischen lässt. Werden alle drei Farben zu gleichen Teilen (also mit gleicher Intensität) gemischt, erhalten wir weißes Licht. Auch das Sonnenlicht enthält diese drei Grundfarben. Die subtraktive Farbmischung oder auch CMYK bedient sich der Farben Cyan, Magenta und Gelb. Eine Mischung dieser drei Komponenten ergibt in der Theorie Schwarz, in der Praxis allerdings nur ein sehr dunkles Braun. Durch Zugabe von Schwarz (auch Tiefe genannt) enthält man auch im Bereich der sogenannten unbunten Farben (Grau, Schwarz, Weiß) eine gute Reproduktionsqualität. Das HSB-Modell entspricht unserer verbalen Farbbeschreibung am meisten: Während es enorm schwierig ist, ein "blasses Lila" in RGB oder CMYK zu beschreiben (die mathematische Darstellung eines solchen Farbtones in verschiedenen Formaten ist unten zu finden), lässt sich eine solche Farbbeschreibung in HSB recht schnell umsetzen. Das System beinhaltet nämlich die Komponenten Farbton (Hue), Sättigung (Saturation) und Helligkeit (Brightness). Die Farbton-Komponente gibt die reine Farbinformation an, die Skala reicht hier bis 360 Grad. Die Sättigung gibt das Verhältnis zwischen der reinen Farbstärke und den unbunten Anteilen an (0% ist also immer ein Grauwert und 100 % die kräftigste, reine Farbe). Die Helligkeit entspricht der Helligkeit von 1% bis 100%. Dabei stellt 0% immer Schwarz dar, 100% immer Weiß. An späterer Stelle werden wir das YUV-Modell erwähnen, welches im Prinzip das gleiche wie das HSB-Modell ist, nur sind die Komponenten anders angeordnet und anders benannt: Y=Luminanz (Helligkeit), U=Farbton, C=Chrominanz (Farbsättigung). Der gleiche Farbton - über 3 veschiedene Skalen beschrieben „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 8/73 2 Grundlagen II: Das digitale Bild Um Bilder mit Computern darstellen und speichern (sprich: verarbeiten) zu können, müssen diese in einem digitalen Format vorliegen, d.h. so beschaffen sein, dass sie rechnerisch zu erfassen und alle wichtigen Informationen (Farbe, Größe, Helligkeit - eben alles, was ein Bild ausmacht und definiert) aus ihnen anhand von Daten zu entnehmen sind. Wissenschaftlich und ganz allgemein lässt sich sagen: Ein Bildformat ist eine Ansammlung von Daten, die ein Bild beschreiben. Dabei spielen die Organisation und die Struktur dieser Daten eine entscheidende Rolle (entsprechend gibt es, wie noch dargestellt wird, große Unterschiede zwischen verschiedenen Bildformaten, die Daten auf unterschiedliche Weise organisieren). Eine übersicht über verschiedene Bildformate und ihre Eigenschaften gibt das Kapitel 10. Die Digitalisierung, also der Prozess, bei dem aus einem Bild für einen Computer lesbare Daten gemacht werden, erfolgt bei der Bildaufnahme durch einen Scanner oder eine Digitalkamera, wobei natürlich die Art und Technik der Bildaufnahme für die Qualität der Daten, die am Ende herauskommen, entscheidend ist. Eine technisch detaillierte Beschreibung, wie Bilder in Digitaldaten umgewandelt werden, können Sie im nächsten Kapitel lesen. 2.1 Das Pixelformat (Bildmatrizen) Prinzipiell unterscheidet man bei digitalen Bilddaten zwischen zwei Arten. Zum einen gibt es Vektorbilder. Bei diesen werden Linien, Flächen und Polygonzüge gespeichert, die mathematisch recht einfach durch Vektoren beschrieben werden können. Die Vor- und Nachteile liegen auf der Hand: Vektorformate sind beliebig skalierbar (vor allem sind sie ohne Qualitätsverlust vergrößerbar), da das Bild, egal in welcher Größe, stets auf der Grundlage der vektoriellen Daten berechnet wird. Bilder, die in einem solchen Format vorliegen, zeigen in der Regel mathematisch konstruierbare Objekte, Comics und Illustrationen, da diese durch Linien beschrieben werden können. Für komplexe Bilder (wie Fotos oder vielfarbige Darstellungen) eignet sich diese Speichermethode hingegen nicht, da sich derartige Bildinhalte nicht mathematisch konstruieren lassen, ergo auch nicht sinnvoll als Vektorbild gespeichert werden können. Wir befassen uns in dieser Arbeit mit der anderen Art, Bilder digital zu speichern, den Pixelbildern. Bei dieser Methode der Datenspeicherung wird das kontinuierliche Bild räumlich diskretiert, d.h. es wird in kleine Punkte zerteilt, deren Farbe jeweils einzeln angegeben wird. Diese Punkte sind die kleinsten Einheiten eines Bildes. Sie sind (aus technischen Gründen, die mit den Aufnahmesystemen zusammenhängen, vgl. Kapitel 3) quadratisch und werden Pixel (picture elements) genannt. Man stell sich ein digitales Bild Zeilen und Zeilen, also Pixel, d.h. Bildpunkte hat: mit Die Elemente Stelle des Bildes also als eine Matrix vor, die und . sind die Pixel, die den Grauwert oder die Farbe des Bildpunktes an der angeben. Man beachte bei der Bezeichnung, dass die erste Zeile einer Matrix die Zeile sowie die letzte Zeile die Zeile Wie solche Bildmatrizen formatintern organisiert werden, d.h. wie die Zahlenwerte Bildformaten gespeichert werden, wird später im Kapitel 2.4 erläutert. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß und gilt, da ist. in unterschiedlichen 9/73 Bei starker Vergrößerung sind die einzelnen Bildpunkte gut erkennbar (Bild: Kai's Power Goo). Betrachten wir an dieser Stelle einmal den Zusammenhang zwischen Pixelanzahl und Erscheinungsform des Bildes, um die Beschaffenheit des Pixelsystems deutlich zu machen. Wie eben erwähnt, wird das vorliegende Bild beim Digitalisieren räumlich diskretiert, das heißt, es wird in Bildpunkte zerlegt. Diesen Vorgang nennt man Rasterung. Hierbei ist wichtig, wie groß der Bildbereich ist, dem ein Pixel zugeordnet wird. Denn 1 Pixel ist lediglich definiert als 1 Bildpunkt, und beim Digitalisieren kann man selbst bestimmen, wie groß so ein Pixel denn nun sein soll (wie bereits angedeutet, ist die Größe, die ein Pixel hat, auch durch das Aufnahmeverfahren technisch bedingt, siehe Kapitel 3). Je mehr solcher Punkte ein Bild nun hat (d.h.: je kleiner der Bereich ist, den wir als Pixel definieren), desto höher ist die Auflösung, wie folgendes Beispiel veranschaulicht: Die unterschiedliche Auflösung bei der Bildaufnahme verursacht die Qualitätsunterschiede (Bild: Mustang Multimedia Spezial). „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 10/73 Eine hohe Auflösung benötigt also eine große Anzahl von Pixeln. Entsprechend beansprucht ein hochauflösendes Bild mehr Speicherplatz und Kapazität bei der Verarbeitung als eine Aufnahme mit niedriger Auflösung, d.h. mit wenigen Bildpunkten. Schon hier wird das Ziel der Bild-Kompression deutlich: Eine Verringerung der zu speichernden Daten bei möglichst gleichbleibender Qualität (denn einfach nur die Auflösung zu verkleinern, ist nicht zweckmäßig, da das Bild sich so qualitativ verschlechtert). Jedoch kann ein Bild bei der Digitalisierung nicht nur räumlich, sondern muss auch "farblich" diskretiert werden, um später alle Informationen der ursprünglichen Abbildung enthalten zu können: Das Ausgangsbild wird 1. zerlegt in Pixel, von denen 2. jeder einzelne eine Farbinformation enthält. Wird der Farbwert (oder Grauwert, wenn es sich nicht um eine Farbaufnahme handelt) diskretiert, spricht man von der Quantisierung. Mit diesem einfachen Modell - Rasterung und Quantisierung - ist ein Bild hinreichend beschrieben. Wird nun ein Bild quantisiert (wir gehen hier der Einfachheit halber von einem Bild in Graustufen aus), so misst das Aufnahmesystem (z.B. ein Scanner) die mittlere Helligkeit über einem Pixel, dessen Größe vorher definiert wurde. Dazu bildet es den gemessenen Grauwert auf eine Skala ab, die (in der Regel) 256 Abstufungen zwischen schwarz und weiß bietet (es sind auch mehr Abstufungen möglich), und ordnet jedem Helligkeitswert einen Zahlenwert auf der Skala zu. Handelt es sich um ein Bild in reinem schwarz/weiß (man spricht dann von einem Binärbild, weil nur zwei Farbabstufungen vorkommen, von gr. bi = zwei), hat diese Skala nur zwei Werte. Zum Vergleich: Verschiedene (Tonwert-)Skalen, auf die das Ausgangsbild abgebildet wird (Bild: Mustang Multimedia Spezial). Wie man vorstellen kann, bestimmen die Anzahl der Grautöne (also die Größe der Skala) und die Anzahl der Pixel (die Größe eines Bildpunktes) die Datengröße des Bildes. Eine Aufnahme, die nur über die 2 Farben schwarz und weiß verfügt und in einer Auflösung von z.B. 16x16 Pixel gespeichert ist, benötigt weniger Speicherkapazität als eine Aufnahme, die über 256 Grautöne verfügt und in einer Rasterung von 64x64 pixel vorliegt. Ein konkretes Beispiel zeigt den Zusammenhang zwischen Rasterung und Quantisierung; bei konstanter Speicherkapazität von 1 Kilobyte können zwei Bilder mit folgenden Eigenschaften gespeichert werden: „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 11/73 a) 64x64 Pixel mit 4 Graustufen = 4096x2 Bit = 1 kByte b) 32x32 Pixel mit 256 Graustufen = 1024x8 Bit = 1 kByte Hier verwenden wir bereits die Größen Bit und Byte, die im Zusammenhang mit Speicherbedarf und Datengröße Verwendung finden und in der Regel bekannt sind. Genaue Definitionen und Erklärungen zu diesen Größen gibt es im Kapitel 2.2 sowie im Kapitel 3. Da Rasterung und Quantisierung gleichermaßen die Datenmenge eines Bildes bestimmen, kann zum Beispiel eine grobe Rasterung, die zu einem erheblichen Qualitätsverlust führen würde, durch eine feinere Quantisierung ausgeglichen werden. Ein Bild, das also schlecht aufgelöst ist, bleibt dadurch erkennbar, dass es über viele Farbinformationen verfügt. Das Zusammenspiel von Auflösung und Anzahl der Graustufen, also über Rasterung und Quantisierung, veranschaulichen folgende Grafiken: Wie Rasterung und Quantisierung die Bildqualität beeinflussen: a) Originalzeichen, b) grob binär digitalisiert (=2 Farben, geringe Auflösung 10dpi), c) fein binär digitalisiert (=2 Farben, mittlere Auflösung 30dpi), d) grobe Rasterung, feine Quantisierung (=8 Farben, niedrige Auflösung 10 dpi) Es wird deutlich: Rasterung und Quantisierung haben Auswirkungen auf die Bildqualität: Durch zu geringe Quantisierung oder Rasterung gehen Bildinformationen verloren. Mehr noch: Es kommen gegebenenfalls sogar noch Störungen hinzu. Dies ist unter anderem bei der digitalen Aufnahme mit grober Abtastung von Rasterbildern der Fall, wenn Bilder gescannt werden, die aus feinen Mustern, wie eben dem Punktraster eines Fotos oder einer schraffierten Fläche, bestehen. Die auftretenden periodischen Störungen nennt man Aliasing, bei Störungen in einem Punktraster spricht man vom Moiree-Effekt. Eine schraffierte Fläche wurde beim Digitalisieren zu grob abgetastet. Folge: Es entstehen periodische Störungen, sogenannte Aliasing-Effekte. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 12/73 Wird ein Punktraster zu grob abgetastet, entstehen auf dem Bild ebenfalls periodische Störungen, sogenannte Moiree-Effekte. 2.2 Grundlagen der Datenspeicherung Nun da wir wissen, dass digitalisierte Bilder als zweidimensionale Funktionen verstanden werden können, die räumlich und farblich diskretiert sind, also jeder Pixel der Bildmatrix durch einen Wert beschrieben wird, betrachten wir, welche Eigenschaften dieser Wert (lassen wir den Begriff vorerst ganz allgemein) annehmen kann, was er aussagt und wie sich verschiedene Werte auf die Speicherung des Bildes auswirken. Wie bereits gesagt, gibt der Wert, den ein Bildpunkt annehmen kann, die Farbe oder den Grauwert an. Dies wollen wir nun präzisieren: Liegt ein Bild in Graustufen vor (normaler Weise verfügen "normale" Bilder über 256 verschiedene Grautöne), ist der Pixelwert eine skalare Größe und gibt die Helligkeit an (0=schwarz, 255=weiß). Mathematisch ist ein herkömmliches Graustufenbild also folgendermaßen definiert: mit und und . Bei Farbbildern verhält es sich ähnlich. Wie eingangs erwähnt (Kapitel 1.3), können alle für den Menschen sichtbaren Farben additiv mit den Grundfarben Rot, Grün und Blau gemischt werden. Dieses System hat sich auch in der digitalen Welt durchgesetzt: Beim RGB-Format beinhaltet ein Pixel die exakte Farbinformation, also 3 verschiedene Werte; der Pixelwert kann hier als dreidimensionaler Vektor aufgefasst werden, der über seine Komponenten die Rot-, die Grün- und die Blauintensität des Pixels angibt. Werden digitale Daten (ganz allgemein, nicht nur Bilder) gespeichert, so liegt dem Speicherprozess ein binäres System zu Grunde, das zwischen 0 und 1 unterscheidet. Die kleinste Speichereinheit, die entweder 0 oder 1 sein kann, nennt man "Bit". Eine Gruppierung von 8 Bit wird "Byte" genannt (siehe „Hintergrund-Information zu Bits und Bytes“). Wird nun ein digitales Graubild gespeichert, so nimmt jeder der Pixel einen Wert zwischen 0 und 255 an. Diese Werte werden binär gespeichert, das heißt, dass 0 dem binären Wert 0 entspricht, 92 zum Beispiel dem Wert 1011100 und 255 dem Wert 11111111. Maximal werden also 8 Zeichen (0 oder 1) benötigt, um jeden beliebigen Wert zwischen 0 und 255 darzustellen, man spricht dann von einem Bild mit 8-Bit-Farbtiefe (da das Binärsystem ein System von 2er-Potenzen ist, kann man allgemein sagen: Mit einer Maximalanzahl, d.h. einer Farbtiefe von Bit kann man bis zu verschiedene Farbwerte speichern, wobei „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß ). 13/73 Verschiedene Grauwerte und ihre binären Entsprechungen 2.3 Globale Eigenschaften von digitalisierten Pixelbildern In den folgenden Abschnitten wollen wir untersuchen, wie sich optische Unterschiede zwischen Bildern mathematisch ausdrücken, wie sich zum Beispiel hohe Helligkeit oder niedriger Kontrast in der Pixelmatrix des Bildes äußern. Wir gehen dabei (der Einfachheit halber, es geht ja schließlich um die Darstellung des Prinzips) von Graustufenbildern aus, die eine Farbtiefe von 8 Bit haben, also über 256 verschiedene Graustufen verfügen (dieses ist auch das gängige Format für Graustufenbilder in der Praxis). Das augenfälligste Merkmal eines Bildes ist sicherlich seine Helligkeit. Dem Betrachter fällt beim ersten Ansehen eins Bildes sofort auf, ob es insgesamt zu hell oder zu dunkel ist. Hier ist es zweckmäßig, zur Beurteilung der Helligkeit, den mittleren Grauwert zu bestimmen, also den durchschnittlichen Grauwertwert, den alle Pixel des Bildes haben. Wie schon aus der Statistik der Mittelstufe bekannt, summiert man dazu alle Grauwerte und teilt sie durch die Anzahl der Summanden. Bzw. kurz geschrieben: Dieser mittlere Grauwert ist in vielen Fällen nützlich, da er eine brauchbare Charakterisierung der Helligkeit des Bildes liefert, jedoch führt er (wie jeder Durchschnitt, da er extreme Ausreißer nicht berücksichtigt) in manchen Fällen auch auf eine falsche Spur, wie folgende Beispiele zeigen: - für ein gleichmäßig gefärbtes Bild - für ein stark unterbelichtetes Bild mit exakt mittlerer Helligkeit ist ist „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 14/73 - für ein stark überbelichtetes Bild ist analog - für ein Bild - der mittlere Grauwert des Sonnenuntergang-Bildes beträgt - der mittlere Grauwert des Bildes mit den Löwen beträgt mit schwarz-weißem Schachbrettmuster ist Das Bild mit den Löwen ist vergleichsweise hell, daher ist der mittlere Grauwert auch größer als beim Sonnenuntergangsbild, das insgesamt eher dunkel ist (Bilder: Kai's Power Goo). Beim Betrachten der Beispiele wird deutlich, dass der mittlere Grauwert mit Vorsicht zu genießen ist: So ist zum Beispiel der Wert eines homogen gefärbten Bildes mittlerer Helligkeit mit dem eines Schachbrettmusters identisch, weil der Durchschnitt der Grauwerte gleich ist, nur werden diese Bilder sicherlich verschieden wahrgenommen. Im folgenden definieren wir daher ein weiteres wichtiges Charakteristikum, das uns Informationen über die Beschaffenheit eines Bildes gibt. Aus der Statistik ist bekannt, dass man zur Beurteilung einer Verteilung (wir betrachten das digitalisierte Bild ja als Verteilung verschiedener Grauwerte, daher die Analogie) untersucht, wie sehr die einzelnen Werte gestreut sind, das heißt, wie sehr sie vom Mittelmaß abweichen. Zweckmäßig ist hier, die mittlere quadratische Abweichung (oder auch: Varianz) zu bestimmen, da bei diesem Streuungsmaß keine negativen Ergebnisse auftreten können (diese werden durch das Quadrieren eliminiert) und auch Daten, die besonders stark vom Mittelwert abweichen und somit das Aussehen des Bildes stark beeinflussen (vgl. Schachbrettmuster und eintönig mittelgrau eingefärbtes Bild), durch die Quadrierung stärker ins Gewicht fallen als diejenigen in der Nähe des Mittelmaßes. Die Varianz, die angibt, wie sehr die einzelnen Grauwerte abweichen, ist definiert durch: vom Mittelwert Da stärkere Abweichungen vom Mittelwert mehr ins Gewicht fallen als Grauwerte nahe des Mittelwertes, ist ein Maß für den Kontrast. Während die beiden Fälle "Schachbrett" und "homogenes Mittelgrau" die gleiche mittlere Helligkeit aufweisen, zeigen sich nun in der Varianz große Unterschiede: - das homogene Graubild besitzt nur einen Farbton, die mittlere quadratische Abweichung ist also „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 15/73 - bei einem Schachbrettmuster (die Größe spielt keine Rolle, da schwarz und weiß zu gleichen Anteilen über das Bild verteilt sind, daher in der folgenden Rechnung auch Division durch 2) beträgt die Varianz Das Schachbrett-Bild hat also einen hohen Kontrast (wie trivial zu erkennen: den höchstmöglichen), das homogene Bild mit mittlerem Grau gar keinen. Mit den beiden Maßen Mittelwert und Varianz haben wir nun zwar zwei Kriterien definiert, mit denen wir globale, statistische Aussagen über ein Bild machen können, jedoch ist es weiterhin sinnvoll zu erfahren, wie groß der Anteil der einzelnen Grauwerte am Gesamtbild ist. Wir führen also Histogramme ein, an denen solche quantitativen Aussagen abzulesen sind: Das Histogramm gibt für jeden Grauwert aus der Menge aller Grauwerte im Bild oder relative Häufigkeit sowie eines Bildes seine absolute an. Wie für alle relativen Häufigkeiten bei Verteilungen gilt also: , da die relative Häufigkeit eines Grauwerts nicht negativ oder > 1 sein kann und da die Summe aller Häufigkeiten zusammen immer 1 ergeben muss (mehr als 100% Anteil an einem Bild können Grautöne ja nicht haben). An einigen Beispielen wollen wir die Eigenschaften von Histogrammen zeigen: - bei einem gleichmäßig mit dem Grauton eingefärbten Bild erhalten wir für den Grauton und alle anderen (im Bild nicht vorhandenen Grautöne) - und bei einem ausgewogenen Bild (ausgewogene Helligkeit, ausgewogener Kontrast) kommen alle 256 Grauwerte alle - die Häufigkeiten: etwa in gleichem Umfang vor; im optimalen Fall erhalten wie also bei einem dunklen Bild mit wenig Kontrast erhalten wir für die niedrigen Grauwerte für , die die dunklen Bildpartien ausmachen, hohe Werte für - Ein Schachbrett sowie alle anderen Bilder, die ebenfalls die 2 Farben schwarz (0) und weiß (255) gleich häufig enthalten, hat folgende Verteilung: und - sowie für alle anderen Grautöne untenstehende Histogramme zeigen die Grauwertverteilungen für die Beispielbilder "Sonnenuntergang" und "Löwen" sowie für einen (nahezu) homogenen Verlauf von schwarz nach weiß „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 16/73 Das Löwen-Bild ist recht ausgewogen, es verfügt über einige dunkel und einige helle Partien, die meisten Bildanteile liegen jedoch im mittleren Skalen-Bereich (Bilder: Kai's Power Goo). Das Sonnenuntergang-Bild ist insgesamt dunkel, so zeigt das Histogramm eine große Häufigkeit von schwarzähnlichen Grauwerten; der mittelgraue Himmel sorgt ebenfalls für einen starken Ausschlag des Histogramms, helle Bildbereiche fehlen fast vollständig (Bilder: Kai's Power Goo). Beim fast homogenen Farbverlauf von schwarz nach weiß treten alle 256 Grautöne in gleicher Häufigkeit auf, daher ist das Histogramm auch annähernd gleichmäßig (kleinere Unterschiede sind durch die Messungenauigkeit und Bildschirmdarstellung bedingt). Histogramme geben, wie hier deutlich wird, keine Auskunft darüber, wo sich die einzelnen Grauwerte räumlich befinden, sondern zeigen lediglich ihre Häufigkeit im Bild an (benötigt man örtliche Aussagen, kann man Histogramme an Linien ausrichten, die durch das Bild gehen, und so zu jedem Punkt auf der Linie den dort „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 17/73 gemessenen Grauwert erhalten; solche Histogramme nennt man Grauwertprofile, auf die jedoch hier nicht näher eingegangen wird). Kurze Erwähnung sollten hingegen die relativen Summenhäufigkeiten finden. Während die Grauwerthäufigkeit Summenhäufigkeit Natürlich muss gelten: die Häufigkeit eines einzelnen Grauwertes im Bild angibt, gibt die relative Auskunft darüber, wie hoch der Anteil aller Grauwerte , da - wie bereits gezeigt - schon unterhalb von gilt und da in extremen Fällen entweder gar kein Grauwert oder alle Grauwerte des Bildes unterhalb von Funktion ist: liegen. Die ist somit monoton steigend. Die relative Summenhäufigkeit für den Grauwert 120 beträgt 0,3986, das heißt: Die Grauwerte zwischen 0 und 120 sind im Bild mit etwa 40% vertreten. Zuletzt in diesem Kapitel führen wir den Begriff der Entropie ein. Da es sich dabei um ein Maß des durchschnittlichen Informationsgehaltes eines Bildes handelt, passt es ganz gut zum Oberbegriff "Globale Eigenschaften", auch wenn wir die Entropie später noch einmal ausführlich aufgreifen werden (Kapitel 8). Die Entropie gibt die minimale Anzahl von Bits an, die man benötigt, um ein Pixel im Bild zu speichern, und ist somit auch eine Anzeige, ob man mit Kompressionstechniken überhaupt den Speicherplatzbedarf verringern kann. Sie ist definiert durch: Betrachten wir zum besseren Verständnis, was die Entropie angibt, ein paar Beispiele: - bei einem gleichmäßig mit dem Grauton - bei einem Bild mit ausgewogener Helligkeit und ausgewogenem Kontrast kommen alle 256 Grauwerte eingefärbten Bild erhalten wir für die Entropie etwa in gleichem Umfang vor, es gilt also für jeden Grauwert ; die Entropie ist in diesem Falle (jeder Grauwert ist gleichhäufig, daher kann man statt der Summierung den Term unter der Summe mit der Anzahl der Graustufen, mit 256, multiplizieren): „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 18/73 . Jeder einzelne Pixel benötigt also 8 Bit, sprich 1 Byte, wenn man ihn ohne Verluste speichern möchte. - Ein Schachbrett sowie alle anderen Muster, die nur 2 Grautöne und Häufigkeit vorkommen, hat die Entropie 1, da: enthalten, die in gleicher und somit Gehen wir davon aus, dass uns keine weiteren Informationen über das Bild vorliegen, wird 1 Bit pro Pixel benötigt, um das Bild zu speichern. - Liegt ein Binärbild vor, dessen Farben schwarz und weiß unterschiedlich oft auftreten, zum Beispiel und , so beträgt die Entropie: Für ein solches Bild würde also weniger als 1 Bit zur verlustfreien Speicherung eines Pixels benötigt. Dieses kann durch geeignete Kompressionsmethoden erreicht werden. Eine Herleitung der angegebenen Entropie-Fomel sowie Erklärungen zum besseren Verständnis liefern wir in Kapitel 8, wenn uns die Entropie thematisch wieder begegnet. An dieser Stelle reicht erst einmal die reine Kenntnis der Formel. 2.4 Datenstruktur Nachdem wir nun wissen, was digitale Bilder genau sind, welche Charakteristika sie aufweisen und wie sich diese mathematisch ausdrücken, betrachten wir im folgenden, wie die Bilddaten strukturiert sind, das heißt, wie die einzelnen Zahlen, die die Pixel-Position, die Farbwerte, die Bildgröße etc. angeben, in einer Bilddatei organisiert werden. Ausführlich behandeln wir zwei spezielle Arten der Datenorganisation in Kapitel 8, hier jedoch soll ein erster Eindruck über verschiedene Datenstrukturen vermittelt werden; der Einfachheit halber betrachten wir Binärbilder. Die unkomplizierteste Art der Organisation ist die Lauflängen-Codierung, die in der Praxis recht häufig vorkommt (siehe Kapitel 10). Diese Methode nutzt die Gegebenheit aus, dass, wenn gleiche Pixelwerte hintereinander auftreten, man diese, statt sie einzeln zu schreiben, zusammenfassen kann. Wie man sich vorstellen kann, ist diese Methode besonders bei schwarz-weißen, also Binärbildern, nützlich, wohingegen sie bei einem Bild mit 24 Millionen Farben eher unpraktisch ist, da viel zu viele Farbwerte existieren, als dass mehrere identische häufig aufeinander folgen würden. Man kann die Lauflängenkodierung als Multiplikation auffassen: Statt alle "Summanden" einzeln hinzuschreiben, gibt man nur den Wert und seinen Faktor an. Nehmen wir als Beispiel die Pixelzeile: 000111100000111111000000011111111 Diese kann auf verschiedene Arten zusammengefasst werden, zum Beispiel, in dem man die Zeile in 0- und 1Blöcke zerlegt und zu jedem Block der Wert (0 oder 1) und seine Länge angibt: „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 19/73 (3,0), (4,1), (5,0), (6,1), (7,0), (8,1). Wenn wir nun noch festlegen, dass sich Schwarz und Weiß (also 0 und 1) immer abwechseln, dass die Grauwerte also alternieren, erhalten wir folgende Schreibweise, die gegenüber der ursprünglichen Pixelzeile um 81,8% verkleinert ist (wir betrachten beispielshalber nur die Zeichenanzahl, in Binärcodes muss die Kompression entsprechend ausgerechnet werden): 3 4 5 6 7 8. Meist ist der Längenangabe eine obere Grenze gesetzt, z.B. 1 Byte. Sollte ein Wert nun z.B. 190 mal vorkommen, so muss man den Block aufspalten - und, da wir ja ein Abwechseln der Blöcke festgelegt haben, einen Block der Länge Null der anderen Farbe einschieben: 255 0 35. Wir können die Pixelzeile 000111100000111111000000011111111 auch darstellen, indem wir die Länge und die Position der 1-Blöcke angeben, alles andere muss dann ja ein 0-Block sein. Bei dieser Art ergibt sich für unsere Beispielpixelzeile die Darstellung: (3,4), (12,6), (25,8). In Kapitel 8 werden wir eine Variante dieser Lauflängencodierung kennen lernen, die bei der Verschlüsselung und der Komprimierung von Bilddaten im JPEG-Format angewandt wird. Es gibt noch zahlreiche andere Möglichkeiten, Bilddaten zusammenzufassen, jedoch beziehen sich diese im Großen und ganzen auf Binärbilder, da, wie bereits gesagt, bei einer Farbraum-Wertemenge von 2 Farben (Schwarz und Weiß) öfter Pixel des gleichen Wertes nebeneinander liegen und daher zusammengefasst werden können als bei einer FarbraumMenge von 255 Abstufungen (die wir im RGB-Format in den Kanälen Rot, Grün und Blau haben). Für die Codierung von Binärbildern gibt es zum Beispiel Richtungscodes. Die einzelnen Pixel eines Bildes sind dabei nicht durch ihre Koordinaten m und n in der Bildmatrix beschrieben, sondern über eine einheitliche Benennung der umliegenden Bildpunkte eines bestimmten Pixels, der "Nachbarn": Man kann die Position von Pixeln auch angebenindem man sie im Bezug auf einen bestimmten Ausgangspixel durchnummeriert. Bei diesem Pixelnachbarn-System bekommen alle Nachbarn vom Pixel p eine Nummer zugeordnet, mit der sie relativ zu p eindeutig beschrieben sind. Der 4-Nachbar eines Pixels ist demnach der Pixel Nachbarn, die eine gemeinsame Kante mit dem Pixel , der 1-Nachbar der Pixel . Diejenigen haben, also die 0-, 2-, 4-, und 6-Nachbarn, heißen direkte Nachbarn. Die anderen, die nur eine Ecke mit dem Pixel Nachbarn genannt. gemeinsam haben, werden indirekte Mit dieser Art der Codierung lassen sich viele Operationen schnell und einfach durchführen, wie zum Beispiel das Drehen eines Bildes um Vielfache von 45°, da hierbei die Richtungscodes nur um eine ganzzahlige Konstante erhöht werden müssen, wobei man mit modulo 8 rechnen muss, um aus dem System der einheitlichen Bezeichnung (siehe obige Grafik) nicht herauszufallen. Auch lassen sich mit Richtungscodes die Höhe und „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 20/73 Breite einer Fläche sowie deren Umfang oder auch der Abstand zwischen zwei Punkten ziemlich schnell und einfach berechnen. Das sei hier jedoch nur am Rande angemerkt, da wir uns mit vollfarbigen Grafiken und deren Kompression nach dem JPEG-Verfahren befassen. 2.5 Begrifflichkeit Zu Abschluss des Kapitels über die Grundlagen der digitalen Bilder sei noch etwas zur Terminologie angemerkt: Umgangssprachlich hat es sich etabliert, von "der Pixel" zu sprechen. Ursprünglich heißt es jedoch "das Pixel", da Pixel ja die Abkürzung für "picture element" und somit im Deutschen das Neutrum durchaus angebracht ist (DAS Bildelement, ergo auch DAS Pixel). Jedoch verhält es sich bei diesem Phänomen wohl wie mit "das Virus" und "der Virus" in der Biologie... „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 21/73 3 Exkurs: Die digitale Aufnahme Nachdem wir uns nun die Grundlagen der menschlichen Wahrnehmung und der digitalen Bilder erschlossen haben, ist es sinnvoll, vor dem Einstieg ins eigentliche Thema einen kurzen Exkurs zu machen und sich anzusehen, wie Bilder überhaupt technisch in diskretierte Pixelbilder, in Pixelmatrizen, "verwandelt" werden. 3.1 Der Scanner Der Scanner ist das verbreitetste Gerät, mit dem Bilder digitalisiert werden. Der typische Graustufenscanner verarbeitet eine normale Bildvorlage und gibt digitale Bilddaten aus, indem die Bildvorlage beleuchtet wird, welche daraufhin das einfallende Licht mehr oder weniger stark reflektiert (dunkle Stellen "schlucken" den Lichtstrahl, helle Stellen werfen ihn zurück). Das zurückkommende Licht wird dann über Stablinsen von lichtempfindlichen, elektronischen Bauteilen aufgenommen, sogenannten CCDs (Charge Coupled Devices), die entsprechend der Lichtintensität der Reflexion einen Wert an den PC übermitteln, welcher daraus dann die Helligkeit des Bildpunktes bestimmt (siehe „Hintergrund-Information zu CCD-Sensoren und zur Signalübersetzung“). Herkömmliche Farbscanner funktionieren nach dem gleichen Prinzip wie die Graustufenscanner, hier gibt es nur einige Weiterentwicklungen: 1. 2. 3. Es können Farbfilter eingesetzt werden. Die Vorlage wird also in drei Scandurchgängen mit weißem Licht beleuchtet, wobei in jedem Durchgang den CCDs ein anderer Farbfilter (Rot, Grün und Blau, mit denen sich jede Farbe darstellen lässt, siehe Kapitel 1.3) vorgesetzt wird. Allerdings ist dieses Verfahren technisch aufwendig, unpräzise und obendrein langsam, daher findet es wenig Anwendung. Es können drei farbige Fluoreszenz-Lampen eingesetzt werden, welche nur den entsprechenden Farbanteil der Vorlage reflektieren. Hierbei ist nur ein Scandurchgang erforderlich. Es kann ein Prisma eingesetzt werden. Der Scanner beleuchtet die Vorlage mit einer weißen Lampe, deren Licht reflektiert und anschließend durch ein Prisma geleitet wird. Dieses zerlegt den Lichtstrahl in seine Rot-, Grün- und Blau-Komponenten. Um diese nun zu messen, müssen drei verschiedene Reihen mit CCDs im Scanner installiert werden. Bei diesem Verfahren erhält man gute Ergebnisse, da wenig Farbverfälschungen (im Gegensatz zum Filter-Verfahren) auftreten können und auch nur ein Scandurchgang gebraucht wird, die Vorlage zu erfassen. Aufbau eines herkömmlichen Scanners (Bild: http://www.geocities.com/ally77jp/). „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 22/73 3.2 Die Digitalkamera Bei digitalen Fotoapparaten, die wesentlich neuer sind als die Scannertechnologie, werden farbige Pixel erzeugt, indem lichtempfindliche Zellen durch drei Farbfilter belichtet werden, ähnlich dem Scanner-Filter-Verfahren. Anschließend misst ein CCD-Sensor (wie gesagt: Charge Coupled Device) die Helligkeit, ordnet sie dem jeweiligen Bildpunkt zu und gibt einen Wert an den PC weiter. Wie bereits in Kapitel 2.2 erläutert, können mit einer Darstellung von 8 Bit (also 8 Stellen, die die Werte 0 oder 1 annehmen können) 256 verschiedene Abstufungen unterschieden werden. Aus Kapitel 1.1 wissen wir auch, dass das bereits mehr Helligkeitswerte sind, als der Mensch erkennen kann. Warum nun trotzdem viele Bilder von Kameras nicht nur in 256, sondern auch in 1024 und 2048 Farbtönen (also 10- und 12 Bit-Farbtiefe) ausgegeben werden, hat einen simplen Grund: Der Mensch nimmt Helligkeitsunterschiede in den hellen Bildbereichen deutlicher wahr als in den dunklen (man nennt dieses eine "logarithmische Helligkeitsempfindung"), im Gegensatz zum elektronischen CCD-Chip, der nur die genaue Menge an Licht misst, die auf die Pixel trifft. Damit die digital erfassten Bilder für den Menschen aussehen wie das originale Motiv, wandeln einige Kameras die Spannungswerte nicht in 256 sondern in 1024 oder 4096 Stufen um, was sich meist besonders bei der Detailwiedergabe in den dunklen Bildbereichen bemerkbar macht. Die digitale Farbfotografie funktioniert ebenso (hier von "funktioniert analog" zu sprechen, wäre denkbar unpassend): Für jeden der Farbkanäle Rot, Grün und Blau werden die Spannungswerte gewandelt und ergeben im Gesamtbild die entsprechenden Farbwerte. Wird in jedem Kanal mit 256 Abstufungen aufgenommen, erhalten wir die 16,7 Millionen rechnerischen Farbwerte, über die viele Bilder verfügen, die allerdings weder am Monitor noch im Druck dargestellt werden können (siehe Kapitel 1.1 und nachfolgender Abschnitt 3.3). 3.3 Auflösungen und Druckverfahren Damit man Pixelbilder nicht als Pixelmatrizen erkennt, sondern ein Foto sieht, müssen die einzelnen Bildpunkte entsprechend klein sein. Ebenso muss ein Bild über eine große Menge Pixel verfügen, wenn es eine bestimmte Größe haben soll. Liegen zwei Bildpunkte weniger als knapp 1/15 mm auseinander und befinden wir uns in 25 cm Entfernung, so können wir diese Punkte nicht mehr als getrennte Punkte erkennen. Entsprechend dürfen die Pixel bei einem Betrachtungsabstand von 1 Meter höchstens 1/3 mm voneinander entfernt sein. Man kann also sagen: Steht man 25 cm vor einem Bild, reichen etwa 12 Pixel auf einem mm aus, damit man das Bild wie ein Foto wahrnimmt. 12 Pixel pro mm sind 304,8 Pixel pro Inch. Bildpunkte pro Inch ist nämlich die gängige Einheit beim Maß von Auflösungen. In diesem Fall (12 Pixel/mm = 304,8 Pixel/Inch) kann man sagen: Ein Auflösung von etwa 300 dpi (dpi = Dots pro Inch = Bildpunkte pro Inch) genügt, damit wir die einzelnen Bildpunkte nicht mehr erkennen. Bei einem Abstand von 1 m reichen etwa 80 dpi aus. Hier muss natürlich angemerkt werden, dass das Verfahren, mit dem das Bild ausgegeben wird, eine entscheidende Rolle spielt, da je nach Ausgabeverfahren die Betrachtungsentfernung anders ist - manche Methoden sind feiner, manche gröber). „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 23/73 4 Das JPEG-Verfahren Das Hauptaugenmerk dieser Abhandlungen liegt auf einer bestimmten Kompressionsart für digitale Bilddateien, die nun, nachdem alle Voraussetzungen und Grundlagen geklärt sind, ausführlich behandelt werden soll. In diesem Kapitel finden sich einige Worte zum prinzipiellen Bildkomprimieren Kapitel 4.1 sowie eine kleine übersicht, wie das JPEG-Format im Groben funktioniert Kapitel 4.3. Die einzelnen Schritte werden detailliert ab Kapitel 5 präsentiert und vorgerechnet. 4.1 Verschiedene Kompressionsarten Prinzipiell unterscheidet man Bildkompression nach zwei verschiedenen Methoden: Der verlustfreien und der verlustbehafteten Kompression. Bei der verlustfreien Kompression (oder auch lossless compression) findet keine Reduktion der Bilddaten statt, die Bildinformationen zerstören würde, sodass hier jedes Bildelement erhalten bleibt. Diese Methode findet vor allem dann Einsatz, wenn mit komplexen, aufwendig zu berechnenden oder teuren Bilddaten gearbeitet wird, die nicht verloren gehen dürfen (zum Beispiel in der Medizin, bei der Analyse von Satellitenbildern etc.). Digitale Formate, die ohne Qualitätsverlust speichern, sind zum Beispiel BITMAP und TIFF. Solche unreduzierten Bilddaten sind speicheraufwendig, dafür haben sie auch eine hohe Qualität. Bei der verlustbehafteten Kompression (lossy compression) ist dies nicht der Fall: Hier wird weniger Wert auf die Bildqualität gelegt als darauf, die Dateigröße möglichst gering zu halten. Daher werden die Bilddaten bei dieser Methode reduziert, sodass das Ausgangsbild nicht 1:1 wiederherstellbar ist, sondern eine schlechtere Qualität bietet. Durch zu starkes Komprimieren können durch den Wegfall von Bilddaten Fehler im Bild entstehen; diese nennt man Artefakte. Verlustbehaftete Bildkompression wird da eingesetzt, wo große Datenmengen nicht ohne weiteres verarbeitet werden können, das Paradebeispiel ist hier das Internet, das wie alle Netzwerke keine besonders hohe Übertragungsgeschwindigkeit hat, sodass BMP-Bilder zum Beispiel viel zu viel Ladezeit in Anspruch nähmen. Dateiformate, die Bilddaten reduzieren und daher auch weniger Speicherplatz benötigen, sind zum Beispiel GIF und JPEG. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 24/73 Ein verlustfrei gespeichertes Bild (links) und ein verlustbehaftetes (rechts) im Vergleich. Beim rechten Bild fällt auf, dass sich nicht nur Artefakte gebildet haben, die bei stärkeren Kompression auch ohne Vergrößerung erkennbar sind, sondern das Bild mit zunehmender Kompression auch Schärfe und Kontrast einbüßt (Bild: Mustang Multimedia Spezial). 4.2 Kompressionsmodi bei JPEG Das JPEG-Format ist von besonderem Interesse, weil es sich im Internet als Bildstandard durchgesetzt hat, um vielfarbige Bilder in True Color mit möglichst geringem Platzbedarf zu speichern (siehe „HintergrundInformation zur Entstehung von JPEG“). Die Idee war dabei, einen Algorithmus zur Kompression "natürlicher" Grauton- oder Farbbilder zu entwickeln, das heißt einen Kompressionsalgorithmus Bilder zu finden, der Bilddaten so reduziert, dass sie für das menschliche Auge wenig Qualität verlieren (mit "natürliche Bilder" sind solche gemeint, die in der Praxis und im Alltag auftreten, wie zum Beispiel herkömmliche Urlaubsfotos). Schwerpunkte bei der Erstellung eines geeigneten Algorithmus' waren einerseits eine hohe Kompressionsrate und andererseits eine hohe Geschwindigkeit zum Kodieren und Dekodieren. Leider konnte man keinen einzigen Algorithmus allein für alle Anforderungen entwickeln, sodass das Kompressionsverfahren in vier verschiedene Modi gegliedert wurde. · · Beim progressive mode wird das Bild in mehreren Durchgängen kodiert und dekodiert. Bei jedem weiteren Durchgang verbessert sich dabei die Bildqualität, was besonders nützlich ist, wenn Daten über große Entfernungen übertragen werden. Sobald das Bild eine für den Benutzer ausreichende Schärfe erreicht hat, kann dieser die Übertragung stoppen. Der hirarchical mode speichert das Bild in einer geringeren Auflösung und ebenfalls in voller Auflösung. Das gering aufgelöste Bild kann wesentlich schneller übertragen und dekodiert werden und eignet sich somit bestens als schnelle Vorschau auf das eigentliche Bild. Bei Interesse kann dann die vollaufgelöste Version geladen werden. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 25/73 · · Der lossless mode ist das einzige Verfahren, das verlustfrei kodiert und dekodiert. Der große Nachteil ist, dass die Kompressionsrate recht gering ist, weil der volle Informationsgehalt gespeichert wird. Beim sequentiell mode wird das Bild in einem einzigen Durchgang von links oben nach rechts unten dekodiert, was in der Praxis für die meisten Anwendungen gut geeignet ist, die besten Kompressionsraten erzielt und am leichtesten zu implementieren ist. Auf das Verfahren des sequentiell mode wollen wir nun näher eingehen, da es das gebräuchlichste ist. Die anderen drei vorgestellten Techniken sind nur in Ausnahmefällen und ganz spezifischen Einsatzbereichen sinnvoll, basieren aber im Prinzip auf den gleichen Verfahren wie der sequentiell mode. 4.3 Ablauf der JPEG-Kompression Die Kompression von Bilddaten durch das standardisierte JPEG-Verfahren verläuft folgendermaßen: 1. 2. 3. 4. 5. 6. Es liegen Bilddaten im RGB-Format vor, von denen jeder einzelne Wert eine Zahl zwischen 0 und 255 ist. Diese werden in das YUV- oder YCbCr-Modell übertragen, wo die einzelnen Komponenten (Helligkeit, Farbton und Sättigung, siehe Kapitel 1.3) verschieden stark gewichtet werden. Außerdem wird eine Indexverschiebung vorgenommen, d.h. die Werte aus der Wertemenge [0;255] werden als Zahlen zwischen -128 und 127 dargestellt. Die 3 nun vorliegenden sogenannten "Layer", was eine Bezeichnung für die verschiedenen Datenmengen für Y, U,V, Cb oder Cr ist (man kann also von "Datenschichten" sprechen), werden nun einzeln weiterbearbeitet. Jedes Layer wird in 8*8 große Pixelblöcke eingeteilt (das komplette Verfahren muss natürlich auf alle Matrizen und alle Layers einzeln angewendet werden), auf die im folgenden LINK die diskrete Kosinustransformation einzeln angewendet wird. Die diskrete Kosinustransformation oder DCT (aus dem Englischen: discrete cosine transform) interpretiert die Helligkeits- bzw. Farbwerte als Überlagerung von Kosinusfunktionen, die deren Schwankungen angeben, d.h wie stark sich die Werte von Ort zu Ort ändern, und transformiert die Werte in Amplituden für Kosinusfunktionen verschiedener Frequenzen. Hierbei ähneln sich die Amplituden für hohe Frequenzen, wodurch man einen Vorteil für die anschließende Kodierung erhält. Die entstandenen Amplituden werden noch quantisiert, indem sie durch einen vom Benutzer festlegbaren Quantisierungsfaktor dividiert und danach gerundet werden, wobei viele Werte gleich Null werden. Im Folgenden wird die quantisierte Matrix codiert. Dazu wird die 8*8-Matrix in einen 1*64-Vektor umgeschrieben, sodass die zahlreichen Nullen, die beim Quantisieren entstanden sind, hintereinander stehen und sich gut zusammenfassen lassen. Ist diese erste Reduzierung der Datenmenge erfolgt, so wird die eigentliche Huffman-Codierung angewendet, bei der jedem Wert ein einzigartiger Binärcode zugeordnet wird. Eine große Speicherplatzersparnis wird dadurch erreicht, dass beim HuffmanVerfahren häufig auftretenden Werten ein kurzer, seltenen Werten ein langer Code zugeteilt wird und die Codes der einzelnen Werte außerdem ohne Trennzeichen auskommen und aneinandergereiht werden können. Wenn das Bild nun decodiert wird, werden die Binärcodes wieder in Zahlenwerte umgewandelt und ausführlich ausgeschrieben, sodass man wieder einen 1*64-Vektor, bzw. eine 8*8-Matrix erhält. Zur Dequantisierung werden die quantisierten Werte in dieser Matrix einfach mit dem Quantisierungsfaktor multipliziert. Die inverse DCT sorgt dann dafür, dass aus den Amplituden wieder die ursprünglichen Helligkeits- bzw. Farbwerte hergestellt werden. Zur besseren Unterscheidung wird die DCT auch forward DCT genannt. Wenn immer wir im folgenden von DCT sprechen, ist die forward DCT gemeint. Die von der inversen DCT erhaltenen Werte ergeben nun das komprimierte Bild. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 26/73 5 Farbraumveränderung Digitale Bilder werden gewöhnlicherweise im RGB-Modell dargestellt. Da das Auge Helligkeitsunterschiede besser wahrnehmen kann als Farbunterschiede (siehe dazu Kapitel 1.1), ist es für die Reduzierung der Datenmenge sinnvoll, Helligkeiten mit höherer Auflösung zu speichern als Farben. Zweckmäßig hierfür ist eine Umwandlung der RGB-Daten in ein Farbmodell, bei dem Helligkeitswerte getrennt von Farbwerten gespeichert werden, wie das YUV- oder das YCbCr-Modell (vgl. Kapitel 1.3). Hierbei ist Y jeweils der Helligkeitswert, U der Farbton und V die Farbsättigung. Cb beschreibt die Abweichungen vom Grau- zum Blauwert, Cr vom Grauzum Rotwert. Die Umwandlung geschieht folgendermaßen: Vom RGB- ins YUV-Modell: Y = 0,299R + 0,587G +0,114B U = 0,493(B - Y) V = 0,877(R - Y) oder vom RGB- ins YCbCr-Modell Y = 0,299R + 0,587G + 0,114B Cb = -0,1687R - 0,3313G + 0,5B + 128 Cr = 0,5R - 0,4187G - 0,0813B + 128 Bei der JPEG-Kompression wird keines dieser beiden Farbmodelle bevorzugt. Wichtig für die Kompression ist lediglich, dass nach der Umwandlung in einen anderen Farbraum ein sogenanntes Subsampling vorgenommen wird, d.h. dass die Farbwerte U, V oder Cb, Cr mit geringerer Auflösung gespeichert werden als die Helligkeit Y. Hierbei werden zum Beispiel für 4 Pixel 4 Helligkeitswerte, aber jeweils nur 2 Farbwerte oder sogar nur ein Farbwert gespeichert, die dann Mittelwerten der 4 vorgegebenen Werte entsprechen. Ein Subsampling mit noch gröberer Auflösung für die Farbwerte ist aufgrund der dadurch stark verschlechterten Qualität des Bildes nicht sinnvoll (siehe „Beispielrechnung für das Subsampling“): Wie noch in Kapitel 6 besprochen werden wird, ist es für eine weitere Kompression der Daten zweckmäßig, die 256 möglichen Werte, die von 0 bis 255 reichen, als Werte des Intervalls [-128; 127] darzustellen. So entspricht z.B. der alte Wert 0 dem Wert -128 in der neuen Wertemenge. Diese Vorgehensweise wird Indexverschiebung genannt. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 27/73 6a Die Eindimensionale Diskrete Kosinustransformation Nach der Indexverschiebung wird eine zweidimensionale diskrete Kosinustransformation angewendet. Es bietet sich an, zum besseren Verständnis zuerst die simplere eindimensionale DCT zu besprechen, um von dort dann später auf die zweidimensionale DCT zu schließen. Die mathematische Anwendbarkeit der eindimensionalen wie der zweidimensionalen DCT ist selbstverständlich nicht nur auf Bildpunkte beschränkt, jedoch erscheint es sinnvoll, sie hier nur im Zusammenhang mit diskreten Bildpunkten zu besprechen. Damit man die eindimensionale DCT anwenden kann, müssen Werte von Bildpunkten in nur einer Dimension gegeben sein. Diese eindimensionale Anordnung kann zum Beispiel eine Zeile der zweidimensionalen Verteilung der Bildpunkte im Bild darstellen. Die Werte sind also zum Beispiel von links nach rechts angeordnet. x f(x) 0 f(0) 1 f(1) 2 f(2) 3 f(3) ... ... Die diskrete Kosinustransformation ist eine mathematische Operation, die die diskrete Ort-Werte Zuordnung in eine diskrete Frequenz-Amplituden Zuordnung umwandelt. Die Frequenz einer Kosinusfunktion gibt in diesem Falle an, wie oft sich der Verlauf der periodischen Kosinusfunktion pro Ortseinheit wiederholt. Amplituden sind hier definiert als die betraglichen Maximalwerte, die eine dazugehörige Kosinusfunktion annimmt. Durch die entstandene Zuordnung wird beschrieben, wie sehr die Werte um die Mitte des Intervalls [-128; 127], die bei -0,5 liegt, schwanken. Ausgedrückt wird dies in Amplituden von Kosinusschwingungen verschiedener diskreter Frequenzen. Das heißt, die neue Frequenz- Amplituden Zuordnung beschreibt, wie "schnell" und stark sich die Werte im Verlauf der Funktion f(x) verändern. Eine niedrige Amplitude für eine bestimmte Frequenz bedeutet, dass die f(x)-Werte mit dieser Frequenz nur geringfügig um die Mitte des Intervalls [-128; 127] schwingen. Die diskrete Funktion f(x) wird als Überlagerung von Kosinusschwingungen verschiedener Frequenzen gedeutet. Das heißt, die f(x)-Werte werden als Addition der Funktionswerte der verschiedenen Kosinusfunktionen an der Stelle x interpretiert. Eine Überlagerung von Kosinusfunktionen bedeutet also die Summe von Kosinusfunktionen. Zur besseren Vorstellung, wie so etwas aussehen kann, liegt hier ein Beispiel vor, das drei Kosinusfunktionen zeigt, die (wie wir später sehen werden) auch in der DCT benutzt werden, und deren Überlagerung angibt. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 28/73 Eine Überlagerung von Kosinusfunktionen bedeutet die Summe von Kosinusfunktionen. Als Beispiel betrachten wir diese drei cos-Funktionen k2(x), k3(x) und k7(x). „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 29/73 Werden obige drei cos-Funktionen überlagert, so addieren sich die Funktionswerte und wir erhalten diese neue Funktion kSum(x). Bei der DCT entspricht die Anzahl der definierten Orte der Anzahl der verschiedenen betrachteten Frequenzen. Bei der eindimensionalen DCT werden horizontal angeordnete Werte in horizontal verlaufende Schwingungen umgewandelt, d.h. die Kosinusfunktion ist eine Funktion des Ortes. Die Frequenzen werden dabei genauso durchnummeriert wie die Orte, wobei größere Nummern der Frequenzen auch größere Frequenzen bedeuten. u F(u) 0 F(0) 1 F(1) 2 F(2) 3 F(3) ... ... Die Formel für die eindimensionale DCT lautet: 6.1 hierbei ist: · · · N u : Amplitude der Kosinusschwingung mit der Frequenz der Nummer u : Anzahl sowohl der verschiedenen Orte als auch der Frequenzen : Nummer der Frequenz in Horizontalrichtung „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 30/73 · x · · : Nummer des Ortes in Horizontalrichtung : Pixelwert am Ort x : Ein Korrigierungsfaktor, den wir bei der Besprechung der inversen DCT näher behandeln werden Für den Spezialfall u = 0 ergibt sich dann 6.2 , da hier und cos(0) = 1 ist. Da bei der JPEG Komprimierung eine 2D-DCT (zweidimensionale DCT) mit N = 8 benutzt wird, werden wir von nun an vor allem auch die 1D-DCT mit N = 8 betrachten. Für sie gilt: 6.3 Wir wissen also nun, dass die Frequenzen von 0 bis 7 in Schritten von 1 durchnummeriert werden. Dies allein sagt nichts über die Werte der tatsächlichen Frequenzen aus, denn die Zahlen 0 bis 7 bezeichnen lediglich deren Nummer, sozusagen deren Stellung in der Tabelle. Um die Frequenzen aus deren Nummern errechnen zu können, geht man folgendermaßen vor: Für die Frequenz einer Kosinusschwingung gilt: Durch geeignetes Umformen unserer Kosinusfunktion aus 6.3 erhält man . Man kann b nun einfach ablesen: 6.4 . „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 31/73 Die Frequenz errechnet sich also durch: . Die Frequenzen sind demnach: u 0 1 2 3 4 5 6 7 0 Zusammenhang zwischen den Nummern u und den Frequenzen . Aus Gründen der Anschaulichkeit wurden die Frequenzen ungekürzt dargestellt. Wenden wir uns nun wieder der Formel 6.3 zu, durch die unter Verwendung der vorgegebenen Daten der Wert F(u) ausgerechnet werden kann. Im folgenden wird dargelegt werden, was unter F(u) zu verstehen ist. Die Werte von F(u) entsprechen einem Maß für die Amplituden von Schwingungen der Frequenz der Nummer u im Bild. Sie sind nur ein Maß für die Amplituden, da sie, wie wir noch sehen werden nicht genau den Amplituden entsprechen. Wie man anhand der obigen Tabelle sehen kann ist die Frequenz von u = 0 selbst null, was bedeutet dass keine Schwingung vorhanden ist. F(0) beschreibt daher den gleichbleibenden Anteil aller Werte von f(x). Dies bedeutet nichts anderes, als dass eine Art Mittelwert aller f(x) gebildet wird. Es ist deshalb eine Art Mittelwert, da sich folgender Ausdruck, der durch Einsetzen von N = 8 in 6.2 entsteht, von der Definition des arithmetischen Mittelwertes für alle f(x) nur um den Faktor unterscheidet. Die Formulierung "der gleichbleibende Anteil aller Werte von f(x)" eröffnet nun auch ihren Sinn: Der gleichbleibende Anteil ist der Wert, der, falls man ihn für alle Orte gleich annimmt, über alle Orte aufaddiert die gleiche Summe ergeben würde wie die Summe der tatsächlichen Werte von f(x). Dies ist auch eine Beschreibung des arithmetischen Mittelwertes. Der gleichbleibende Anteil bedeutet nichts anderes als der arithmetische Mittelwert. Wie schon gesagt, beschreibt F(0) den gleichbleibenden Anteil, also den arithmetischen Mittelwert, indem es einen Wert angibt, der sich nur durch einen Faktor, nämlich , vom arithmetischen Mittelwert unterscheidet. F(0) wird auch DC- Koeffizient genannt, was von direct current, Gleichstrom, abgeleitet wird. Da alle anderen Werte von u für Frequenzen stehen, die von 0 verschieden sind, werden alle Werte von F(x) außer F(0) AC- Koeffizienten genannt, welches von alternating current kommt, was Wechselstrom bedeutet. Für ein besseres Verständnis der AC-Koeffizienten betrachten wir noch einmal den Term 6.4. Wichtig: die folgenden überlegungen zur Berechnung der AC-Koeffizienten sind nur gültig für „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß ! 32/73 Wie bereits gezeigt bewirkt der Faktor , dass alle Frequenzen ein Vielfaches von sind. Auf einer Intervalllänge von 8 durchläuft die Kosinusfunktion also ein Vielfaches der halben Periode. Unsere Kosinusfunktion ist um 0,5 nach links verschoben und die diskreten x-Werte von 0 bis 7 bilden die Definitionsmenge. Alle unsere cos-Funktionen, wie z.B. hier k(x) mit u=6, stellen sich als um 0,5 nach links verschobene, normale cos-Funktionen dar. Dies bewirkt, dass die x-Werte gleichmäßig in dem Intervall [-0,5; 7,5], das die Länge 8 hat, verteilt sind. "Gleichmäßig verteilt" soll hier bedeuten, dass es für jeden diskreten x-Wert mit der Differenz x zum Anfang des Intervalls, einen von diesem verschiedenen x zum Ende des Intervalls gibt, was nur durch eine gerade Anzahl von definierten x-Werten zu erreichen ist. Diese gleichmäßige Verteilung bleibt auch bei mehrfacher Halbierung des Intervalls erhalten, solange Mindestens zwei x-Werte im Teilintervall definiert sind. Den Grund dafür können Sie unter „Hintergrund-Information zur gleichmäßigen Verteilung“ lesen. Diese wichtige symmetrische Eigenschaft werden wir später benutzen. In Formel 6.3 kann man f(x) schreiben als . 6.5 Man geht nun also davon aus, dass f(x) der Wert einer Kosinusfunktion der Frequenz u mit der Amplitude Au(x) ist. Das heißt, wenn man voraussetzt, dass f(x) der Wert einer Kosinusfunktion an der Stelle x mit der Frequenz der Nummer u ist, muss diese Kosinusfunktion die Amplitude Au(x) besitzen, damit f(x) auf dieser liegen kann. Der Grund für die Indexverschiebung wird nun auch deutlich. Für die DCT benutzen wir Kosinusfunktionen, die symmetrisch um den Wert 0 schwingen, also solche, die nicht in f(x)-Richtung verschoben sind. Diese Tatsache kann man an obigen Formeln der Kosinusfunktionen erkennen. Diese Kosinusfunktionen sind mathematisch einfacher darzustellen als welche, die um einen von null verschiedenen f(x)-Wert schwingen, also in f(x)Richtung verschoben sind. Wenn die Elemente unserer Wertemenge nun auch symmetrisch um den Wert 0 verteilt sind, kann man sie als Funktionswerte solcher einfachen Kosinusfunktionen interpretieren. In unserem Fall wurden durch die Indexverschiebung allerdings alle f(x)-Werte symmetrisch um den Wert -0,5 angeordnet. Die Mitte aller Werte, -0,5, um die die f(x)-Werte "schwingen", kommt dem Wert 0 jedoch nah genug um, um obige Interpretation zu rechtfertigen (lesen Sie dazuu die „Vertiefende Anmerkung der Verfasser“). „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 33/73 Durch Einsetzten von 6.5 wird aus 6.3: 6.6 Zur weiteren Bearbeitung der Formel benutzen wir eine vereinfachte Darstellung der Kosinusfunktion, was uns später auch noch sehr nützlich sein wird. Wir nutzen aus, dass diese Kosinusfunktion eine mittelbare Funktion ist, d.h. dass sie die Funktion einer Funktion ist. Denn, bevor man den Kosinus anwendet, wird der Term in der Klammer berechnet. Man kann unsere Kosinusfunktion daher auch schreiben als , wobei ist. Oder einfach: Durch die Funktion . wird ein Winkel angegeben, auf den dann der Kosinus angewendet werden kann. Die Funktion liefert also die Definitionsmenge für die Funktion abhängig von dem Parameter u. Man kann nun, indem man den Kosinus als eine Funktion von . Diese Definitionsmenge ist auffasst, zur Betrachtung aller 8 Kosinusfunktionen dieselbe Funktion benutzen, bei der allerdings abhängig von u verschiedene Werte definiert sind. Dies bringt den Vorteil mit sich, dass man mit einer Funktion arbeiten kann, die für alle u die gleichen Eigenschaften besitzt, wie z.B. Symmetrie und Frequenz. Mithilfe dieser Erkenntnis lässt sich nun auch 6.6 weiterbearbeiten. Zu diesem Zweck benutzen wir nun den trigonometrischen Satz des Pythagoras. Er lautet: 6.7 , wobei gelten muss: 6.8 . Der Vorteil, den man durch die Verwendung des trigonometrischen Satz des Pythagoras erhält, liegt auf der Hand. Laut 6.6 muss man die Produkte der Amplituden mit der quadrierten Kosinusfunktion über alle x aufsummieren. Im trigonometrischen Satz des Pythagoras werden auch zwei quadrierte Kosinuswerte addiert. Wenn nun die Möglichkeit bestünde, dass man Paare von Winkeln, und somit von x-Werten, hat, die obige Bedingung 6.8 erfüllen, könnte man mithilfe von 6.7 die Amplituden zu einem ganzzahligen Vielfachen aufaddieren. Der Übersicht halber können alle Funktionswerte anders dargestellt werden, was für sie auch die Folge hat, dass für sie eine andere aber äquivalente Bedingung besteht. Diese Bedingung möchten wir als Folge der übersichtlicheren Darstellung der Funktionswerte nun festsetzen. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 34/73 Die Funktion ist periodisch, d.h., dass sich ihr Verlauf nach gewissen Intervallen auf der Achse wiederholt. Diese Abstände heißen Periode und sind hier gleich . Dies ist, wie man an der Zeichnung erkennen kann nicht die einzige Besonderheit von außerdem im Intervall [0; ] an der Geraden Wertemenge bereits im Intervall [0; mit . Die Funktion ist gespiegelt. Die Funktion nimmt also alle Elemente der ] an. Jeder Wert von für ein kann also durch ein ausgedrückt werden. Dies geschieht folgendermaßen: Gegeben sei ein ungeraden Vielfachen von - mit dem Betrag des Abstands ist. Es gilt nun, da alle Funktionswerte gleich sind, deren gleichen Betrag von einem ungeraden Vielfachen von , also auch von zum nächsten -Koordinaten um den , abweichen: , wobei der neue Winkel 6.9 innerhalb des Intervalls liegt. Die folgenden drei Tabellen sollen zeigen, wie man diese anderen Werte benutzen kann, um die Funktionswerte anders darzustellen. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß - 35/73 angegeben, wobei die In dieser Tabelle werden die Funktionswerte unserer Kosinusfunktion -Werte einfach unter Benutzung der jeweiligen u und x mit unserem Term für Hier werden die k(x)-Werte ausgedrückt als solche mit „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß ausgerechnet wurden. . Diese Kosinusfunktion nimmt auch 36/73 negative Werte an und ist punktsymmetrisch um Funktionswerte von In der Graphik sieht man , wie den zweiten . Deshalb können negative Funktionswerte als mit negativem Vorzeichen ausgedrückt werden. den gleichen Funktionswert hat, wie . Deswegen kann man -Wert benutzen, um ersteren Funktionswert zu beschreiben. In dieser Graphik kann man erkennen, dass die Funktion bei „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß den negativen Funktionswert von 37/73 annimmt. Man kann zur Beschreibung des ersteren Funktionswertes also den negativen Funktionswert des zweiten Winkels benutzen. Durch Quadrierung fallen die negativen Vorzeichen weg, und man kann alle Werte von wie oben bereits dargelegt, als Funktionswerte von Gegeben sind in unserem Fall die beiden die Differenz -Koordinaten haben. Sie haben die Differenzen Vielfachen von Werten, die hier ja und bzw. , darstellen. , die wegen zum jeweils nächsten ungeraden . Addiert man diese beiden Differenzen erhält man die Differenz zwischen den beiden - ist: „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 38/73 6.10 Aus 6.9 und 6.10 erhält man: . Analog gilt auch: . Wegen 6.10 ist also die neue Bedingung, die von den vereinfacht dargestellten Funktionswerten erfüllt sein muss, um den trigonometrischen Satz des Pythagoras anzuwenden, wenn man alle Funktionswerte als mit beschreibt: 6.11 Durch die DCT muss nun gewährleistet sein, dass es immer 4 Paare von Winkeln gibt, die Bedingung 6.11 erfüllen. Dies ist der Fall, wenn der eine Winkel, ausgedrückt als Element von Intervalls also von um verschieden ist und der andere von um - vom Anfang des . Wie bereits festgestellt sind alle x-Werte gleichmäßig in einem Intervall verteilt, dass ein Vielfaches einer halben Periode der Kosinusfunktion beträgt, die nicht quadriert ist. Die halbe Periode ist also hier , da nicht g(x) sondern die nichtquadrierte Kosinusfunktion gemeint ist. Da durch die Funktion alle x-Werte für ein u in gleicher Weise auf projiziert werden, sind auch die -Werte gleichmäßig in einem Intervall verteilt, dass ein Vielfaches der halben Periode beträgt. Halbiert man dieses Intervall solange, bis man Teilintervalle erhält, die betragen, sind die -Werte in diesen Intervallen immer noch gleichmäßig ein ungerades Vielfaches von verteilt, was wir oben schon für x-Werte gezeigt haben und für -Werte genauso wahr ist. Erinnern wir uns an die Definition des Ausdrucks "gleichmäßig verteilt", welche besagte, dass sich zwei verschiedene den gleichen Betrag vom Anfang bzw. Ende des Teilintervalls unterscheiden müssen. -Werte um Hier hat das Teilintervall die Länge und in diesem Intervall gibt es, wie gezeigt, immer mindestens zwei Werte, die sich um den gleichen Betrag vom Anfang bzw. Ende dieses Teilintervalls unterscheiden. In allen anderen Teilintervallen verhält es sich gleich. Somit ist die Bedingung 6.11 für alle definierten Winkel also für ein u, erfüllt. >, Man betrachte ein solches Paar von Winkeln, für die diese Bedingung erfüllt ist: 6.12 Da es sich hierbei also um ein besagtes Paar handelt, gilt auch: „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 39/73 6.13 Falls die Summanden in 6.13 beide gleich 0,5 sind, wird durch 6.12 der arithmetische Mittelwert zwischen Au(x1) und Au(x2) berechnet. Gewöhnlich gilt nicht dieser Spezialfall und die Summanden unterscheiden sich. Dies bewirkt, dass ein gewichteter Mittelwert von Au(x1) und Au(x2) gebildet wird. Es gibt für jedes vier solcher Paare. Gemäß 6.6 wird also die Summe von 4 gewichteten Mittelwerten gebildet und danach halbiert. Das Ergebnis repräsentiert also das doppelte des Mittelwerts der Amplitude für die Frequenz von u, der nicht das arithmetische Mittel sondern ein gewichtetes darstellt. Es besteht kein offensichtlicher Grund, warum manche x-Werte über alle Frequenzen betrachtet einen stärkeren Einfluss auf die Bestimmung der mittleren Amplitude haben sollten als andere. Dies würde das Ergebnis, das die mittleren Amplituden angibt, verfälschen. Im Folgenden möchten wir zeigen, dass dies nicht der Fall ist, sondern dass kein x-Wert über alle Frequenzen gesehen, also insgesamt, mehr Gewicht bei der Bestimmung der Durchschnittsamplituden erhält, als ein anderer. Um sicherzustellen, dass kein x-Wert bevorzugt wird, betrachten wir nun die Funktion für ein feststehendes x und über alle u. Zu diesem Zweck definieren wir x als Parameter und u als Variable. Die Funktion wird dann zu und dementsprechend erhalten wir , wobei aus Gründen der Übersichtlichkeit wieder alle g(u) durch ein dargestellt werden. In der Tabelle kann man erkennen, dass es für jedes x über alle Frequenzen außer u = 0 gesehen die gleichen 7 Werte für g(u) gibt. über alle u gesehen hat jeder x-Wert also den gleichen Anteil an den mittleren Amplituden. Man erkennt außerdem, dass alle 7 Werte verschieden sind. Einen mathematischen Beweis finden Sie unter „Beweis: Alle 7 g(u)-Werte sind verschieden“. Wie bereits gesehen, gibt es für g(x) immer zwei Phi-Werte, die sich um den gleichen Betrag von 0 bzw. von unterscheiden. Da es nur 7 verschiedenen Werte gibt, die g(u) annehmen kann, nimmt g(x) auch nur dieselben 7 verschiedenen Werte an, wenn der Parameter ist; die Funktionen geben schließlich beide die gleichen Werte an, da im Rahmen der Definitionsmenge bei beiden alle u und x durchlaufen werden, wobei einmal der eine Variable ist und einmal der andere. Unter diesen 7 verschiedenen Werten muss es also 3 der oben beschriebenen Paare von g(u) Werten geben, von denen sich jedes zu 1 aufaddiert. Der siebte Wert, welcher 0,5 beträgt liegt bei und ist selbst sein Partner. Der Mittelwert aller dieser Werte ist deshalb . „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 40/73 Es ist nun also gezeigt, dass jeder f(x)-Wert im Durchschnitt mit der gleichen Gewichtung in die Bestimmung der mittleren Amplituden eingeht, nämlich 0,5. Mit 8 Au(x) pro u erhält man durch Aufsummierung, wie in 6.6 vorgeschrieben also das vierfache einer mittleren Amplitude. Das bedeutet also, dass über alle Frequenzen die einzelnen Amplituden für ein x eine mittlere Gewichtung von 0,5 in einem Wertepaar erreichen, obwohl sie gegenüber den Amplituden anderer x-Werte einzelner Frequenzen unterschiedlich gewichtet werden, um die Durchschnittsamplituden zu bestimmen. Das heißt: Im Durchschnitt werden alle x-Werte bei der Berechnung der mittleren Amplituden gleich gewichtet. Wenn ein gewisser x-Wert an der Bestimmung der mittleren Amplitude für eine bestimmte Frequenz einen geringen Anteil hat, hat er bei einer anderen Frequenz eine große Gewichtung. Diese Erkenntnis ist besonders für die Umkehrung der DCT wichtig, auf die wir in Kapitel 9 näher eingehen. ergibt die Summe in 6.6, wie gezeigt, das Vierfache einer mittleren gewichteten Amplitude für Für alle die Schwingung der f(x)-Werte. Aus 6.6 wird daher: . F(u) ist also das doppelte der Amplitude der Funktion f(x) für die Frequenz u. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 41/73 6b Die Zweidimensionale Diskrete Kosinustransformation Die Übertragung der 1D-DCT auf die 2D-DCT fällt nun recht einfach. Man muss sich darüber im Klaren sein, dass f(x,y) nun von zwei Variablen abhängig ist, die auf eine dritte Dimension projiziert werden. Am Beispiel für u=v=4 ist hier gezeigt, wie der Graph einer kontinuierlichen Kosinusfunktion aussieht, die Variablen in zwei Dimensionen besitzt. Man kann sich das so vorstellen, dass f(x) der 1D-DCT z.B. das örtliche Auf und Ab der Meereswellen im Querschnitt beschreiben könnte, f(x,y) könnte die örtlichen Schwingungen der gesamten Meeresoberfläche beschreiben. Im Fall von Schwingungen in Bildern beschreibt f(x) einen Querschnitt durch das Bild, wohingegen f(x,y) die gesamte Bildoberfläche angibt. Bei der JPEG Kompression ist das die gesamte Bildoberfläche eines einzeln bearbeiteten 8 mal 8 großen Datenblocks. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 42/73 Überlagerung zweier solcher Kosinusfunktionen. Die 2D-DCT entsteht durch Multiplikation zweier 1D-DCT, wobei f(x) und f(y) zu einem f(x,y) kombiniert werden. Es wird daraus nicht etwa f2(x,y), da man sich die diskrete zweidimensionale Verteilung der f-Werte als eine Aneinanderreihung von eindimensionalen Verteilungen von f-Werten vorstellen kann. Die Werte bleiben gleich, für eine korrekte Zuordnung werden nun allerdings zwei Variablen benötigt. Die Formel der 2D-DCT lautet also: 6.14 Natürlich ist auch hier Es gibt 8 verschiedene horizontal- und 8 verschiedene Vertikalfrequenzen. Es gibt also 64 verschiedene Kombinationen dieser und demnach 64 F(u,v) Werte. Analog zur eindimensionalen DCT ist der Wert F(0,0) der DC-Koeffizient, alle anderen AC-Koeffizienten. Zunächst möchten wir wieder den DC Koeffizienten besprechen. Für ihn sind u = 0 und v = 0. Deswegen werden die Kosinuswerte zu 1 und die Faktoren Cu und Cv sind beide . Deshalb erhalten wir „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 43/73 . Man summiert alle f-Werte auf und teilt durch 8. Es gibt 64 verschiedene f-Werte und deren Summe entspricht dem 64-fachen Mittelwert aller f(x,y). Wir schreiben daher um: Wie man sieht, ist der DC-Koeffizient der 2D-DCT das 8-fache des arithmetischen Mittelwertes aller f(x,y). Gehen wir nun näher auf die AC-Koeffizienten ein. Wie schon bei der 1D-DCT kann auch hier zur Vereinfachung der trigonometrische Satz des Pythagoras benutzt werden, um die mittlere Amplitude zu berechnen. Analog zu 6.5 und 6.6 kann 6.14 also geschrieben werden als: 6.15 Im folgenden werden zunächst die Fälle behandelt in denen gilt: und . In diesen Fällen sind die Faktoren Cu und Cv beide gleich 1. Man berechne die Summe nacheinander: Der rechte Summenterm entspricht pro forma der Summe in 6.6. Geht man vor wie für 6.6, erhält man für die Summe den vierfachen gewichteten Mittelwert der Amplituden für ein x und alle y : Nun muss noch über alle x summiert werden: Verfährt man analog zu oben, wird daraus: F(u,v) ist also das vierfache einer gewichteten durchschnittlichen Amplitude. Für den Fall, dass entweder u = 0 oder v = 0 sind, geht man ähnlich vor, man muss jedoch beachten, dass nun ein Faktor Cu oder Cv gleich 6.15 wird dann: ist. Setzen wir für die folgende Bearbeitung willkürlich fest, dass v = 0 ist. Aus „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 44/73 6.16 Hierbei gilt: Unter der Annahme, dass v = 0 ist, ist also diese Summe gleich der 8-fachen Durchschnittsamplitude für die Frequenz 0, was nichts anderes ist als das 8-fache des Durchschnittswertes aller f(y)-Werte. 6.16 wird dann zu . Hierbei ist die Summe wieder das 4-fache der Durchschnittsamplitude, also erhält man: Da diese Tatsache ebenso gilt, wenn u = 0 ist und , schreiben wir allgemein: , wobei entweder ist. F(u,v) gibt also für den Fall, dass eine Frequenz gleich null ist, das -fache der mittleren Amplitude an. Fazit Die DCT transformiert die ortsabhängigen Pixelwerte, d.h. Helligkeits- oder Farbwerte, in frequenzabhängige Amplituden. Zu diesem Zweck werden die Pixelwerte als Überlagerung von diskreten Kosinusfunktionen verschiedener Frequenzen interpretiert, und zu jeder dieser Kosinusschwingungen wird durch die DCT eine Amplitude bestimmt. Die DCT gibt diese Amplituden jedoch nicht direkt aus, sondern liefert bestimmte Vielfache der einzelnen Amplituden. Wichtig ist, dass aus den bei der DCT entstandenen Amplituden die ursprünglichen Pixelwerte wieder richtig hergestellt werden können. Durch die DCT gehen also keine Informationen verloren, was der Grund dafür ist, dass allein durch Anwendung der DCT auch kein Speicherplatz gespart werden kann. Die DCT ist verlustfrei. Würde man die durch die DCT entstandenen Amplituden direkt ohne weitere Zwischenschritte codieren, wäre man sogar vor das Problem gestellt, dass die Wertemenge der zu codierenden F(u,v)-Werte größer ist als die Wertemenge von f(x,y). F(0,0) gibt zum Beispiel den 8-fachen Mittelwert aller f(x,y) an, welche Werte von -128 bis 127 annehmen können. F(u,v) hat also eine Wertemenge von [-1024; 1016]. Für andere u und v verhält es „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 45/73 sich ähnlich, wobei jedoch die Faktoren, mit denen die Amplituden multipliziert werden, nicht so groß sind. Allerdings gibt es noch eine interessante Tatsache, die die niedrigeren Faktoren zum Teil ausgleichen kann. Kein f(x,y) liegt auf einem Maximum einer Kosinusfunktion mit einer Frequenz (u,v). Amplituden geben allerdings den Funktionswert beim Maximum der Kosinusschwingung an. Deshalb kann eine durch die DCT angegebene Amplitude für eine bestimmte Frequenz (u,v) größer sein als 127 oder kleiner als -128, wenn f(x,y) geeignete Werte annimmt, die zu dieser bestimmten Frequenz "passen". „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 46/73 7 Quantisierung In natürlichen Bildern gibt es auf kleinem Maßstab von 8 mal 8 Pixeln keine starken Helligkeits- oder Farbunterschiede. Demnach werden die AC-Koeffizienten mit steigenden Frequenzen tendenziell kleiner. Man definiert für jeden einzelnen Ort (u,v) einen Quantisierungsfaktor Q(u,v). Nun werden die F(u,v)-Werte quantisiert, indem man jeden F-Wert an der Stelle (u,v) durch einen entsprechenden Quantisierungsfaktor Q an der Stelle (u,v) teilt und auf die nächste ganze Zahl, also Integerzahl, rundet. Durch das Quantisieren, also das Teilen und Runden der Werte, wird eine Reduzierung der Wertemenge von F(u,v) erreicht, was den Vorteil einer späteren Kodierung mit weniger Bits ermöglicht. Außerdem werden viele hochfrequente AC-Koeffizienten zu 0 quantisiert, was durch Redundanz einen Vorteil bei der Kodierung bietet (dass gleiche Werte zusammengefasst werden, haben wir bereits in Kapitel 2.4 gezeigt, weitere Details zur Codierung finden Sie in Kapitel 8). Links: geringer Quantisierungsfakor, rechts: hoher Quantisierungsfakor. Je stärker die Quantisierung ist, desto ungenauer wird die Wiederherstellung des Ausgangsbilds und desto mehr Artefakte treten auf. Je höher der Quantisierungsfakor ist, desto größer wird, wie man bei den beiden Beispielbildern oben erkennen kann, die Ungenauigkeit bei der Wiederherstellung der ursprünglichen F(u,v) Werte, da die entstandenen Rundungsfehler nun bei der Dequantisierung mit einem höheren Faktor multipliziert werden müssen, um die ursprünglichen Werte zu erlangen, wodurch die Fehlerfortpflanzung größer wird, als wenn mit einem kleinen Faktor multipliziert würde. Das menschliche Auge ist allerdings nicht sehr empfindlich für hochfrequente Schwingungen im Bild (siehe Kapitel 1.1), weswegen man höhere Quantisierungsfaktoren für höhere Frequenzen benutzen kann, um auf Kosten von stärkeren Rundungsfehlern, die allerdings auf Grund der Unzulänglichkeiten des menschlichen Auges nicht wichtig sind, den Vorteil von mehr entstandenen Nullen nutzen zu können. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 47/73 Die DCT-Koeffizienten, die mit größeren Frequenzen tendenziell kleinere Werte annehmen, werden durch Quantisierungsfaktoren geteilt. Diese Faktoren werden mit höheren u- und v-Werten größer. Ergebnis: Viele der kleinen DCT-Koeffizienten (diejenigen mit hohen Frequenzen) werden so (nach dem Teilen und Runden) zu Null quantisiert. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 48/73 8 Codierung Nach der Quantisierung der 8*8 Blöcke werden nun alle Werte codiert, um weiteren Speicherplatz zu sparen. Dieses geschieht üblicherweise mit der sogenannten Huffman-Codierung, die die Werte in Binärcode umwandelt und es sich dabei zu Nutzen macht, dass bestimmte Werte häufiger vorkommen als andere. Warum das dem Komprimieren förderlich ist, wie es funktioniert und wie man die 8*8-Blöcke vorher vorbereiten muss, sehen wir im Laufe dieses Kapitels. 8.1 Zick-Zack-Umsortierung Durch das Quantisieren sind viele Null-Werte entstanden, was ja auch unsere Absicht war, um Redundanzen zusammenfassen zu können. Aus Kapitel 2.4 wissen wir, dass Werte gruppiert werden können, wenn sie hintereinander stehen. Damit das in unseren 8*8-Matrizen der Fall ist, muss man sie im Zick-Zack Kurs abgelesen, denn dann stehen möglichst viele der beim Quantisieren entstandenen Nullen hintereinander. Man liest die Werte einer 8*8-Matrix im dargestellten Zick-Zack-Verfahren ab, um so die häufig auftretenden Nullen am Ende der Matrix zu gruppieren. Nun haben wir die Werte hintereinander aufgeschrieben, die 8*8-Matrix also in einen 1x64-Vektor umgewandelt. Grundlage für die Erstellung eines sogenannten Huffman-Codes ist nun eine stochastische Verarbeitung der Werte, die die Matrix enthält, denn es ist wesentlich zweckmäßiger, häufig auftretenden Werten einen kurzen Code und seltener vorkommenden Werten einen langen zu geben, als jeden einzelnen Wert ungeachtet, wie oft er auftritt, mit der gleichen Codelänge zu verschlüsseln. 8.2 Huffman-Codierung: Stochastische Auswertung Bevor wir den Huffman-Code auf unseren Vektor anwenden, demonstrieren wir das System der stochastischen Auswertung, indem wir folgendermaßen statt 64 verschiedenen Zahlenwerten ein herkömmliches Wort codieren, bestehend aus bestimmten der 26 Buchstaben des Alphabets, was etwas anschaulicher sein dürfte. Als Beispiel sei hier die beliebte Begrüßung unserer ehemaligen Mathematiklehrerin willkommen, die da heißt: "MOORJEEEN". Wir wollen für dieses Wort nun einen einzigartigen Code finden, der ohne Zweifel dekodierbar ist. Dies ist eine wichtige Voraussetzung, denn wir wollen auf Trennzeichen zwischen den Codes „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 49/73 verzichten (um nicht unnötig Speicher zu belegen) und automatisch erkennen, wo ein Buchstabe anfängt und aufhört. Zunächst bestimmen wir die relativen Häufigkeiten der einzelnen Buchstaben: Dann ordnen wir die Paare nach Wahrscheinlichkeiten (von der größten zur kleinsten): Nun fassen wir die beiden Buchstaben mit den kleinsten Wahrscheinlichkeiten zusammen und geben dem einen den Code 0, dem anderen den Code 1: Im nächsten Schritt werden wieder die beiden Elemente mit den kleinsten Wahrscheinlichkeiten zusammengefasst, denen dann wieder die Ziffern 0, bzw. 1 zugeordnet werden. Die Buchstaben G und N erhalten jeweils einen neuen Code, indem dem alten einfach 1 vorangestellt wird. So verfahren wir nun, bis alle Buchstaben diesen Prozess durchlaufen haben: Das Verfahren ist hiermit zu Ende geführt und zeigt nun für jeden Buchstaben einen Huffman-Code an, dargestellt durch Binärzahlen. Unser Ausgangswort MOORJEEEN erhält jetzt also folgenden Code: „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 50/73 1000101101110000000111 Oft wird in der Praxis auch von einem Huffman-Baum gesprochen, da man den Vorgang, die jeweils seltensten Werte zusammenzufassen und ihnen 0 oder 1 zuzuordnen, auch in Form eines (aus der Schulstochastik bekannten) Wahrscheinlichkeits-Baumes darstellen kann, nur dass hier die Pfade einen Code für jedes Element der Ergebnismenge angeben: Den Code für ein bestimmtes Symbol liest man ab, indem man die einzelnen Pfade des Huffman-Baumes entlangliest; für "J" ergibt sich so der Code 110. Die "leeren" Knoten sind keine Panne oder ein unschöner Nebeneffekt, sondern notwendig: Sie sorgen dafür, dass die einzelnen Codes einzigartig sind und dass kein Code Präfix eines anderen ist (das wird später noch genau erläutert). Der Code 1000101101110000000111 ist eindeutig identifizierbar mit dem Ausgangswort MOORJEEEN, ohne dass Trennzeichen nötig sind, was genau die Stärke der Huffman-Codierung ist: mit möglichst wenig Platz (es entfällt Speicherplatz für Trennzeichen) kann eine lange Information gespeichert werden. Wir sehen auch, dass die Buchstaben, die im Beispielwort oft auftauchen, kurze Codes erhalten haben. Das führt ebenfalls zur Minimierung des Speicherplatzes. Wäre das Ausgangswort MOORJEEEN normal in Binärcode umgewandelt worden, hätte man statt der 22 Stellen des Huffman-Codes (1000101101110000000111) 42 benötigt (jedem Buchstaben wird seine Platzzahl im Alphabet in Binärform zugeordnet, außerdem kommen 8 Trennzeichen hinzu, da die Codes nicht eindeutig sind). Neben diesem Verfahren des Codierens gib es auch die arithmetische Codierung - sie unterscheidet sich wenig von der Huffman-Codierung, da sie die Wahrscheinlichkeiten als Dezimalzahlen angibt, und nicht als Brüche. Allerdings ist sie patentgeschützt, was viele Benutzer zurückschrecken lässt und wieder auf die HuffmanCodierung verweist. 8.3 Huffman-Codierung: Hintergründe Im Folgenden wollen wir kurz darstellen, warum der Huffman-Code so ideal ist, weshalb er kurz ist und warum er keine Trennzeichen benötigt. Dazu müssen wir etwas weiter ausholen: Die Huffman-Codierung gehört in das große Feld der Informationstheorie. Eingeführt sei an dieser Stelle der Begriff der Entropie: Betrachtet man ein Zufallsexperiment mit n möglichen Ausgängen, was durch den endlichen Wahrscheinlichkeitsraum mit beschrieben wird, so herrscht Unsicherheit über den Ausgang dieses Experiments. Die Unsicherheit über den Ausgang des Experiments messen wir mit der Zahl H(p), der Entropie des Experiments. Das Maß der Unbestimmtheit muss nun auch anschaulich verständlich gemacht werden: Wir stellen uns ein Experiment vor, in dem es n verschiedene Versuchsausgänge gibt. Die Person A weiß schon, wie der Versuch ausgegangen ist, Person B soll dies mit Hilfe von Fragen herausfinden. Die mittlere Anzahl von Fragen, die B benötigt, um die Antwort herauszufinden ist nun die wahre Entropie. Wir gelangen so zur Definition: Für ein Zufallsexperiment ist die wahre Entropie der Erwartungswert der Anzahl benötigter Fragen bei optimaler Fragestrategie. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß definiert als 51/73 Die Formel der sogenannten ideellen Entropie, mit der wir rechnen, nennen wir an dieser Stelle noch einmal (uns ist sie bereits in Kapitel 2.3 begegnet): Falls es Sie interessiert, geben wir Ihnen hier eine Herleitung im Anhang „Beweis: Jeder Huffman-Code ist optimal“ an. Wer dem nicht ganz akribisch nachgehen möchte, dem liefern wir im Folgenden zwei Beispiele zur Verdeutlichung: 1. Das Experiment, bei dem schon vor Ausführung gesagt werden kann, wie es ausgeht, hat die wahre Entropie 0. Im Allgemeinen gilt dann auch H(p) > 0 2. Beim Münzwurf, also bei ist offensichtlich optimal. Somit ist welches Ereignis eingetreten ist. , fragt man nach dem Versuchsausgang etwa: "Ist es ?" Das , denn es ist nur eine Frage nötig, um herauszufinden, Wir ersetzen jetzt die Worte "ja" und "nein" durch die Zeichen 0 und 1. Die Fragestrategie kann nun anhand eines Codes ausgedrückt werden. Ein Wort sei eine endliche Folge von Nullen und Einsen. Ist die Länge des Wortes, zum Beispiel hat bezeichnen wir mit Folge von Zeichen nennen wir das leere Wort, es hat die Länge 0. die Länge ein Wort, so . Die leere Damit ein Code optimal wird, muss er zwei Eigenschaften erfüllen: er muss die Präfixeigenschaft besitzen und eine injektive Abbildung sein. Die Präfixeigenschaft besagt, dass kein Codewort Präfix eines anderen sein darf. Praktisch gesagt heißt das, dass kein Codewort in den Anfangszeichen eines anderen Codewortes vorkommen darf. Injektive Abbildung heißt, dass jedem Versuchsausgang eindeutig ein Codewort zugeordnet ist. Beide Eigenschaften sind durch das Huffman-Verfahren gegeben, das speziell darauf ausgerichtet wurde, keine Codes zu erzeugen, die Präfix eines anderes sein können. Wir betrachten als Beispiel fünf Codes , von denen aber nur drei brauchbar sind. Finden Sie heraus, welche aus je einem der oben genanntem Gründen nicht benutzt werden können! Haben Sie herausgefunden, welche beiden Codes nicht brauchbar sind? Code 1 und 2 sind nicht brauchbar: Code 1 ist nämlich nicht injektiv und Code 2 besitzt nicht die Präfixeigenschaft. 8.4 Codierungsmuster und Huffman-Codierung Wieder zurück zu unserer quantisierten Matrix, bzw. unserem Vektor: Der Wert in der oberen linken Ecke der quantisierten Matrix (bzw. der erste Wert unseres Vektoren) ist der DC-Wert - er wird gesondert verschlüsselt. Weil er der mit Abstand der größte Wert ist, wird nämlich nicht sein eigener Wert codiert, sondern die Differenz zum DC-Wert des vorangehenden Blocks: „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 52/73 Der Code besitzt zwei Symbole: das erste gibt an, wie viele Bits benötigt werden, um den codierten Wert zu speichern. Zur Bestimmung dieser Bitzahl gibt es eine Tabelle im Anhang „Tabelle zur Bitzahl“. Symbol 2 gibt einfach den Wert an. In unserem Beispiel sei der DC-Wert des vorangehenden Blocks 29. Die Differenz zu unserem Block ist damit 2. Dieser Wert 2 wird nun in "Symbolform" gebracht: Zum Speichern der 2 werden 2 Bits benötigt und das Symbol selbst ist 2. Daraus folgt die Zwischendarstellung in der Form (2)(2). Für die Codierung der AC-Werte gilt nun ein etwas anderes Muster: Auch hier werden zwei Symbole benutzt, das erste hat aber zwei Komponenten. Die erste Komponente ist die so genannte Lauflänge des Symbols, d.h. die Anzahl der ununterbrochenen Nullen, die dem Symbol vorangehen seit dem letzten Symbol, was ungleich null war. Die zweite Komponente ist wieder die Anzahl der Bits, die benötigt werden, um die Zahl zu speichern. Im zweiten Symbol wird die Zahl selbst festgehalten. Für unsere erste Zahl ungleich Null in der Zick-Zack Reihe, den DCT-Koeffizienten AC3, bedeutet das: · · · Symbol 1: Lauflänge 1 und Bitzahl 1 Symbol 2: der Wert selbst -7 Fertige Zwischendarstellung: <(1;1),-7> „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 53/73 Der quantisierte DCT-Koeffizient AC70 zum Beispiel hat den Wert -3. Dieser Wert kann mit 2 Bit codiert werden, vor ihm stehen im Zick-Zack-Kurs 11 Nullen. Also lautet seine Tupel-Beschreibung <(11;2),-3>. Die Nullen, die in der letzten langen Sequenz hintereinander auftauchen, werden mit einen "End-of-block"Symbol dargestellt: (0;0), d.h. es folgen bis zum Ende des Blocks nur noch Nullen. Alle Werte des Blocks müssen in diese Art der Zwischendarstellung umgeformt werden, um sie dann zu codieren. Die geschieht nun mit der oben angedeuteten Huffman-Codierung. Symbol 1 und Symbol 2 werden getrennt auf der Basis einer stochastischen Auswertung codiert. Diese Auswertung kann man wie im obigen Beispiel beschrieben selbst vornehmen, um dann für jedes Symbol einen einzigartigen Code zu erhalten. Allerdings ist dies bei den 8*8 Blöcken sehr viel Arbeit, die man sich ersparen kann. Es gibt nämlich Tabellen, die auf empirischen Werten beruhen und so ein schnelleres Verfahren ermöglichen (zwar sind diese Tabellen nicht immer optimal, weil sie eben allgemein für alle Matrizen gelten, aber da sie vorgefertigt sind und die herkömmlichen zu verschlüsselnden Werte abdecken, kann zugunsten der gesparten Mühe beim Selbercodieren ein nicht zu 100% optimaler Code hingenommen werden). Wir haben einige solcher Tabellen ausgewählt, die uns die Mühe beim Codieren erleichtern - wer mag, kann gerne selbst eine stochastische Auswertung unseres Vektors vornehmen und sich selbst einen Code basteln, es wird aber viel Arbeit werden. Eine „Beispielcodierung für unseren Vektor“ geben wir Ihnen im Anhang an. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 54/73 9 Decodierung der JPEG-Bilddatei Nachdem jede einzelne 8*8-Pixelmatrix, die 64 Bildpunkte mit je 3 Layers (Helligkeits-, Farbton- und Farbsättigungswerte von 0 bis 255) trägt, die Indexverschiebung, die Diskrete Cosinus Transformation, die Quantisierung und die Huffman-Codierung durchlaufen hat, ist die JPEG-Kompression abgeschlossen: Eine Bilddatei mit wenig Speicherplatzbedarf liegt uns vor. Nun ist die schönste und effektivste Datenkompression sinnlos, wenn die Ursprungsdaten nicht wieder hergestellt werden können: Das JPEG-Format ist natürlich auch decodierbar, sodass die komprimierten Bilder auch wieder angeschaut werden können. Wie wir jedoch während der letzten Kapitel schon angedeutet haben: Das Ausgangsbild lässt sich nicht zu 100% wieder herstellen, denn wir haben beim Komprimieren ja einen Verlust an Bilddaten in Kauf genommen. Um das komprimierte Bild nun wieder herzustellen, wird das gesamte bisherige Verfahren "rückwärts" angewandt. 9.1 De-Codierung Zuerst wird der Binärcode entschlüsselt, den wir nach dem Huffman-Verfahren selbst (oder mit Hilfe von empirischen Codierungs-Tabellen) erstellt haben. Dieses bedarf keiner großen Rechenoperationen, da der Huffman-Code ja die Präfixeigenschaft erfüllt (siehe Kapitel 8.3). Somit ist beim Lesen des Binärcodes für den PC ohne Trennzeichen eindeutig, wann ein Wert aufhört und wann ein neuer anfängt. Welcher Binärcode welcher Zwischendarstellung entspricht, entnimmt der PC beim Lesen der Bilddatei entweder den mitgespeicherten Tabellen oder den programmeigenen empirisch erstellen Tabellen, auf die in der Bilddatei verwiesen wird. Liegen nun erst einmal die Zwischendarstellungen (wir erinnern uns: in Tripel-Form) vor, können ebenso problemlos die 8*8-Blöcke wieder zusammengesetzt werden, da die Tripel ja angeben, welcher Wert an welcher Stelle innerhalb eines 1*64-Vektors steht und wie viele Nullen ihm vorausgehen. Alle Vektoren sortieren wir nach dem rückwärts angewandten Zick-Zack-Verfahren (siehe Kapitel 8.1) wieder um, sodass wir je eine 8*8Matrix erhalten, in der die bearbeiteten DCT-Koeffizienten stehen. 9.2 Dequantisierung Bis hierhin ist die Entschlüsselung der JPEG-Kompression nicht sonderlich schwierig, da es sich um reine, einfache Umkehroperationen handelt, denen man die Binärwerte unterzieht. Nun haben wir also eine Beispiel8*8-Matrix mit bearbeiteten DCT-Koeffizienten, aus denen wir wieder die ursprüngliche Farbinformationen lesen wollen. Durch die Dequantisierung können jedoch die ursprünglichen, unbearbeiteten DCT-Koeffizienten nicht wieder korrekt hergestellt werden, da man mit gerundeten Werten arbeitet (siehe Kapitel 7). Es werden die durch Division der DCT-Koeffizienten durch den jeweiligen Quantisierungsfaktor Q(u,v) entstandenen quantisierten Werte mit Q(u,v) multipliziert: Hierdurch erhält man DCT Koeffizienten, die von den ursprünglichen etwas abweichen. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 55/73 9.3 Die Inverse Diskrete Kosinustransformation Durch die inverse DCT werden aus den decodierten und dequantisierten DCT-Koeffizienten nun wieder Pixelwerte hergestellt. Diese Pixelwerte entsprechen natürlich nicht genau den ursprünglichen f(x,y), da im Laufe der Quantisierung Informationen weggefallen sind. Die inverse DCT kann aber im Prinzip, also wenn sie mit den genauen DCT-Koeffizienten arbeiten würde, die ursprünglichen Pixelwerte wieder genau herstellen. Die Formel der zweidimensionalen inversen DCT lautet: 9.1 Wir haben in Kapitel 6 dargelegt, dass die f(x,y)-Werte als überlagerung von Kosinusfunktionen aufgefasst werden und dass durch die DCT die Durchschnittsamplituden jeder relevanten Kosinusfunktion berechnet werden. "Überlagerung" bedeutet nun, dass ein f(x,y)-Wert der Summe der Funktionswerte aller berechneten Kosinusfunktionen an der Stelle (x,y) entspricht. Man erhält aus den Amplituden wieder die f(x,y)-Werte, indem man durch Multiplikation der Amplituden mit dem Kosinus an der Stelle (x,y) die Funktionswerte der Kosinusfunktionen an dieser Stelle berechnet und alle miteinander addiert. Da F(u,v) einem Vielfachen der Durchschnittsamplitude der Kosinusfunktion mit der Frequenz der Nummer (u,v) entspricht, multipliziert man F(u,v) mit obigen Faktoren, wodurch man dann die Durchschnittsamplitude erhält. Hierbei ist natürlich auffällig, dass die Faktoren, mit denen F(u,v) multipliziert wird, nämlich 9.2 die gleichen sind, die auch schon bei der Forward DCT benutzt wurden. Es ist angenehm, dass man keine neuen Faktoren definieren musste. Das ist auch der Grund dafür, warum die Faktoren von vorn herein so gewählt wurden. Bevor man bei der Forward DCT die Faktoren benutzt gibt die Summe in 6.18 den Wert aus, wobei die Durchschnittsamplitude ist. Durch Anwendung der obigen Faktoren 9.2 erhält man dann für F(u,v): . Multipliziert man F(u,v) bei der inversen DCT dann wieder mit den Faktoren 9.2 erhält man also: „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 56/73 Bei der inversen DCT kann man demnach wieder die gleichen Faktoren benutzen, wodurch man die Durchschnittsamplituden erhält, mit denen man dann die Funktionswerte der Kosinusfunktionen ausrechnen kann. Wenn man dann noch diese Funktionswerte aufaddiert, wie in 9.1, erhält man f(x,y). Eine ZurückVerschiebung in die Wertemenge [0;255] ergibt dann die ursprünglichen, diskretierten Pixel, die Orts- und Farbinformationen tragen - das komprimierte Ausgangsbild (eine Konvertierung zurück in den RGB-Farbraum kann erfolgen). „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 57/73 10 Verschiedene Dateitypen im Vergleich Dieses Kapitel haben wir in der Druckversion bewusst ausgelassen; es enthält nur unwesentliche Informationen zur JPEG-Kompression selbst, sondern soll dabei helfen, das Format JPEG im Vergleich zu anderen digitalen Bildformaten zu bewerten, benötigt dafür aber eine Menge Platz. 11 Änderungen in JPEG2000 JPEG2000 ist der Nachfolger des schon über 10 Jahre alten Formats JPEG. JPEG hatte vor allem zwei Schwachpunkte: Zum einen konnten keine zusätzlichen Informationen bei den Daten abgespeichert werden, was heute jedoch in vielen Fällen dringend benötigt wird (zum Beispiel Informationen über den Autor des Bildes, digitale Wasserzeichen, Kommentare etc.), zum anderen treten bei hohen Kompressionsraten starke Verfälschungen im dekomprimierten Bild auf, was ja, wie wir inzwischen wissen, durch die diskrete Cosinus-Transformation und die Quantisierung verursacht wird. JPEG2000 hat nun einige veränderte technische Eigenschaften, die entscheidende Qualitätsverbesserungen zur Folge haben. Zunächst wird die diskrete Cosinus-Transformation durch die Wavelet-Transformation ersetzt. Diese neue Transformation teilt das Bild nicht mehr in 8*8 Blöcke, sondern codiert es fortlaufend, so dass höhere Kompression, aber bessere Bildqualität erreicht wird als bei JPEG. Die Datenmenge wird auch geringer, was in einer höheren Geschwindigkeit beim Übertragungsvorgang resultiert. Dies ist bei der heutigen Nutzung von Netzwerken und Internet nur zu begrüßen. Zusammenfassend und als Anreiz, sich weiter über unsere Arbeit hinaus mit dem Thema JPEG-Kompression zu befassen, lässt sich also sagen, dass die entscheidenden Schwachpunkte des alten JPEG-Verfahrens durch JPEG2000 wegfallen, bzw. deutlich reduziert werden. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 58/73 Resümee Bilder werden digitalisiert, indem sie räumlich und farblich diskretiert werden, das heißt, sie werden in quadratische Bildpunkte, sogenannte Pixel, zerlegt. Jeder Bildpunkt enthält eine Orts- und eine Farbinformation. Ein digitales Bild ist demnach als eine Matrix zu verstehen, die Pixel hat, wobei und Zeilen und . Die Elemente Grauwert oder die Farbe des Bildpunktes an der Stelle des Bildes Spalten, also sind die Pixel, die den angeben. Beim Digitalisieren bestimmen Rasterung und Quantisierung das Aussehen des digitalen Bildes: Die Rasterung definiert die Größe eines Bildbereichs, die 1 Pixel zugeordnet wird, die Quantisierung gibt an, wie viele Farbinformationen ein Pixel aufnimmt (2=Schwarz/weiß; 256 Graustufen=normales Graubild; 16,7 Mio. Farben=normales Farbfoto). Die Auflösung eines Bildes, das heißt, wie groß ein Pixel ist, bzw. wie viele Pixel auf ein bestimmtes Maß passen, wird in dpi angegeben: Dots per Inch (Pixel pro Inch). Wird nun ein digitales Farbbild gespeichert, so besitzt es 3 Schichten (Layers), die jeweils eine Farbinformation tragen: Eine speichert die Rot, eine die Grün- und eine die Blauwerte, die jeweils zwischen 0 und 255 liegen. Dies ist das gängige RGB-Modell. Wenn ein RGB-Bild ohne Qualitätsverlust gespeichert wird (zum Beispiel im TIFF- oder im BITMAP-Format), so wird viel Speicherplatz benötigt: Jeder Pixel kann 2563 verschiedene Werte annehmen (256 für jeden Layer), die binär codiert werden müssen und entsprechend Platz in Anspruch nehmen. Wenn nun der Speicherbedarf eines Bildes mit der JPEG-Kompression reduziert wird, werden verschiedene Mittel genutzt, den Speicherumfang zu verringern. Die vorhandenen RGB-Bilddaten werden zunächst in den YUV- oder YCbCr-Raum übertragen. Statt eine Farbinformation über Rot-, Grün- und Blauwerte darzustellen, wird sie durch Helligkeit, Farbton, Farbsättigung (YUV), bzw. durch Helligkeit, Abweichungen vom Grau- zum Blauwert und Abweichung vom Grau- zum Rotwert (YCbCr) ausgedrückt. Y = 0,299R + 0,587G + 0,114B U = 0,493(B - Y) V = 0,877(R - Y) bzw. Y = 0,299R + 0,587G + 0,114B Cb = -0,1687R - 0,3313G + 0,5B + 128 Cr= 0,5R - 0,4187G - 0,0813B + 128 In den beiden Farbräumen YUV und YCbCr kann man sich zu Nutze machen, dass das menschliche Auge für Helligkeitsunterschiede empfindlicher ist als für Farbunterschiede; daher werden die Helligkeitswerte genauer gespeichert als die anderen Informationen: Es wird ein Subsampling vorgenommen, indem mehrere Farbwerte gemittelt werden und dieser gemittelte Wert stellvertretend für die Originalwerte gespeichert wird. Die gängigsten Subsampling-Verhältnisse sind 4:2:2 und 4:1:1, was bedeutet, dass, während die Y Werte, also die Helligkeitswerte, mit voller Auflösung gespeichert werden, die beiden Farbwerte U, V oder Cb, Cr nur mit jeweils halber bzw. viertel Auflösung gespeichert werden. Für sie werden 4 Werte zu zwei bzw. zu einem gemittelt. Was nun folgt, ist die Indexverschiebung, die die 256 Werte aus der Wertemenge [0; 255] in die Wertemenge [128;127] verschiebt. Für die folgenden Operationen zerlegt man das Bild außerdem in seine einzelnen Layer und diese jeweils in 8*8-Pixel-Blöcke. Diese enthalten Pixelwerte aus Wertemenge [-128;127], die durch eine Funktion f(x,y) beschrieben werden, wobei x und y die Koordinaten des Pixels sind. Auf diese Werte wendet man die zweidimensionale diskrete Kosinustransformation (DCT) an. Die Formel hierfür lautet: „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 59/73 Bei der DCT werden die f(x,y) Werte als Resultat von überlagerten Kosinusfunktionen interpretiert. Wenn man nun ein gewisses f(x,y) als Wert einer Kosinusfunktion einer bestimmten Frequenz und Amplitude am Ort (x,y) festlegt, kann man f(x,y) schreiben als Für die gleiche Frequenz, gemeint sind damit die beiden Frequenzen in den zwei Dimensionen, kann man dies auch für alle anderen (x,y) festlegen. Da die f(x,y) Werte in natürlichen Bildern gewöhnlicherweise nicht genau eine bestimmte zweidimensionale Kosinusfunktion beschreiben, erhält man für die verschiedenen (x,y) unterschiedliche Amplituden. Ein f(x1,y1) muss dann durch die Kosinusfunktion der vorausgesetzten Frequenzen (u,v) mit der Amplitude Au,v(x1,y1) entstanden sein, ein f(x2,y2) durch eine mit Au,v(x2,y2). Durch Einsetzten des neuen Ausdrucks für f(x,y) erhält man: Diese Formel errechnet nun einen Wert, der für das Vierfache eines Mittelwertes aller Amplituden für die bestimmte Frequenz angibt. Dieser Mittelwert ist normalerweise nicht arithmetisch, da die quadrierten Kosinuswerte gewöhnlich nicht für jeden Ort gleich 0,5 sind. Für ist F(u,v) um größer als ein solcher Mittelwert. Außerdem berechnet man mit obiger Formel für F(0,0) das den Faktor achtfache des arithmetischen Mittelwertes aller f(x,y). Da das F für eine bestimmte Frequenz (u,v) nur eine Art Mittelwert angibt, lässt sich durch diesen Wert nicht das ursprüngliche f(x,y) wiederherstellen. f(x,y) ist nicht hinreichend durch das F einer u,v Kombination beschrieben. Deshalb werden mehrere F(u,v) Werte berechnet, aus denen dann später die originalen f(x,y) berechnet werden können. Die F(u,v) Werte werden nun noch quantisiert, indem man sie durch Quantisierungsfaktoren Q(u,v) einer Quantisierungstabelle dividiert und auf die nächste Integerzahl rundet: Damit wird erreicht, dass viele hohe Frequenzen, die durch kleine Werte repräsentiert werden, durch das Teilen mit großen Faktoren und das anschließende Runden gleich Null werden, was bei der nun folgenden Codierung Vorteile und Platzersparnis bringt. Bei der Codierung geht es darum, die Koeffizienten des 8*8-Blocks mit einem einzigartigen Binärcode zu verschlüsseln. Dazu wird die sogenannte Huffman-Codierung herangezogen, mit der dies optimal möglich ist. Im ersten Schritt werden die Werte der Matrix in eine Lauflängen-Zwischendarstellung gebracht, die angibt, wie viele Nullen einem bestimmten Wert vorangehen (damit werden lange Folgen von Nullen möglichst platzsparend zusammengefasst), wie viele Bits zur Speicherung des Wertes notwendig sind und was der Wert selbst ist. Jeder Wert ungleich 0 wird demnach als Tripel (3-Tupel) zwischendargestellt. Diese Zwischendarstellungen werden nun stochastisch ausgewertet, d. h. es werden die relativen Häufigkeiten der Werte aufgelistet. Um zu codieren, werden nun immer den beiden Werten mit den kleinsten „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 60/73 Wahrscheinlichkeiten der Code 0 und 1 zugeordnet. Im nächsten Schritt wird den bereits entstandenen Codes diese 0 oder 1 vorangestellt (die jeweils neu verschlüsselten Werte erhalten wieder eine einzelne 0 oder 1 als Code, dem dann ggf. weitere Symbole vorangestellt werden). So wird mit den Werten weiter verfahren, bis allen ein einzigartiger Binärcode zugeteilt ist, der am so entstandenen Huffman-Baum abgelesen werden kann. So werden den am häufigsten auftretenden Werten kurze Codes zugeteilt, weniger häufig vorkommenden hingegen lange Codes. Um nicht für jedes Bild und jede Matrix aufwendig neue Codes zu kreieren, werden häufig bereits fertige Verschlüsselungstabellen benutzt, die auf empirischen Daten beruhen und im großen und ganzen eine recht ordentliche Codierung bieten. Dieser Binärcode, der die Präfixeigenschaft besitzt (d.h. die codierten Symbole sind eindeutig und kein Code kommt im Anfang eines anderen Codes vor), kann dann ohne Trennzeichen Tripel-Wert für Tripel-Wert zusammengesetzt werden und stellt so die Codierung der 8*8-Blöcke dar. Um das Bild nun wieder herzustellen, wird das gesamte bisherige Verfahren "rückwärts" angewandt. Zuerst wird also der Binärcode entschlüsselt, was anhand der Codierungs-Tabellen ja ohne weiteres möglich ist: da der Code die Präfixeigenschaft erfüllt, ist eindeutig, welcher Code zu welcher Zwischendarstellung gehört; dem angewandten Huffman-Verfahren ist es eigen, dass die lange Code-Kette ohne Probleme oder Verwechslungen wieder in die richtigen einzelnen Ausgangswerte zerlegt werden kann. Anhand der entschlüsselten Zwischendarstellungen (in Tripel-Form) können nun wieder die 8*8-Blöcke zusammengesetzt werden, da die Tripel ja angeben, welcher Wert an welcher Stelle steht und wie viele Nullen ihm vorausgehen. Durch die Dequantisierung der nun vorliegenden Werte, also durch Multiplikation mit dem jeweiligen Quantisierungsfaktor, können die ursprünglichen DCT Koeffizienten nur mit Abweichungen wiederhergestellt werden, da ja nach dem Quantisieren gerundet wurde. Dieses macht sich in der Bildbeschaffenheit bemerkbar: Je stärker anfangs quantisiert wurde, desto mehr Ungenauigkeiten und auch Fehler (sogenannte Artefakte) hat das Bild am Ende. Jeder der 64 nun erhaltenen F(u,v) Werte pro 8*8-Matrix ist ein Vielfaches einer Durchschnittsamplitude, aus der für einen konkreten Ort (x,y) mithilfe der Kosinusfunktion ein ganz bestimmter Wert f'u,v(x,y) erzeugt werden kann, der, unabhängig von den Ungenauigkeiten der Dequantisierung, normalerweise nicht dem ursprünglichen Pixelwert f(x,y) entspricht. Der Grund dafür ist offensichtlich: Die F(u,v) Werte sind Vielfache der Durchschnittsamplitude für alle Orte, welche normalerweise nicht der zu (x,y) gehörenden Amplitude Au,v(x,y) entspricht, durch die mithilfe der Kosinusfunktion der Wert f(x,y) hergestellt werden kann. Würden die F(u,v) Werte nicht den Vielfachen sondern den Durchschnittsamplituden entsprechen, würde man durch Addition aller f'u,v(x,y) für einen konkreten Ort und für alle Frequenzen den ursprünglichen Wert f(x,y) erhalten. Die verschiedenen F(u,v) Werte entsprechen aber bestimmten Vielfachen der Durchschnittsamplituden, weshalb jeder noch mit einem Faktor verkleinert werden muss, bevor man ihn anwendet, um ein f'u,v(x,y) zu berechnen. Dieser Faktor ist Jetzt erst offenbart sich nämlich der Grund für die Wahl dieser Faktoren bei der DCT. Allein durch die Summen in der Formel erhält man nämlich Werte, die um den Faktor „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 61/73 größer sind als die jeweilige Durchschnittsamplitude. Für die Berechnung von F(u,v) multipliziert man diese deshalb mit den oben genannten Faktoren. Für F(u,v) erhält man dann also ein Vielfaches der Durchschnittsamplitude für die Frequenz (u,v). Um die Durchschnittsamplitude zu erhalten und um die davon abhängigen f'u,v(x,y) zu erhalten, multipliziert man jedes F(u,v) bei der inversen DCT wieder mit dem gleichen Faktor, der schon bei der forward DCT benutzt wurde. Man erhält dann: Diese Durchschnittsamplitude kann man nun benutzen, um die f'u,v(x,y) zu berechnen, die dann aufaddiert werden, um f(x,y) zu erhalten: Die erhaltenen f(x,y) Werte repräsentieren nach dem Verschieben in die Wertemenge [0;255] wieder Helligkeitsund Farbwerte, die dann (Layer für Layer und Matrix für Matrix zusammengesetzt) als Bild dargestellt werden können. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 62/73 Anhang Hintergrund-Information: Bits und Bytes Jedwede Information wird von den Computer-Schaltkreisen auf das Erkennen niedriger und hoher Spannungen reduziert. Niedrige Spannungen bekommen den Wert 0 zugeordnet, hohe den Wert 1. Mit diesen beiden Werten (daher "binär") kann jede Information dargestellt werden; die kleinste Speichereinheit (die entweder den Wert 0 oder den Wert 1 annehmen kann) wird "Bit" genannt. Der Begriff wurde von dem amerikanischen Mathematiker Claude Shannon (geboren 1916, gestorben 2001) geprägt, er führte ihn erstmals 1940 in seiner Doktorarbeit "Symbolic Analysis of Relay and Switching Circuits" am Massachusetts Institute of Technology (MIT) ein. Ausgangspunkt war damals die Frage, wie man menschliche Vermittler in Telefonzentralen ersetzen könnte. In der Abhandlung beschreibt C. Shannon die Anwendung sogenannter Boolscher Logik in elektronischen Schaltkreisen (i.e. die Formulierung und Lösung von Problemen durch die beiden Symbole 0 und 1), womit er die Grundlagen der Informatik formulierte. Shannon wird uns in dieser Arbeit an späterer Stelle noch begegnen, nämlich immer wenn es um Datenspeicherung geht... Hintergrund-Information zu CCD-Sensoren und zur Signalübersetzung CCD-Sensoren sind Halbleiterelemente - angeordnet wie ein Schachbrettmuster -, die z.B. lichtempfindliche Siliziumzellen tragen. Aufgrund der physikalischen Eigenschaften haben sie die Möglichkeit, jede einzelne dieser Zellen auszulesen, was z.B. bei einem Silberkorn nicht möglich war. Erzeugung der Farben über die Belichtung lichtempfindlicher Zellen durch drei Farbfilter: Die Helligkeitswerte hinter den Filtern werden von den CCD-Sensoren erfasst, die in Form eines Schachbrettmusters z.B. lichtempfindliche Siliziumzellen tragen und den gemessenen Wert an den PC senden (Bild: www.digit.de). Nun gibt der CCD-Sensor die gemessenen Helligkeitswerte in Form von elektrischer Spannung an den PC weiter, der jedoch mit den Stromsignalen nichts anfangen kann. Daher muss eine übersetzungseinheit (ein sogenannter Analog/Digital-Wandler) zwischengeschaltet werden, der jedem Spannungswert eine Kombination aus 0 und 1 zuordnet. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 63/73 Aufbau eines CCD-Sensors: Die lichtempfindlichen Siliziumzellen, die die eingehende Lichtintensität messen, sind blau dargestellt; die Schicht, die die Ladungen transportiert, die später in einem Analog/Digital-Wandler in für den PC "verständliche" Binärcodes umgewandelt werden, ist grau eingefärbt (Bild: www.digit.de). Hintergrund-Information zur Entstehung von JPEG JPEG ist die Abkürzung für die Gruppe "Joint Photographic Expert Group", einer Zusammenarbeit vom CCITT (Consultative Comittee in International Telegraph and Telephone) und der ISO/IEC (International Standards Organisation/International Electronic Comisson), die 1988 einen Standard zur Bildkompression entwickeln wollte, da es damals kein digitales Bildformat mit guter Kompression gab und sich mit der verstärkten Nutzung des Internets der Bedarf an einem gut komprimierenden Bildformat abzeichnete. Das Ergebnis dieser Zusammenarbeit wurde 1992 veröffentlicht: Der erste Format-Entwurf hieß damals noch "ISO/IEC International Standard 10918-1"; der Gruppenname "JPEG" wurde jedoch bald zum Namen für diesen Standard selbst. Schnell erfreute sich das Bildformat auf der ganzen Welt großer Beliebtheit, da es neben der hohen Kompressionsrate, die erzielt werden kann, oder auch der Option, die Bilddaten auch ohne Verlust zu speichern, jedes beliebige Farbmodell unterstützt (z.B. RGB, YUV oder auch YCbCr). Beispielrechnung für das Subsampling Angenommen, für die Speicherung jedes Wertes wird ein Byte benötigt, dann werden für 4 Pixel mit jeweils 3 Werten bei voller Auflösung 12 Byte benötigt. Bei Anwendung eines Subsamplings kann der Speicherbedarf jedoch reduziert werden: · · für ein 4:2:2-Subsampling: 4 Byte + 2 Byte + 2 Byte = 8 Byte für ein 4:1:1-Subsampling: 4 Byte + 1 Byte + 1 Byte = 6 Byte Nur durch unterschiedliche Auflösung der einzelnen Layer kann also bereits eine Datenmengenreduzierung von bis zu 50% erreicht werden. Anmerkung der Verfasser zur Indexverschiebung Die Annahme, dass es für die Anwendung der DCT genügt, dass die Mitte aller Pixelwerte bei -0,5 liegt, gründet auf einer Einschätzung der Verfasser. Wir haben leider keine Literatur gefunden, die diese ungünstigen Folgen der Indexverschiebung (nämlich, dass die Mitte aller Pixelwerte nicht genau 0 ist) näher erläutert. In unseren Quellen hieß es stets lediglich, dass die „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 64/73 Pixelwerte in die Wertemenge [-128; 127] übertragen werden. Darauf, dass dadurch die Pixelwerte jedoch immer noch nicht symmetrisch um den Nullpunkt verteilt sind, wurde nicht eingegangen. Nach Meinung der Verfasser wäre es günstiger, für die Pixelwerte eine Wertemenge zu definieren, in der die Werte symmetrisch um den Wert 0 angeordnet sind. Zweckmäßig wäre hierfür die Wertemenge [-128; 128] ohne 0. Definierte man solch eine Wertemenge, könnten alle Pixelwerte als Werte einer Kosinusfunktion der Frequenz u mit der Amplitude Au(x) aufgefasst werden, die symmetrisch um den Wert 0 schwingt. Wie bei solchen Kosinusfunktionen haben dann auch die niedrigsten und höchsten Elemente unserer Wertemenge den gleichen Betrag. Wie man noch sehen wird, wird bei der DCT für keinen Pixelwert die Stelle auf der Kosinusfunktion angenommen, an dem der Kosinus 0 ist, weshalb auch kein Pixelwert 0 nötig ist. Hintergrund-Information zur "gleichmäßigen Verteilung" Die Differenzen vom Anfang des Intervalls zum kleinsten definierten x-Wert, 0, und vom Ende des Intervalls zum größten definierten x-Wert, 7, haben beide den Betrag 0,5. Außerdem sind die Differenzen zwischen den einzelnen definierten x-Werten gleich 1. Wenn man nun das Intervall halbiert, erhält man die zwei Teilintervalle I1 = [ -0,5; 3,5[ und I2 = [ 3,5; 7,5[. In beiden befinden sich 4 definierte x-Werte. In einem Teilintervall unterscheiden sich der kleinste und der größte definierte x-Wert vom Anfang bzw. Ende des Teilintervalls um den Betrag 0,5. Dies geschieht am Berührpunkt der Teilintervalle durch die Halbierung der definierten x-Wert Differenz 1. Bei einer weiteren Halbierung der Teilintervalle in 4 Intervalle der Länge 2 wird die gleichmäßige Verteilung in analoger Weise erhalten. Beweis: Alle 7 g(u)-Werte sind verschieden Wie man in der Tabelle sieht, gibt es nur 7 verschiedene Werte, die Wichtig ist nun, die Frage zu beantworten, ob für ein x und alle für annehmen kann. die bestimmte Werte der Funktion mehrmals vorkommen. Wir werden nun beweisen, dass dies nicht der Fall ist, indem wir davon ausgehen, dass Werte mehrmals vorkommen, um dann in der Rechnung einen Widerspruch zu erkennen. Diese vorgehensweise wird auch indirekter Beweis genannt. Behauptung: Es gibt mindestens zwei Werte von g(u) für Diese Behauptung ist wahr, wenn beliebigen ungeraden Vielfachen von , die gleich sind. zwei Winkel annehmen kann, die den gleichen betraglichen Abstand zu besitzen. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 65/73 Für h gilt dann: , ist. Der Term (2m + 1) ist dann eine ungerade Zahl. Damit die Abstände zweier Winkelwerte wobei und zu ungeraden Vielfachen von gleich groß sind, muss sein. Das heißt es muss gelten: , 6.20 wobei . Die Terme (2m + 1) sowie (2n + 1) ergeben dann ungerade Zahlen. Setzen wir nun Man kann ein: kürzen: „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 66/73 Man kann nun den Faktor 16 kürzen: 6.21 Zur weiteren Bearbeitung muss man eine Fallunterscheidung machen. Es gibt zwei zu unterscheidende Fälle: 1. 2. Die Werte in den Betragszeichen sind auf der linken und rechten Seite der Gleichung gleich. Die Werte in den Betragszeichen sind auf der linken und der rechten Seite der Gleichung betraglich gleich, aber mit anderem Vorzeichen. Man muss für die beiden Fälle anders vorgehen. Betrachten wir zunächst den ersten Fall. Da die Werte gleich sind, benötigt man keine Betragszeichen mehr: Die Terme (u1 - u2) und (m - n) sind ganze Zahlen. Deshalb bedeutet die Gleichung, dass die Werte 16 und (2x + 1) gemeinsame Vielfache besitzen. Durch Primzahlzerlegung kann man beweisen, dass diese Gleichung nicht stimmt und das es kein gemeinsames Vielfaches gibt. Primzahlzerlegung der rechten Seite der Gleichung liefert: Wenn die rechte und die linke Seite ein gemeinsames Vielfaches besitzen, muss die linke Seite der Gleichung nach einer Primzahlzerlegung also den Faktor 24 besitzen. (2x + 1) kann aber nur ungerade Werte annehmen, enthält also noch nicht einmal den Faktor 2. (u1 - u2) dagegen kann zwar gerade Werte annehmen jedoch nur bis höchstens 6, wie z.B. bei (7 - 1). In diesem Term ist also als zweierpotenz höchstens der Faktor 22 enthalten. Durch das Produkt (2x + 1)(u1 - u2) kann demnach kein Vielfaches von 16 gebildet werden. Für den 2.Fall verfahren wir ähnlich. Da hier die Betragszeichen in der Gleichung gebraucht werden, muss man bestimmten Rechenregeln, die für Beträge gelten, folgen. Nach diesen Regeln muss man in solchen Gleichungen einen Wert auf der einen Seite subtrahieren, wenn man ihn auf der anderen Seite addiert. Aus 6.21 wird dann: Wegen der Betragszeichen kann man auf der rechten Seite mit -1 multiplizieren. Klammert man dazu noch 16 aus, wird daraus: „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 67/73 Auch hier kann die Gleichung nicht stimmen, da von dem Term in den Betragszeichen auf der linken Seite kein Vielfaches gebildet werden kann, das den gleichen Betrag hat wie ein Vielfaches von 16. Denn (2x + 1) ist auch hier immer ungerade und (u1 + u2) kann an geraden Werten nur solche bis 12 annehmen. Die höchste zweierpotenz, die in (u1+u2) entahlten sein kann, ist 23. Damit ist es nicht möglich ein Vielfaches zu bilden, dass den gleichen Betrag wie ein Vielfaches von 16 hat. Es ist nun bewiesen, dass g(u) für ein festes x nie den gleichen Wert mehrmals annehmen kann. Tabelle zur Bitzahl Zur Bestimmung der zur Speicherung der Differenz zum DC-Wert des vorangehenden Blocks erforderlichen Bitzahl wird nun eine Tabelle herangezogen: Die auf den ersten Blick vielleicht unverständliche Zuordnung der Bits zu den jeweiligen Werten ist sehr einfach - das Prinzip lautet: Die Anzahl der Stellen der zu kodierenden Zahl in Binärschreibweise (Zweiersystem) ist die Anzahl der Bits. Bei negativen Zahlen wird dieses System genauso angewandt. Beispiel: · · Die Zahl "1" im Zehnersystem ist auch die Zahl "1" im Zweiersystem, hat dort also eine Stelle und ist damit mit einem Bit speicherbar. Die Zahl "130" im Zehnersystem ist die Zahl "10000010" im Zweiersystem, hat dort acht Stellen, wird demnach mit acht Bits gespeichert. Beweis: Jeder Huffman-Code ist optimal Da unsere eigenen Beweisansätze leider gescheitert sind, wir aber trotzdem einen Hintergrund zu der Aussage liefern wollen, dass der Huffman-Code eine optimale Darstellung ist, haben wir folgenden Beweis dem Vorlesungsskript Stochastik von Prof. E. Bolthausen (Zürich) entnommen. Er verläuft mit Induktion nach n, der Länge des Wahrscheinlichkeitsvektors. Der Fall n=2 ist trivial. Induktionsschluss von n - 1auf n: Wir nehmen an, dass der Satz für Vektoren der Länge Sei (p1,....,pn) ein beliebiger Wahrscheinlichkeitsvektor der Länge n mit „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß für alle gezeigt ist. . 68/73 Wir können annehmen, dass erreichen. gilt, denn dies lässt sich durch Vertauschen stets ein Huffman Code für diesen Vektor. Sei Sei ein beliebiger anderer Code mit den Codewörtern . Wir zeigen nun (1) . nach aufsteigender Länge. Den geordneten Code nennen wir Zunächst ordnen wir die Codewörter von ; für die Codewörter gilt . Die Menge der Codewörter ist dieselbe geblieben. Es ist ziemlich offensichtlich, dass Wort , indem wie von die letzten ist. Falls ist, so stutzen wir das Binärzeichen weglassen. Dieses Wort sei . Wegen . Das neue Wort kann aber auch nicht der Präfixeigenschaft unterscheidet sich dieses Wort von Präfix eines der anderen Wörter sein, denn seine Länge ist zumindest die der anderen. Also ist ein Code. , so setzen wir Gilt haben die Länge oder . In jedem Fall gilt . Sei . Mindestens zwei Wörter von das aus den ersten m-1 Zeichen von bestehende Wort. Dann gilt . Wir nehmen das letztere an, der andere Fall geht genau gleich. Wir betrachten nun zwei Fälle: 1. Eines der anderen Wörter von ist, so vertauschen wir 2. der Länge m ist das nicht bereits das zweitletzte Wort mit dem zweitletzten Wort. Diesen (eventuell neuen) Code nennen wir Keines der anderen Wörter der Länge m ist neuen Code . Falls . Dann ersetzen wir durch . Die Präfixeigenschaft wird dadurch nicht zerstört, denn und . Dann ist ein Code für einzusehen, müssen wir nur die Präfixeigenschaft nachprüfen. Das Wort war ja schon Codewort. mit . Um dies kann aber kein Präfix von sein, denn die Längen dieser Codewörter sind kleiner oder gleich verschieden von und nennen den , denn die Längen sind gleichgeblieben. Wir schreiben Es gilt offenbar . , und waren . größer oder gleich der Nach Induktionsvoraussetzung ist die mittlere Länge des Codes mittleren Länge das zugehörigen Huffman-Codes, also , „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 69/73 wobei ein Huffman-Code für (p1,...,pn-2,pn-1+pn) ist. Nach der rekursiven Konstruktion des Huffman- Codes aus ist . Somit gilt . Damit ist (1) gezeigt. Beispielcodierung für unseren Vektor Wir wollen nun einmal exemplarisch für unseren Beispielvektor eine Codierung vornehmen, wobei wir jedoch keine eigene stochastische Auswertung durchführen, sondern uns auf empirische Tabellen verlassen, die bereits Codes enthalten, die in der Regel recht günstig sind. Tabelle 1: Huffman-Codierung für Symbol 1 der AC-Werte. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 70/73 Tabelle 2: Codierung für Symbol 2 der AC-Werte Aus diesen beiden Tabellen können wir nun ablesen, welche Codes den AC-Werten entsprechen, die in unserem Vektor stehen. Tabelle 3: Codierungsmuster für die AC-Werte des 8*8 Blocks. Durch Aneinanderreihen der einzelnen Codes erhalten wir dann einen einzigartigen Binärcode für den Vektor, sprich: für den ursprünglichen 8*8 Block: · · für den DC-Wert: 00011111 für die AC-Werte: 111100100010110011101101110001 100110011110001010000001001100 111101001101100100011000100100 01111111111111010000000010001010 „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 71/73 Die Autoren Sebastian Wickenburg, Aeneas Rooch und Johannes Groß sind zur Zeit (im September 2002) zusammen 58 Jahre alt, also nicht mehr die Jüngsten. Insgesamt haben sie zusammen 27 Jahre lang das Gymnasium am Ostring in Bochum besucht, der Stadt, in der jeder von ihnen mit einer Wahrscheinlichkeit von p=0,67 wohnt. Am Gymnasium am Ostring, der alten Schule von Herbert Grönemeyer, haben sie in diesem Jahr mit Erfolg das Abitur errungen - zur Verblüffung aller, die die Abiturklausur im Mathe-LK mitgeschrieben haben, die man durchaus als "interessant" bezeichnen konnte. Doch trotzdem haben sie der Mathematik nicht abgeschworen, sondern sich aufgemacht, die Hintergründe der JPEG-Kompression zu ergründen. Viel Wert wurde bei dieser Arbeit auf die Präsentation gelegt, um allen Lesern mit ihren unterschiedlichen Vorkenntnissen die einzelnen Schritte plausibel und das Thema insgesamt anschaulich darzustellen, denn gerade die Mathematik leidet oft unter schlechter Didaktik. Dass auch mal ein bisschen Biologie, Psychologie und Physik mit im Spiel ist, lässt sich hier und da nicht vermeiden, wenn man der Mathematik im Alltag nachgeht... Die Autoren danken: · · · · Prof. Dr. Peter Eichelsbacher von der Ruhr-Universität Bochum für das große Engagement bei der Beratung und der Beantwortung der Fragen Roland Franken von "digit! Online" für die schnelle Hilfe beim Verstehen der gemeinen Digitalkamera Fabian Jakobs für das freundliche Zur-Verfügung-Stellen seines Huffman-Java-Applets Prof. Dr. Ehrhard Behrends von der FU Berlin dafür, dass die drei alten Kaliber überhaupt teilnehmen durften Bei Fragen, Kritik und Anregungen können Sie uns mailen, wir würden uns über Rückmeldung freuen: · · · [email protected] [email protected] [email protected] „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 72/73 Quellenverzeichnis Bei der Erstellung dieser Arbeit haben wir folgende Quellen benutzt: · · Bildverarbeitung interaktiv; Herbert Kopp; B.G. Teubner Stuttgart, 1997 Vorlesungsskript Stochastik von Prof. E. Bolthausen, Zürich · · · · · · · · · · · · · · · · · http://homepages.uni-tuebingen.de/student/horst.rechner/Ausarbeitung.html http://www.improve-mtc.de/Veroffentlichungen/Multimedia2/multimedia2.html http://goethe.ira.uka.de/seminare/rftk/ http://goethe.ira.uka.de/seminare/redundanz/vortrag11/ http://i31www.ira.uka.de/docs/semin94/02_JPEG/ http://www-lehre.informatik.uni-osnabrueck.de/~mm/ http://www.fuji.de http://www.ti5.tu-harburg.de/Staff/Lamers/stab/ http://www.dbg.rt.bw.schule.de/lehrer/ritters/info/kompr/huffman.htm http://www.ztt.fh-worms.de/de/sem/ws95_96/kompressionsalgorithmen/node9.html http://www.informatik.uni-leipzig.de/ifi/lehre/ Heyer2000/ADKapitel10/tsld026.htm http://www.digit.de/ http://www.ronnz.de/bildkompression/kompression.html http://www.uni-giessen.de/faq/archiv/jpeg-faq.part1-2/msg00001.html http://isl.ira.uka.de/info2/schulungsmaterial/animationen/huffman/applet.html http://www.geocities.com/ally77jp/scanner.html http://www.realschule-taufkirchen-vils.de/schueler/klassen/10a/Schueler/Treffler/funktionsweise.htm Wie wir in der Schule gelernt haben, sind Internetquellen mit höchster Vorsicht zu genießen. Das haben wir getan. „Die JPEG-Kompression“ von Sebastian Wickenburg, Aeneas Rooch und Johannes Groß 73/73