-
Technisches
Gebiet
-
Die vorliegende Erfindung bezieht
sich auf ein Verfahren und eine Vorrichtung zum arithmetischen Codieren
eines Bildes ohne den Bedarf, eine ganze Zeile von Bilddaten zu
puffern.
-
Hintergrund
der Erfindung
-
Im Stand der Technik sind Datenkomprimierungssysteme
bekannt, die einen Strom von Digitaldatensignalen in komprimierte
Digitalcodesignale codieren und die komprimierten Digitalcodesignale
zurück
in die Originaldaten decodieren. Datenkomprimierung bezieht sich
auf jeden Prozeß,
der versucht, Daten in einem gegebenen Format in ein alternatives Format
umzuwandeln, das weniger Raum erfordert als das Original. Die Zielsetzung
von Datenkomprimierungssystemen ist es, Einsparungen in der Speichermenge,
die erforderlich ist, um einen gegebenen Körper von digitalen Informationen
zu halten, oder in der Menge von Zeit zu bewirken, die erforderlich
ist, um denselben zu übertragen.
-
Um von praktischem Nutzen zu sein,
sollte ein Allzweck-Digitaldatenkomprimierungssystem
bestimmte Kriterien erfüllen.
Das System sollte Reziprozität
aufweisen. Damit ein Datenkomprimierungssystem die Eigenschaft der
Reziprozität
besitzt, muß es möglich sein,
die komprimierten Daten ohne jegliche Änderung oder jeglichen Informationsverlust
zurück in
die Originalform derselben wieder zu vergrößern oder zu decodieren. Die
decodierten und die Originaldaten müssen mit Bezug aufeinander
identisch und ununterscheidbar sein. Die Eigenschaft der Reziprozität ist gleichbedeutend
mit der strenger Geräuschlosigkeit,
die in der Informationstheorie verwendet wird. Einige Anwendungen
erfordern kein strenges Festhalten an der Eigenschaft der Reziprozität. Eine derartige
Anwendung ist insbesondere, wenn mit graphischen Daten umgegangen
wird. Weil das menschliche Auge nicht so geräuschempfindlich ist, ist eine
gewisse Änderung
oder ein Informationsverlust während
dem Komprimierungs/Dekomprimierungsprozeß annehmbar.
-
Das System sollte mit Bezug auf die
Datenraten, die durch die Vorrichtungen, mit denen die Datenkomprimierungs-
und Dekomprimierungssysteme kommunizieren, bereitgestellt und angenommen werden,
eine ausreichende Leistung liefern. Die Rate, mit der Daten komprimiert
werden können,
ist durch die Eingangsdatenverarbeitungsrate in das Komprimierungssystem
bestimmt, typischerweise in Millionen Bytes pro Sekunde (Megabyte/s).
Eine ausreichende Leistung ist notwendig, um die Datenraten aufrechtzuerhalten,
die in heutigen Disketten-, Band- und Kommunikationssystemen erreicht
werden, deren Raten typischerweise ein Megabyte/s überschreiten.
Somit muß das
Datenkomprimierungs- und Dekomprimierungssystem genügend Datenbandbreite aufweisen,
um das Gesamtsystem nicht nachteilig zu beeinflussen. Die Leistung
von Datenkomprimierungs- und Dekomprimierungssystemen ist typischerweise
durch die Berechnungen, die notwendig sind, um zu komprimieren und
zu dekomprimieren, und die Geschwindigkeit der Systemkomponenten, wie
beispielsweise Direktzugriffsspeicher (RAM) und ähnliches, begrenzt, die verwendet
werden, um statistische Daten zu speichern und den Komprimierungs-
und Dekomprimierungsprozeß zu
führen.
Eine Leistung für
eine Komprimierungsvorrichtung ist gekennzeichnet durch die Anzahl
von Prozessorzyklen, die pro Eingangsschriftzeichen unter dem Komprimierer
erforderlich sind. Je geringer die Anzahl von Zyklen, desto höher die
Leistung.
-
Ein anderes wichtiges Kriterium bei
dem Entwurf von Datenkomprimierungs- und Dekomprimierungssystemen
ist Komprimierungseffektivität,
die durch das Komprimierungsverhältnis
gekennzeichnet ist. Das Komprimierungsverhältnis ist das Verhältnis von
Datengröße in unkomprimierter
Form geteilt durch die Größe in komprimierter
Form. Damit Daten komprimierbar sind, müssen die Daten Redundanz enthalten.
Komprimierungseffektivität
ist dadurch bestimmt, wie effektiv die Komprimierungsprozedur die
Redundanz in den Eingangsdaten nutzt. Bei typischen computergespeicherten
Daten tritt Redundanz sowohl in der uneinheitlichen Verwendung individueller
Symbologie, Beispielstellen, Bytes oder Schriftzeichen als auch
in dem häufigen
Wiederauftreten von Symbolsequenzen, wie beispielsweise häufigen Wörtern, Leeraufzeichnungsfeldern
und ähnlichem
auf.
-
Allzweck-Datenkomprimierungsprozeduren sind
ebenso im Stand der Technik bekannt, wobei drei relevante Prozeduren
das Huffman-Verfahren, das Tunstall-Verfahren und das Lempel-Ziv-Verfahren sind.
Das Huffman-Verfahren ist weithin bekannt und verwendet, Bezug auf
dasselbe ist in einem Artikel von D. A. Huffman mit dem Titel "A Method For Construction
Of Minimum Redundancy Codes",
Proceedings IRE, 40, 10, Seiten 1.098–1.100 (Sept. 1952). Bezug
auf den Tunstall-Algorithmus ist in der Doktorarbeit von B. P. Tunstall
zu finden, mit dem Titel "Synthesis
of Noiseless Compression Codes",
Georgia Institute of Technology (Sept. 1967). Bezug auf die Lempel-Ziv-Prozedur
kann in einer von J. Ziv und A. Lempel verfaßten Abhandlung erhalten werden, mit
dem Titel "A Universal
Algorithm For Sequential Data Compression", IEEE Transactions on Information Theory,
IT-23, 3, Seiten
337–343
(Mai 1977).
-
Eine der ersten Allzweck-Datenkomprimierungsprozeduren,
die entwickelt wurden, ist das Huffman-Verfahren. Kurz beschrieben,
bildet die Huffman-Prozedur Symbolsegmente einer vollen Länge in Wörter einer
variablen Länge
ab. Die Huffman-Datenkomprimierungsprozedur leidet unter zwei Einschränkungen.
Erstens funktioniert die Huffman-Prozedur unter der Beschränkung, daß die Eingangsdaten,
die komprimiert werden sollen, in Symbolsegmente einer festen Länge zerlegt
werden. Obwohl die Huffman-Prozedur das beste Komprimierungsverhältnis liefert,
das unter diesen Beschränkungen
erhalten werden kann, ist es möglich,
durch Verwenden anderer Prozeduren erheblich bessere Komprimierungsverhältnisse
zu erhalten, wenn die Beschränkung
gelockert wird. Zweitens erfordert die Huffman-Codierung umfassende
Kenntnis der statistischen Charakteristik der Quellendaten. Die
Huffman-Prozedur funktioniert unter der Annahme, daß die Wahrscheinlichkeit,
mit der jedes Eingangssegment fester Länge auftritt, bekannt ist.
Diese Anforderung der Huffman-Prozedur kann in der Praxis durch die
Verwendung einer adaptiven Version der Prozedur erfüllt werden,
die die notwendige Statistik während
eines Verarbeitens der Daten sammelt. Dies ist jedoch hinderlich,
benötigt
beträchtlichen
Arbeitsspeicherplatz und verhält
sich während
der Adaption suboptimal.
-
Der Tunstall-Algorithmus, der Segmente
variabler Länge
von Symbolen in binäre
Wörter
fester Länge
abbildet, ist komplementär
zu der Huffman-Prozedur, wobei die Beschränkungen fester Länge nun
auf die Ausgangssegmente anstatt auf die Eingangssegmente angewandt
werden. Ebenso wie die Huffman-Prozedur
erfordert die Tunstall-Prozedur eine vorherige Kenntnis der Quellendatenwahrscheinlichkeiten.
Wiederum kann diese Anforderung vorheriger Kenntnis bis zu einem
gewissen Grad durch ein Verwenden einer adaptiven Version erfüllt werden,
die die Statistik während
einem Verarbeiten der Daten sammelt.
-
Die Lempel-Ziv-Prozedur bildet Segmente variabler
Länge der
Symbole in binäre
Wörter
variabler Länge
ab. Dieselbe ist asymptotisch optimal, wenn es keine Beschränkungen
für die
Eingangs- oder Ausgangssegmente gibt. Bei dieser Prozedur wird die
Eingangsdatenzeichenfolge in adaptiv gewachsene Segmente zerlegt,
wobei jedes Segment eine exakte Kopie eines früheren Abschnitts der Eingangszeichenfolge
umfaßt,
an den ein neues Symbol aus den Eingangsdaten angehängt ist.
Die Kopie, die hergestellt werden soll, ist die längstmögliche und steht
nicht unter der Beschränkung,
mit einem früher zerlegten
Segment zusammenfallen zu müssen.
Das Codewort, das das Segment in dem Ausgang ersetzt, enthält Informationen,
die einen Zeiger auf die Stelle, wo der früher kopierte Abschnitt beginnt,
die Länge der
Kopie und das neue Symbol umfassen.
-
Es hatte den Anschein, daß Huffman-
oder Shannon-Fano-Codierung
die perfekte Datenkomprimierungseinrichtung ist. Dies ist jedoch
nicht der Fall. Wie oben erwähnt,
sind diese Codierungsverfahren optimal, wenn, und nur wenn, die
Symbolwahrscheinlichkeiten ganzzahlige Potenzen von ½ sind, was
gewöhnlich
nicht der Fall ist.
-
Die Technik arithmetischer Codierung
weist diese Einschränkung
nicht auf: dieselbe erzielt den gleichen Effekt, als behandle sie
die Nachricht als eine einzige Einheit (eine Technik, die bei Huffman-Codierung
eine Aufzählung
jeder einzelnen möglichen
Nachricht erfordern würde),
und erreicht so die theoretische Entropie, die an die Komprimierungseffizienz
gebunden ist, für
jegliche Quelle.
-
Bei arithmetischer Codierung wird
eine Entscheidung nach der anderen codiert, um erfolgreich kleinere,
weniger umfassende Intervalle entlang einer Zahlenlinie zu definieren.
Zusätzliche
Informationen zu arithmetischem Codieren können in "An Introduction To Arithmetic Encoding" von G. G. Langdon, Jr.,
IBM Journal of Research and Development, Bd. 28, Nr. 2, März 1984,
135–149;
in "Arithmetic Compression
Code Control Parameters Approximation" von D. R. Helman, G. G. Langdon, Jr.,
und J. J. Rissanen, Bd. 23, Nr. 11, April 1981, 5112–5114; und
in dem U.S.-Patent Nr. 4, 905, 297, "Arithmetic Coding Encoder And Decoder
System", Langdon,
Jr., u. a., gefunden werden.
-
Wie es in den obigen Artikeln bemerkt
ist, sieht eine arithmetische Codierung vor, daß jede Entscheidung eine Mehrzahl
von möglichen,
zwingenden Ergebnissen „oder
Ereignissen" aufweist.
Jedes Ergebnis oder Ereignis ist in den Daten durch ein Symbol dargestellt.
In der Bilderzeugungsumgebung beispielsweise kann jede Entscheidung
dem entsprechen, ob ein gegebenes Pixel schwarz ist oder nicht. Das
Entscheidungsergebnis wird durch ein J- (oder JA-) Symbol dargestellt,
wenn das Pixel schwarz ist, oder durch ein N- (oder NEIN-) Symbol, wenn das Pixel
nicht schwarz ist. So kann dann eine Mehrzahl von Entscheidungen
durch eine Sequenz von Symbolen dargestellt werden, z. B. JNNJ...
-
Gemäß älteren arithmetischen Codierungslehren
weist eine Wahrscheinlichkeitszeile ein auf derselben definiertes
aktuelles Intervall auf. Das erste aktuelle Intervall ist 0 bis
1. Das aktuelle Intervall ist in zwei Segmente geteilt, wobei ein
Segment einem möglichen
Ergebnis für
die nächste
Entscheidung entspricht. Wo es lediglich zwei mögliche Ergebnisse für jede Entscheidung
gibt, ist das aktuelle Intervall in zwei Segmente geteilt. Die Länge jedes Segments
basiert auf der jeweiligen zugeordneten Wahrscheinlichkeit desselben.
Die jeweiligen Wahrscheinlichkeiten können fest bleiben oder können sich
anpassen, wenn Entscheidungsdaten eingegeben werden.
-
Es ist das Korrelieren großer Segmente
mit Symbolen, die mit größerer Häufigkeit
auftreten, das zu der Komprimierungswirkung führt. In dem vorher zitierten
Artikel ("An Introduction
To Arithmetic Encoding")
ist ein arithmetisches Codierungsbeispiel mit vier Symbolen dargelegt,
bei dem jede Entscheidung in einem „a"-Ereignis (mit einer 50%igen Wahrscheinlichkeit),
einem „b"-Ereignis (mit einer 25%igen
Wahrscheinlichkeit), einem „c"-Ereignis (mit einer
12,5%igen Wahrscheinlichkeit) oder einem „d"-Ereignis (mit einer 12,5%igen Wahrscheinlichkeit)
resultieren kann. Ein Darstellen der vier Ereignisse in binärer Form
würde zwei
Bits für
jede Entscheidung erfordern, wobei die Ereignisse durch 00, 01,
10 bzw. 11 dargestellt würden.
Für drei
Entscheidungen, wie beispielsweise „aab", was sehr wahrscheinlich ist, wären die
einfachen Codierungsdaten 00 00 01; was sechs Bits erfordert. Wie
jedoch in dem Artikel auf Seite 137 bemerkt, erlaubt es der arithmetische
Codierungsansatz, daß die
Sequenz „aab" durch den Wert 0,001
dargestellt wird. Anstelle von sechs Bits können die Informationen in drei
Bits dargestellt werden. Diese Ersparnis von Bits resultiert, wenn
aufeinanderfolgende Ereignisse mit relativ hohen zugeordneten Wahrscheinlichkeiten
auftreten.
-
Die Ersparnis verschlechtert sich,
wenn zahlreiche Ereignisse auftreten, für die es geringe Wahrscheinlichkeiten
und relativ kurze Zeilensegmente gibt. Bei den oben angemerkten
Wahrscheinlichkeiten würde
eine Sequenz von Ereignissen „dd" mit codierten Daten
als 11 11 dargestellt, wohingegen durch ein arithmetisches Codieren
die „dd"-Ereignisse durch 111111 dargestellt
würden.
Vorausgesetzt, daß die
größeren Segmente
tatsächlich
Ereignissen entsprechen, die mit entsprechend größerer Häufigkeit auftreten, werden
die zusätzlichen
Bits, die für weniger
wahrscheinliche Symbole benötigt
werden, durch die Einsparung aufgewogen, die erzielt wird, wenn
wahrscheinlichere Symbole auftreten.
-
Experimente haben gezeigt, daß die Daten der
vorangehenden Zeile enorm helfen, wenn Text- und Strichzeichnungsdaten
komprimiert werden. Zum Beispiel wird eine Strichzeichnung des Spaceshuttles,
die viel weißen
Raum und gerade Linien enthält,
bei einem Einzelzeilenkontextmodell mit 18 : 1 komprimiert. Das
gleiche Bild wird mit 43 : 1 komprimiert, wenn die Daten der vorangehenden
Zeile verwendet werden.
-
Alle zweidimensionalen Kontextmodelle
erfordern Daten der vorangehenden Zeile. Dieser Bedarf nach Daten
der vorangehenden Zeile wird im allgemeinen durch ein Unterhalten
eines Zeilenpuffers gelöst,
um die vorangehende Zeile von Daten zu speichern. Eine derartige
Lösung
kann für
hohe Auflösungen
teuer sein. Beispielsweise benötigt
ein Einzelzeilenspeicher für
ein 11 Zoll breites Bild bei 1.200 dpi etwa 1,6 KB Speicher. Wenn
ein 3 × 3-Kontextmodell
verwendet wird, wird ein Zweizeilenpuffer benötigt, wodurch der Speicherbedarf
verdoppelt wird.
-
Vor der vorliegenden Erfindung las
die Komprimierungsmaschine die Daten Zeile für Zeile. Bevor die Daten komprimiert
werden, wird die vorangehende Zeile aus dem Zeilenpuffer gelesen.
Schließlich werden
die komprimierten Daten zurück
in den Speicher gespeichert. Einige Anwendungen greifen gleichzeitig
auf die Zeilen zu. Gleichzeitiger Zugriff erfordert jedoch doppelte
oder vielleicht sogar dreifache Bandbreite, um ein Wiedergewinnen
der Daten der vorangehenden Zeile zu erlauben.
-
Die
EP 0311265 A2 beschreibt ein Verfahren und
eine Vorrichtung zur Verarbeitung von Bildelementsignalen eines
Bilds eines Textdokuments. Insbesondere versucht die Verarbeitung,
unnötige
Redundanz zu vermeiden, wenn Textdaten in zwei unterschiedlichen
Auflösungen
komprimiert werden. Folglich ist die Verarbeitung der Bilddaten
in Verarbeitungsstufen eingeteilt, wobei eine auf die Verarbeitung
jeder zweiten Pixelelement-(PEL-) Position in dem Textdokument ausgerichtet
ist und die andere auf die Komprimierung der anderen Pixel ausgerichtet
ist. Die Fenster, die in den zwei Verarbeitungsstufen als Abtastfenster
oder Schablonen verwendet werden, sind definiert und geben die Pixel
an, die verwendet werden, um ein bestimmtes Pixel zu komprimieren,
das als nächstes
komprimiert werden soll. Das Fenster und die Pixel, die komprimiert
werden sollen, werden entlang jeder Zeile verschoben, um die Pixelelemente
einer aktuellen Zeile zu komprimieren, und werden dann vertikal
verschoben, um die nächste
Zeile zu verarbeiten. Die Verarbeitung wird implementiert, derart,
daß die
Bilddaten, die komprimiert werden sollen, zuerst in einem Eingangsbildpuffer
gespeichert werden, und daß die
benötigten
Pixelelementsignale sequentiell von dem Puffer abgerufen werden.
-
In "Fundamentals of Digital Image Processing" von Anil K. Jain
ist ein zweidimensionales voraussagendes Codierungsverfahren beschrieben,
in dem vier nächste
Nachbarn verwendet werden, um ein Bild Pixel für Pixel zu komprimieren. Informationen
darüber,
wie die Nächste-Nachbar-Maske
bewegt werden soll, sind nicht gezeigt.
-
Es ist die Aufgabe der vorliegenden
Erfindung, ein Verfahren zum Codieren und Decodieren von Bilddaten
und eine Vorrichtung zum Reduzieren von Speicherbedarf zum Speichern
eines Bildes zu schaffen, so daß der
Speicherbedarf während
eines Codierens und Decodierens reduziert ist.
-
Diese Aufgabe wird durch ein Verfahren
gemäß Anspruch
1 oder 5 und eine Vorrichtung gemäß Anspruch 7 gelöst.
-
Um die vorliegende Erfindung auszuführen, ist
ein Verfahren zum Codieren von Bilddaten bereitgestellt. Zuerst
wird ein Kontextmodell definiert. Als nächstes werden die Bilddaten
logisch in eine Mehrzahl von Spalten unterteilt. Eine letzte, eine
aktuelle und eine nächste
Zeile für
die vorliegende Spalte werden in einem Komprimierer gepuffert. Das
Kontextmodell definiert Bits, die durch den Komprimierer verwendet
werden, um ein gegebenes Bit zu komprimieren. Diese Bits und das
Bit, das komprimiert werden soll, werden an den Komprimierer übertragen. Das
Kontextmodell wird horizontal um eine einzige Bitposition verschoben,
bis jedes Bit in der aktuellen Reihe der vorliegenden Spalte komprimiert
wurde. Als nächstes
bewegt sich das Kontextmodell vertikal in der vorliegenden Spalte,
wodurch dasselbe dem Komprimierer die nächste Zeile zuführt. Die
vertikale Bewegung wird am effizientesten durch ein Umbenennen der
aktuellen Zeile in die letzte Zeile und der nächsten Zeile in die aktuelle
Zeile in dem Puffer ausgeführt.
Nach dem Umbenennen muß die
neue nächste
Zeile aus dem Speicher wiedergewonnen und in dem Puffer gespeichert
werden.
-
Kurze Beschreibung
der Zeichnungen
-
Ein besseres Verständnis der
Erfindung kann aus der Betrachtung der folgenden detaillierten Beschreibung
in Verbindung mit den zugehörigen Zeichnungen
erhalten werden, in denen:
-
1 die
vertikale Progression durch ein Bild darstellt.
-
2 ein
Blockdiagramm auf hoher Ebene gemäß der vorliegenden Erfindung
ist.
-
3 die
Wechselwirkung zwischen dem Speicherpuffer und den Schieberegistern
zeigt.
-
4 das
Kontextmodell zeigt, das bei dem bevorzugten Ausführungsbeispiel
verwendet wird.
-
5 eine
Bitfüllung
am Ende einer Zeile darstellt.
-
6 ein
Flußdiagramm
ist, das das bevorzugte Ausführungsbeispiel
der vorliegenden Erfindung zeigt.
-
Detaillierte
Beschreibung der bevorzugten Ausführungsbeispiele
-
Die vorliegende Erfindung erlaubt
die Verwendung von Daten der vorangehenden Zeile, ohne Mehrfachzugriffe
auf das Bild oder die Verwendung eines Zeilenpuffers zu erfordern.
Nun wird Bezug auf 1 genommen,
in der sich die vorliegende Erfindung vertikal durch das Bild bewegt,
wobei dieselbe lediglich eine geringe Menge der Daten der vorangehenden
Zeile speichert.
-
In 1 ist
ein Bild 10, das komprimiert werden soll, in sechs Spalten 100–105 unterteilt.
Anstatt daß das
Bild 10 horizontal überquert
wird, wird dasselbe vertikal überquert,
wie es durch die Pfeile dargestellt ist. So startet der Komprimierer
in der oberen linken Ecke und fährt
eine Spalte 100 hinunter. Ist die Spalte 100 komprimiert,
fährt der
Komprimierer am oberen Ende von Spalte 101 fort. Dieser
Prozeß geht weiter,
bis eine Spalte 105 komprimiert wurde. Durch ein vertikales Überqueren
des Bildes sind die Informationen über die vorhergehende Zeile
durch die Breite der Spalte begrenzt. Diese begrenzte Speicherung
der vorangehenden Zeile erlaubt die Verwendung eines zweidimensionalen
Kontextmodells, was das Komprimierungsverhältnis stark erhöht. Zusätzlich sind
die begrenzten Daten der vorangehenden Zeile beträchtlich
geringer als ein Erhalten der gesamten vorangehenden Zeile.
-
Dieser kurzen Beschreibung der vorliegenden
Erfindung auf hohem Niveau folgt ein detaillierterer Blick auf das
bevorzugte Ausführungsbeispiel. Nun
wird Bezug auf 2 genommen,
in der der Datenfluß für den Komprimierungsprozeß in einem
vereinfachten Blockdiagramm gezeigt ist. Ein Hardwarekomprimierer 502 fordert
Bilddaten von einem DRRM 500 unter der Steuerung einer
DMA-Steuerung 512 an. Daten, die aus einem Speicher 500 wiedergewonnen
wurden, werden in dem geeigneten Fach eines Speicherpuffers 40 gemäß der unten
abgegebenen Beschreibung gespeichert.
-
Die aktuelle Zeile wird von dem Speicherpuffer 40 in
ein Schieberegister 405 übertragen und die vorangehende
Zeile wird zu einem Schieberegister 404 übertragen.
Ein Bit 30 wird in 2 gerade
komprimiert. Aufeinander bezogene Bits 508 bilden eine Adresse
für einen
Wahrscheinlichkeits-RAM 506 der arithmetischen
Codierungshardware 503. Auf dem Ausgang des Wahrscheinlichkeits-RAM 506 und
zusätzlichen
arithmetischen Operationen basierend, die durch die arithmetische
Codierungshardware 503 durchgeführt werden, wird ein MPS (most
probable symbol = wahrscheinlichstes Symbol) für das Bit 30 erzeugt.
Nachdem ein spezielles Bit 30 komprimiert wurde, werden
Daten in den Schieberegistern 404 und 405 verschoben, so
daß ein
neues Bit komprimiert werden kann.
-
Die Arithmetische Codierungshardware 503 leitet
komprimierte Daten an einen FIFO 504, wenn dieselben erzeugt
werden. Unter der Steuerung einer DMA-Steuerung 505 werden
Daten von einem FIFO 502 in einen DRRM 501 übertragen.
Nachdem alle Daten in dem DRAM 500 komprimiert und an den DRAM 501 übertragen
wurden, meldet der Hardwarekomprimierer 502 dem Bildprozessor 520,
daß die
Komprimierung vollständig
ist.
-
Mit der Hilfe von 2 kann der Datenfluß für die Dekomprimierung beschrieben
werden. Komprimierte Daten werden unter der Steuerung der DMA-Steuerung 505 von
dem DRAM 501 in den FIFO 504 übertragen. Die arithmetische
Codierungshardware 503 dekomprimiert die Daten und gibt
immer ein einziges Bit 511 zu einer Zeit aus.
-
Das Bit 30 wird auf der
Beziehung desselben mit Bits 508 basierend vorausgesagt.
Die Bits 508 bilden eine Adresse für den Wahrscheinlichkeits-RAM 506.
Auf der Ausgabe des Wahrscheinlichkeits-RAM 506 und zusätzlichen
arithmetischen Operationen basierend, die durch die arithmetische
Codierungshardware 503 durchgeführt werden, wird der Zustand des
Bits 30 erzeugt. Als nächstes
werden die Schieberegister 404 und 405 verschoben,
so daß das nächste Bit
dekomprimiert werden kann. Schließlich enthält das Schieberegister 405 ein
gesamtes Byte von unkomprimierten Daten. Zuerst werden die Daten
in dem Schieberegister 404 in den Speicherpuffer 40 übertragen.
Als nächstes
wird der Inhalt des Schieberegisters 404 in den Speicherpuffer 40 und auch
in das Schieberegister 405 übertragen. Unter der Steuerung
der DMA-Steuerung 512 werden die unkomprimierten Daten
von dem Speicher 40 in das DRAM 500 übertragen.
-
Nun wird Bezug auf 3 genommen, in der der Speicher 40 in
drei Abschnitte 401–403 unterteilt ist,
die einen Ringpuffer bilden. Die Breite des Speichers 40 ist
gleich der Breite einer vertikalen Spalte, wie beispielsweise 100.
Wie nun in 3 zu sehen ist,
enthält
ein RAM A 401 Daten für
die vorangehende Zeile, enthält
ein RAM B 402 Daten für
die aktuelle Zeile und ist ein RAM C 403 mit Daten für die nächste Zeile
aus dem DRAM geladen. Innerhalb des arithmetischen Komprimierers
werden Daten für
die aktuelle Zeile, hier RAM B 402, in das Register 405 übertragen.
Daten für
die vorangehende Zeile, hier RAM A 401, werden in das Register 404 übertragen.
Der Komprimierer ist mit dem Komprimieren der Informationen in den
Registern 404 und 405 beschäftigt, während neue Informationen aus
dem Hauptspeicher in den RAM C 403 übertragen werden können.
-
Wie oben beschrieben, verwendet die
arithmetische Komprimierung ein Kontextmodell, um den Zustand eines
gegebenen Bits vorauszusagen. 4 zeigt
das Kontextmodell, das bei dem bevorzugten Ausführungsbeispiel verwendet wird,
im Detail. Dieses spezielle Kontextmodell verwendet Informationen
aus der aktuellen Zeile wie auch aus der Zeile über dem Bit, das komprimiert
wird. Zusätzlich ist
anzumerken, daß das
Kontextmodell in der Reihe darüber
Bits zur Rechten des aktuellen Bits verwendet und in der aktuellen
Reihe Bits zur Linken des aktuellen Bits.
-
Das Kontextmodell 20 bewegt
sich horizontal über
die aktuelle Zeile 405, während jedes Bit 30 komprimiert
wird. Während
einer Komprimierung der ersten Bits einer Zeile versucht das Kontextfenster 20,
Bits zu nutzen, die nicht vorhanden sind. Dem Entwickler stehen
mehrere Alternativen zur Verfügung.
Das Kontextmodell könnte
modifiziert werden, um diese Bits nicht zu erfordern. Ein derartiges
Kontextmodell kann jedoch das Komprimierungsverhältnis für einige Datenarten ernstlich
beeinflussen. Alternativ könnte
das erste Bit in die fehlenden Positionen kopiert werden. Die Wirkung
auf das Komprimierungsverhältnis
gegen die Komplexität
der Implementierung aufwiegend, setzt das bevorzugte Ausführungsbeispiel
diese Bits auf Null (0|0). Null wurde ausgewählt, basierend auf dem Verständnis, daß weiße Räume (d.
h. Nullen) vorherrschender sind. Daher ist es wahrscheinlicher,
daß diese
Bits Null wären.
Das Einstellen dieser Bits auf Null beeinflußt das Komprimierungsverhältnis nachteilig.
Ein Experimentieren hat jedoch gezeigt, daß die Abnahme etwa 2% beträgt. Auf
eine ähnliche
Weise wie in 5 gezeigt,
versucht das Kontextmodell, wenn das Kontextfenster 20 das
Ende erreicht, Informationen zu verwenden, die nicht zur Verfügung stehen.
Dem Entwickler stehen die gleichen Alternativen zur Verfügung, wie
oben beschrieben. Hier kopiert das bevorzugte Ausführungsbeispiel
das letzte Bit oder das jeweilige Register in die fehlenden Bits.
-
Nachdem die aktuelle Zeile komprimiert
wurde, werden die Zeiger auf den Speicher 40 eingestellt,
derart, daß der
RAM B 402 nun Daten für
die vorangehende Zeile enthält,
der RAM C 403 Daten für
die aktuelle Zeile enthält
und der RAM A mit Daten für
die nächste
Zeile geladen ist. Wiederum werden Daten für die aktuelle Zeile, jetzt
RAM C 403, in das Register 405 übertragen.
Daten für
die vorangehende Zeile, jetzt RAM B 402, werden in das
Register 404 übertragen.
Der Komprimierer ist mit dem Komprimieren der Informationen in den
Registern 404 und 405 beschäftigt, während neue Informationen aus dem
Hauptspeicher in den RAM A 401 übertragen werden können.
-
Die Verwendung des Speicherpuffers 403 ist für die vorliegende
Erfindung nicht notwendig. Jedoch erlaubt ein dreistufiger Puffer
einen konstanten Fluß von
Daten zu dem Komprimierer, wodurch der Durchsatz für das System
verbessert wird.
-
Ein Erhöhen der Breite einer Spalte
reduziert den Einfluß der
Anfangs- und Endbitmanipulation auf das Komprimierungsverhältnis. Bei
dem bevorzugten Ausführungsbeispiel
ist jede Spalte 16 Wörter
breit, wobei jedes Wort 32 Bit breit ist.
-
Das Komprimierungsverhältnis kann
ferner durch die Diskontinuität
beeinflußt
werden, wenn die obere Zeile einer neuen Spalte komprimiert wird. Wenn
zum Beispiel die obere Zeile der Spalte 103 komprimiert
wird, enthält
das Register 405 Daten von der oberen Zeile in Spalte 103,
während
das Register 404 Daten aus der unteren Zeile von Spalte 102 enthält. Bei
dem bevorzugten Ausführungsbeispiel
wurde befunden, daß diese
Diskontinuität
der Daten das Komprimierungsverhältnis
lediglich minimal beeinflußt.
Für eine
gegebene Anwendung kann jedoch der Einfluß auf das Komprimierungsverhältnis durch ein
Einstellen der vorangehenden Zeile auf einen bestimmten Wert, wie
beispielsweise nur Nullen, oder eine Kopie der aktuellen Zeile reduziert
werden.
-
Das Flußdiagramm von 6 zeigt den logischen Fluß für das bevorzugte
Ausführungsbeispiel. Zuerst
muß ein
Kontextmodell definiert werden 601. Während dasselbe dynamisch in
Echtzeit berechnet werden kann, wird dasselbe bei dem bevorzugten Ausführungsbeispiel
während
der Weiterbildung des Hardwarekomprimierers 503 bestimmt.
Als nächstes wird
das Bild in Spalten unterteilt 602. Bevor der Komprimierer
starten kann, muß der
Pufferspeicher 40 vorgeladen werden 603. Wenn
der Pufferspeicher geladen ist, wird der Komprimierer 503 gestartet 603. Das
Kontextmodell verschiebt sich horizontal 605 über die
aktuelle Zeile, während
der Komprimierer jedes Bit komprimiert. Ist die aktuelle Zeile komprimiert 606, überprüft der Komprimierer,
ob die Spalte fertig ist 607. Wenn die Spalte fertig ist,
wird die nächste Spalte
adressiert 611. Wenn die Spalte nicht fertig ist, werden
die Register wieder geladen 608 und 609, die nächste Zeile
wird wiedergewonnen 610 und die Komprimierung geht weiter.