Bildformate
Kapitel 2 - Grundlagen

Bildformate

Grundsätzlich werden bei digital gespeicherten Bildern zwei Kodierungsarten verwendet: Pixel- und Vektorformate.

Pixelformate teilen ein Bild in Zeilen und Spalten auf und speichern den Farbwert jedes Bildpunktes. Vektorformate speichern die Parameter der im Bild enthaltenen graphischen Elemente, z.B. die Position und den Umfang eines Kreises, sowie die Breite der Linien und deren Farbe. Im Folgenden sollen ausschließlich Pixelformate betrachtet werden, da sie im Bereich der graphischen Darstellung am weitesten verbreitet sind. Sie sind plattformunabhängig definiert und werden deshalb von verschiedenen Programmen auf jeder Plattform unterstützt. Weiterhin sind die ihnen zugrundeliegenden Algorithmen bekannt (im Gegensatz von zumeist von einzelnen Herstellern verwendeten Vektorformaten) und frei verfügbar.

Bei der Erklärung dieser Bildformate werden grundlegende Komprimierungsvorgänge erläutert, die insbesondere auch bei der Videokomprimierung Verwendung finden. Die meisten Algorithmen zur Farbquantisierung arbeiten im RGB-Farbmodell. Es wird zumeist eingesetzt, um 24-bit Farbwerte (dies entspricht 16777216 verschiedenen Farben) zu beschreiben, sowie auf eine Palette mit 256 Farben abzubilden. Den RGB-Farbraum, der von einem kartesischen Koordinatensystem aufgespannt wird, kann man sich als Würfel vorstellen, der die Menge der auf dem Monitor darstellbaren Farben umspannt. Eine beliebige Farbe wird mit einem dreidimensionalen Vektor beschrieben, dessen Länge Auskunft über die Helligkeit (Luminanz) der Farbe gibt.

Der erste Schritt in der Farbkompression bzw. Farbreduktion ist oft eine uniforme Prequantisierung der Farbdaten von 24 bit auf 15 bit. Mit diesem Schritt wird die Datenflut eingedämmt, aber der Farbinformationsgehalt des Bildes, bezüglich unseres Farbsensorsystems Auge-Gehirn nicht merklich eingeschränkt, da nach Expertenmeinung der Mensch nur 50.000 bis 300.000 Farben unterscheiden kann. Nach der Prequantisierung wird die Häufigkeit, mit der die Farben im Bild vertreten sind, in Form eines dreidimensionalen Histogramms ermittelt. Bei Verwendung des Popularitätsalgorithmus wird nun aus den häufigsten Farben in der Verteilung die Farbpalette gebildet. Das Ergebnis ist aber in vielen Fällen nicht befriedigend, da mit dieser Methode, die ausgewählte Farbe in keinem Verhältnis zu der Anzahl der Bildpunkte steht, die mit dieser Farbe gesetzt werden. Eine Verbesserung der Histogramm-Auswertung wird mit der Verwendung des Median-Cut Algorithmus (auch abnehmende Quantisierung genannt erreicht.

Hierzu werden zuerst die Grenzen des RGB-Würfels so zusammengezogen, daß alle Bildpunkte und Farben des Bildes darin enthalten bleiben. Damit entsteht ein Quader oder ein Würfel als Spezialfall. Dieser Quader wird nun längs der längsten Kante geteilt, so daß in den entstehenden Subquadern etwa die gleiche Menge von Pixeln enthalten ist (Medianschnitte). Die Kontrahierung und weitere Teilung der enstandenen Quader wird nun solange fortgesetzt, bis die vorgegebene Menge von Subquaderen entstanden ist, oder die Subquader nicht mehr teilbar sind. Im Idealfall enthält ein Subquader nur noch einen Farbwert, der dann direkt einen Palettenwert darstellt. Da im Regelfall aber noch mehrere Farbwerte in einem Subquader enthalten sind, wird für jeden dieser Subquader ein Mittelwert errechnet.

Da sich gezeigt hat, daß das menschliche Auge Farbwerte in einer geringeren Auflösung als Helligkeitswerte wahrnimmt, wird der gängige RBG-Farbraum (Rot-Grün-Blau) bei den digitalen Bildstandards zumeist in drei planes umgewandelt, eine Luminanz-plane (Grauwerte, Y) und zwei Chrominanz-planes (Farbwerte U/V oder auch Cr/Cb).


Abb. 6:4:1:1 YUV-Farbraum

Die Farbwertplanes können dann wie z.B. bei JPEG (siehe Seite 20) und MPEG (siehe Seite 24) von ihrer Kantenlänge halbiert werden (das ist dann ein Viertel der Fläche !). Dies reduziert die Datenmenge enorm, ist jedoch ein Datenverlust. Diese Art der Kodierung nennt man den 4:1:1 YUV-Farbraum. Sie wird schematisch in der Abbildung 6 gezeigt.

BMP

BMP ist das unter dem Betriebsystem Windows 3.0 entstandene und durch die weiteren Versionen dieser Betriebssystemfamilie häufig verwendete Bildformat.

Das Format ist unabhängig vom verwendeten Ausgabegerät definiert (device-independent), es kann sowohl auf verschiedenen Bildschirmen oder Druckern ausgegeben werden und wird mittlerweile auch von Programmen anderer Betriebsysteme unterstützt. Das RGB-Farbmodell wird zugrunde gelegt. Durch geeigneten Aufbau von Farbtabellen ist jedoch auch die Kodierung von monochromen und von Graustufenbildern möglich.

Das Format definiert einen header- und einen Datenbereich. Ersterer wird BITMAPINFO genannt und enthält Angaben wie Größe, Farbtiefe, Farbtabelle und Kompressionsart. Der Datenbereich enthält nachfolgendend die Farbwerte jedes Punktes einer Linie, Linien werden bündig auf einen durch 32 teilbaren Wert verlängert und mit Null-Werten aufgefüllt.

Als Werte für die Farbtiefe sind 1, 4, 8 und 24 zugelassen. Der Run-Length-Encoding Algorithmus wird für Bilder mit einer Farbtiefe von 4 oder 8 bit/Bildpunkt angeboten, wobei jeweils zwei Bytes als Informationseinheit aufgefaßt werden. Enthält der erste Bytewert eine Null und ist der zweite Wert größer als drei, enthält der zweite die Anzahl der folgenden Bytes, die die Farbe des nächsten Bildpunktes als Verweis in die Farbtabelle enthalten (keine Kompression). Ansonsten bedeutet der erste Bytewert die Anzahl der nächsten Bildpunkte die mit der Farbe des zweite Bytewertes als Verweis in die Farbtabelle gesetzt werden sollen. Ist das Bild mit 4 bit/Bildpunkt kodiert werden auch nur vier Bit für diese Informationen benutzt, zwei Werte werden also in einem Bytewert kodiert.

BMP definiert weiterhin im header die Möglichkeit eine Farbtabelle anzugeben, deren Farben unbedingt zur Anzeige des Bildes benutzt werden müssen.

GIF

Das Graphics Interchange Format (GIF) wurde vom Online-Dienst CompuServe 1987 entwickelt, um den Austausch von Bildern über eben diesen Online-Dienst, unabhängig von der vorhandenen Hardware zu ermöglichen. GIF zeichnet sich durch seine verlustfreie aber doch recht effiziente Kompression und durch die mögliche Schachtelung von mehreren Bildern innerhalb einer Datei aus. Die Spezifikation liegt mittlerweile in zwei unkompatiblen Versionen (GIF87a und GIF89a) vor.

Grundsätzlich kann ein GIF-Bild aus den folgenden Abschnitten bestehen, wobei die letzten vier beliebig und wiederholt angeordnet werden können:

  • header: Enthält die GIF-Erkennungssequenz und die Versionsnummer des verwendeten Algorithmus. Sein Ende kennzeichnet den Anfang des Datenbereichs.
  • application: Ermöglicht die Kodierung von Versions- und Namensinformation des Programmes, welches das GIF-Bild erzeugt oder bearbeitet hat.
  • trailer: Markiert das Ende des GIF-Datenstroms.

  • control: Dieser Abschnitt steuert die Darstellung jeweils eines folgenden image Blocks. Die Angabe von zeitlichen Verzögerungen, sowie der Farbe, die den Hintergrund durchsichtig erscheinen läßt, können angegeben werden.
  • image: Ein image Block besteht jeweils aus einem image header, einer optionalen Farbtabelle und den Daten der Bildpunkte.
  • comment: Textuelle Kommentare zu einem image Block.
  • plain text: Dieser Block ermöglich die ASCII-basierte Kodierung von Texten innerhalb eines Bildes. Sowohl der Schriftsatz, die Farbe, die Größe, Position und die Streckung und Ausrichtung als auch der eigentliche Text können spezifiziert werden.

    Ein GIF-Bild (image block) wird grundsätzlich als bit-Strom kodiert. Ein einzelnes Bild besteht wiederum aus dem Logical Screen Descriptor zur Kodierung von Größe, Position und Art der Farbtabelle des Bildes, optionalen globalen oder lokalen Farbtabellen (globale gelten für alle kommenden Bilder) und den Bildpunktfarben, die als Verweise in die Farbtabelle kodiert werden. Die Bildpunktfarben werden durch den LZW Algorithmus mit variabler Längenkodierung komprimiert. Durch diesen Algorithmus ist es möglich, sich wiederholende Bitmuster variabler Länge im Datenbereich zu lokalisieren. Während der Analyse wird ein codetable aufgebaut, der die auftretenden Bitmuster durch kurze Bitfolgen ersetzt. Die häufigsten Bitmuster werden dabei durch die kürzesten Bitfolgen repräsentiert (zur weiteren Erläuterung des LZW-Algorithmus siehe [23]).

    Insbesondere durch den plain text und den control Block sowie durch die Schachtelung mehrerer Bilder eignet sich das GIF-Format besonders, um Bildabläufe und Animationen in kleinerem Rahmen zu kodieren. GIF ist nur für Bildformate mit einer 8-bit Farbtabelle definiert.

    JPEG

    Der internationale Standard der Joint Picture Experts Group (JPEG) (ISO/IEC SC29/WG10 ISO 10918) [15] ist ein Standard zur Kodierung von photographischen Standbildern. Der Basis- algorithmus beschreibt eine Transformationskodierung basierend auf der Diskreten-Cosinus- Transformation (DCT) im YUV-Farbraum.

    Aus den zur Verfügung stehenden Transformationen hat sich die DCT (Discrete Cosine Transform, abgeleitet aus der Diskreten-Fourier-Tranformation) als besonders effizient erwiesen. Eine auf einen 8*8 Pixelblock angewendete DCT ergibt wiederum einen 8*8 Pixelblock. Die Koeffizienten der DCT lassen sich als Spektrum des 8*8 Eingabeblock interpretieren.

    "Während die Energie des Bildsignals zufällig verteilt sein kann, konzentriert sich die Energie des korrespondierenden DCT-Blocks vorzugsweise auf Koeffizienten mit niedrigen Frequenzen" [31]. Werden die Koeffizienten im Zick-Zack durchnummeriert, ergeben sich als zu speichernde Werte ein DC-Koeffizient, dann wenige niedrige AC-Koeffizienten und viele AC-Koeffizienten nahe Null. Die DCT ist ein verlustfreies Verfahren, da die Kodierung komplett umkehrbar ist. Nun eignen sich diese Werte jedoch optimal um sie mit dem Huffman-Verfahren (eine Art Top-Down Shannon-Fano- Kodierung; häufige Bytewerte werden durch kurze Bitfolgen ersetzt) und anschließend nach dem Lauflängen-Verfahren zu kodieren (sollten sieben Nullen im Strom nacheinander folgen, braucht man nur die 7 und die 0 zu kodieren).

    Ein JPEG-Bild setzt sich dann aus verschiedenen Bildkomponenten wie dem picture-header, Quantisierung- und Huffman-Tabellen, frame-header, scan-header (zur Aufteilung des Bildes in verschiedene Bereiche) und den Bilddaten zusammen. Die Kompressionrate des zu speichernden Bildes ist frei einstellbar. Innerhalb des JPEG-Verfahrens sind vier verschiedene Kompressionmodi möglich:

    1. Basis-Verfahren (basiert wie hier beschrieben auf der Anwendung der DCT)
    2. Erweitertes DCT-Verfahren (mit höherer, wahlweiser progressiver bit-Genauigkeit)
    3. Verlustfreies Verfahren (nicht auf DCT-basierend)
    4. Hierachie-Verfahren (Kombination von mehreren Bildern)

    Die YUV-Farbwerte werden in einer, dem MPEG-Verfahren vergleichbaren Weise kodiert (Blockbildung, DCT, Entropy- und Huffman-Kodierung; siehe Seite 24). Das Verfahren ermöglicht ein effiziente Komprimierung von Bildern mit "natürlichem" Inhalt, es ist nicht besonders zur Speicherung von computergenerierten Bildern oder Grafiken geeignet, da die Farben von Objekten mit scharfen Objektkanten nur ungenügend genau kodiert werden.

    Werden JPEG-Bilder aneinandergereiht, spricht man von Motion-JPEG (M-JPEG). Dieses Verfahren ist nicht international standardisiert, wird aber häufig bei der Videodigitalisierung benutzt, um die entstehenden Datenmengen im vorherein zu reduzieren. Da M-JPEG keine temporären Redundanzen ausnutzt, reicht die Komprimierung nicht aus, um sie zur Übertragung in lokalen Netzen zu nutzen.

    PBM

    PBMplus ist ein Softwarepaket, welches die Konvertierung von Bildern verschiedener Bildformate sowie die scriptbasierte Änderung digitalisierter Bilder ermöglicht. PBMplus wurde 1991 vom Autor Jef Poskanzer im Internet vorgestellt und hat dank seiner vielfältigen Einsetzbarkeit weite Verbreitung gefunden und ist zumindest auf Unix-basierten Workstations zum de-facto-Standard geworden.

    Intern werden vier verschiedene Bildformate (PBM für farbige Bilder, PGM für Grauwertbilder, PPM für Echtfarbbilder und PNM zur formatunabhängigen Manipulation) angeboten. Diese können jeweils textuell (zur Einbindung in C-Programme, vergleiche XBM/XPM auf Seite 22) als auch binär kodiert werden. Da im Softwarepaket sowohl Konvertierungsprogramme für die internen Grafikformate, als auch für jedes sonstige Format mindestens ein Konvertierungsprogramm zu einem der internen Formate vorliegt, läßt sich somit jedes Format in jedes beliebige andere Format konvertieren und während der Konvertierung manipulieren.

    Zum Manipulieren der internen Bildformate werden Filterprogramme für die folgenden Funktionen angeboten:

  • Farbreduzierung, Quantisierung und Analyse der Farbwerte
  • Veränderung von Kontrast, Helligkeit und Farbsättigung
  • Beschneidung, Mischung von mehreren Bildern, Spiegelung des Bildes und Veränderung der Größe
  • Erzeugung von Texturen und fraktalen Hintergründen
  • Relief-, Schlier-, Ecken- und Mosaic-Filter

    TIFF

    Das Tag Image File Format (TIFF) wurde 1987 von der Aldus Corporation und Microsoft entwickelt, um die Portabilität und Hardwareunabhängigkeit eines Bildes bei der Kodierung zu berücksichtigen.

    TIFF beschleunigt und vereinfacht die Verwendung und Ansteuerung von z.B. Scannern (Bildeinzugs- oder Bilddigitalisierungsgeräten) oder Faxgeräten, da lästige Umkodierung zwischen Geräten, Treibern und Bildapplikationen entfallen. TIFF ist weder eine Seitenbeschreibungs- noch eine Druckersprache, obwohl es oft auch dafür genutzt wird. TIFF ist nicht international standardisiert und liegt auch in mehreren, verschiedenen Varianten und Komplexitätsgraden vor.

    Ein TIFF-Bild besteht aus den folgenden Abschnitten, die durch Markierungen (tags) voneinander getrennt werden:

  • header, directory: Enthält Angaben zur Byteorder, Versionsnummer, Verweise auf directories (welche jeweils Unterabschnitte bzw. einzelne Bilder enthalten).
  • structure: Enthält Angaben über die verwendete Kodierungstechnik und die Anzahl der folgenden tag-fields.
  • fields: Definieren die im folgenden Bild benutzten einzelnen Kodierungblöcke, wie Zeilen, Objekte, Zellen oder Blöcke und deren Eigenschaften wie die der verwendeten Kompression, Ausrichtung und Auflösung. Weiterhin können Elemente definiert werden, die das verwendete Seitenformat beschreiben.
  • data fields: Die einzelnen graphischen Elemente des aktuellen Bildes werden dann in vorher nicht zu bestimmender Reihenfolge als fields deklariert.

    Der entscheidene Unterschied zu den anderen Bildformaten besteht in dem generischen Ansatz. Generell kann man innerhalb des TIFF-Formates graphischen Inhalte auf verschiedene Arten kodieren, z.B. wird oft ein preview-Bild in einem zeilenorientiertem und unkomprimiertem Format zusätzlich zum folgenden, wesentlich komplexeren Bild kodiert, um ein schnelles Suchen innerhalb von Bildarchiven zu ermöglichen. Ein Ausage zur erreichten Kompression kann nicht getroffen werden, diese hängt zu sehr von der bildinternen Repräsentation ab.

    XBM und XPM

    X11-Bitmap (XBM) und X11-Pixmap (XPM) sind in der Unixwelt häufig verwendete Grafik- Formate, um Programmsymbole (icons) oder Hintergründe zu speichern. Sie ermöglichen die Definition von monochromen (XBM) oder farbigen (XPM) Bildern innerhalb von Programmcode der Programmiersprache C.

    Im monochromen XBM-Format werden die Bildpunkte in einer Liste von Byte-Werten (byte-array) der Programmiersprache C kodiert, wobei jeweils 8 Bildpunkte zu einem Byte-Wert zusammengefaßt werden. Die Dimension des Bildes erfolgt durch zwei zusätzliche C-Definitionen. Die Abbildung 7 zeigt ein Beipiel.

    Abb. 7:Beispiel einer Grafik im XBM-Format

    Im XPM-Format werden die Bilddaten zusammen mit dem header in einer Liste von Zeichenketten (string-array) der Programmiersprache C kodiert. In der ersten Zeile wird die Dimension des Bildes und der sogenannte hot-spot6 definiert. Die folgenden Zeilen beschreiben die verwendeten Farben, wobei jeweils eine textuell bzw. durch einen RGB-Farbwert angegebene Farbe durch ein Zeichen aus dem ASCII-Zeichenvorrat substituiert wird. Die Angabe einer Farbe, die den Hintergund durchscheinen läßt, wird durch das Symbolfolge "s None" ermöglicht. Die nachfolgende Zeilen listen die Zeilen des Bildes mit ihren substituierten Farbwerten auf. Die Abbildung 8 zeigt ein Beispiel.

    Abb. 8:Beispiel einer Grafik im XPM-Format

    Weder XPM nocht XPM kodierte Bilder werden komprimiert noch effizient gespeichert, die Repräsentation durch 8-bit ASCII-Werte erzeugt den gleichen Datenumfang, wie z.B. eine unkomprimiert gespeichert BMP-Datei. Auch hier können nur bis 256 verschiedene Farb- oder Grauwertstufen kodiert werden.


    6) Ein hot-spot wird bei der Verwendung der Bildes als Cursor-Symbol benutzt, um den exakten Bildpunkt zu definieren, der die Selektion auslößt. Im XBM-Format wird der hot-spot durch zwei weitere C-Definitionen angegeben.