-
Ein Abschnitt der Offenbarung dieses
Patentdokumentes enthält
Material, das dem Urheberrechtsschutz unterliegt. Der Urheberrechtsinhaber
hat nichts gegen die Faksimilewiedergabe durch irgendeine Patentoffenbarung
einzuwenden, wenn sie in Patentakten und -aufzeichnungen des Patent-
und Markenamtes erscheint, behält
sich aber im übrigen
alle Urheberrechte vor, welche es auch sein mögen.
-
Diese Erfindung betrifft im allgemeinen
die Datenkomprimierung und -dekomprimierung und im besonderen ein
Verfahren zum Codieren von Farbgraphikbilddaten gemäß Sätzen von ähnlichen
Farben.
-
Farbgraphikstandbilder finden breite
Verwendung zur Anzeige durch Computersysteme, speziell durch Multimedia-Personalcomputer
(PCs). Da der Grad der vorgesehenen Auflösungen und die Anzahl von Farben,
die in einem Bild dargestellt werden kann, höher werden, nimmt die Größe der Daten,
die das Farbgraphikbild darstellen, immer mehr zu. Da ferner größere Computermonitore
verwendet werden, verlangen Nutzer die Anzeige von größeren Bildern.
Die Reduzierung des Speicherraumes, der zum Speichern von Farbgraphikbildern
benötigt
wird, und die Reduzierung der Zeit, die zum Übertragen und Anzeigen solcher
Bilder benötigt
wird, war und bleibt ein wichtiges Ziel in der Computergraphiktechnik.
-
1 ist
ein Diagramm nach Stand der Technik eines Farbgraphikbildes und
dessen zugeordneter Speicherdarstellung. Ein Bitmap-Bild 10 hat
n Zeilen mit m Pixels pro Zeile. Typischerweise ist sowohl n als auch
m durch acht teilbar. Daher kann das Bitmap-Bild 10 logisch
in quadratische Blöcke
von 8 mal 8 Pixels geteilt werden. Somit sind m/8 Blöcke quer über die
horizontale Achse des Bitmap-Bildes und n/8 Blöcke längs der vertikalen Achse des
Bitmap-Bildes vorhanden, oder (m/8*n/8) 8 × 8 Blöcke in dem Bitmap-Bild. Ein
gegebener Block 8 × 8
kann durch ein (i, j)-Paar bezeich net werden, wobei i in dem Bereich
von 0 bis (m/8 – 1)
liegt und j in dem Bereich von 0 bis (n/8 – 1) liegt.
-
Jeder Block 8 × 8 12 enthält deshalb
64 Pixels. Jedes Pixel wird als RGBA-Vierergruppe 14 dargestellt. Die
RGBA-Vierergruppe 14 enthält einen
Rot-Farbwert (R) 16, einen Grün-Farbwert (G) 18,
einen Blau-Farbwert (B) 20 und einen Helligkeitswert (A) 22,
Die Farbe und die Helligkeit des Pixels werden durch die R-, G-, B-
und A-Werte bestimmt. Bei den meisten Farbbildern enthält ein Block
8 × 8
5 bis 12 verschiedene Farben. Jeder der R-, G-, B- und A-Werte wird
in einem Acht-Bit-Byte gespeichert. Deshalb belegt jedes Pixel 4
Byte des Speichers, und ein Block 8 × 8 belegt 256 Byte des Speichers.
Somit erfordert das Bitmap-Bild 10 256*(m/8*n/8) Byte des
Speichers. Falls das Bitmap-Bild zum Beispiel 640 Pixels pro Zeile
mal 480 Zeilen hat, beläuft
sich die Größe von unkomprimierten
Bitmap-Bilddaten auf 256*(640/8*480/8), also auf 1.228.800 Byte. Bei
einem Bitmap-Bild von 1280 Pixels pro Zeile mal 1024 Zeilen beläuft sich
die Größe des unkomprimierten Bitmap-Bildes
auf 256*(1280/8*1024/8), also auf 5.242.880 Byte. Demzufolge benötigen unkomprimierte Bitmap-Bilder
große
Mengen an Speicher.
-
Ein Verfahren zur Standbildkomprimierung
wurde ersonnen durch die Joint Photographic Experts Group (JPEG),
die eine Gruppe ist, die durch die International Standards Organization
(ISO) sanktioniert wird. Der JPEG-Komprimierungsstandard ist ein
verlustbehafteter Bildkomprimierungsalgorithmus, der die Größe von einzelbitweise
dargestellten Bildern bei einer kaum erkennbaren Bildverschlechterung
reduziert. Verlustbehaftete Komprimierungsverfahren reduzieren die
Größe des Bildes,
indem einige Bildinformationen außer acht gelassen werden. Im
Gegensatz dazu reduzieren verlustfreie Komprimierungsverfahren die
Anzahl von Bits, die ein Bild normalerweise erfordern würde, ohne
jeglichen Datenverlust. Der JPEG-Komprimierungsalgorithmus konvertiert
ein Farbbild in Reihen von Pixels, wobei jedes Pixel Zahlenwerte
hat, die die Helligkeit und Farbe darstellen, wie oben beschrieben.
Das Bild wird in Blöcke
zerlegt, wobei jeder Block 16 mal 16 Pixels hat, und dann auf Blöcke von
8 mal 8 Pixels verkleinert, indem jedes zweite Pixel bei jedem Block
weggenommen wird. Bei dem Komprimierungsalgorithmus wird eine Formel
verwendet, mit der ein Durchschnittsfarbwert für jeden Block berechnet wird,
wodurch er mit weniger Daten dargestellt werden kann. Um die Bilddaten
zurückzugewinnen,
wird der Prozeß einfach
umgekehrt, um das Bild zu dekomprimieren.
-
Obwohl der JPEG-Standard weit verbreitet
ist, hat er Nachteile. Beim JPEG-Algorithmus kommen Fourier-Transformations-,
Hoffman-Codierungs-, "Zickzack-" und YW-Transformationsberechnungen
zum Einsatz, um lokale Durchschnittsfarbwerte für zusammenhängende Pixels in dem Bild zu
berechnen. Der Algorithmus stellt jede Farbe, die in einer Reihe
von Pixels in dem Bild verwendet wird, als Kurve dar. Die lokalen Durchschnittsfarbwerte
werden durch das Berechnen von Kosinusfunktionen und durch das Multiplizieren
mit Gleitkommakoeffizienten für
Terme der Polynomialgleichung errechnet, die die Kurve darstellt.
Diese Berechnungen sind relativ langsam, wodurch sie die gesamte
Bildkomprimierungs- und -dekomprimierungsgeschwindigkeit beeinträchtigen.
Ein schnelleres Verfahren zum Komprimieren und Dekomprimieren von
Farbgraphikbildern wird benötigt,
das keine Gleitkommaberechnung von Kosinusfunktionen und Multiplikationsoperationen erfordert.
Ferner wäre
ein Verfahren, das ein gutes Komprimierungsverhältnis vorsieht und einen höheren Paralle litätsgrad während der
Dekomprimierung zuläßt, ein
wertvoller Beitrag zur Computergraphikkunst.
-
DE-A-196 06 178 offenbart die Farbabbildungscodierung
von Bildblöcken,
d. h., für
jede Farbe, die in einem Block angetroffen wird, wird ein entsprechendes
Bitmap betrachtet. Das Bitmap gibt die Stellen von Pixels an, die
die jeweilige Farbe haben. CA-A-2 168 284 offenbart das Codieren
von Bitmaps, indem sie auf eine Weise indiziert werden, die der
Verwendung von Gruppenflags und Zeilenflags, wie sie hierin gelehrt
wird, ähnlich
ist.
-
Eine Ausführungsform der vorliegenden
Erfindung sieht ein Verfahren zum Komprimieren und Dekomprimieren
von Graphikbilddaten vor. Das Verfahren zum Komprimieren eines Blocks
von Graphikbilddaten in einen komprimierten Block, wobei der Block
eine Vielzahl von Zeilen hat, jede Zeile eine Vielzahl von Spalten hat,
jede Spalte ein Pixel enthält,
jedes Pixel eine Farbe hat, die durch Rot-, Grün-, Blau- und Intensitätswerte repräsentiert
wird, enthält
die Schritte zum Aufbauen eines Arrays von Farbordinalzahlen durch
das Identifizieren aller Farben, die in den Pixels des Blocks vorhanden
sind, wobei jede Farbordinalzahl eine der Farben repräsentiert,
welches Array von Farbordinalzahlen eine der Farbordinalzahlen,
die der Farbe eines Pixels entspricht, für jedes Pixel in dem Block
umfaßt;
Speichern der Rot-, Grün-,
Blau- und Intensitätswerte
für eine
selektierte der Farben in dem komprimierten Block; Aufbauen eines
Satzes von Gruppenflags, der Zeilen in dem Block angibt, die Pixels
mit der selektierten Farbe haben, gemäß dem Array von Farbordinalzahlen;
Speichern des Satzes von Gruppenflags in dem komprimierten Block;
Aufbauen wenigstens eines Satzes von Zeilenflags, der Spalten angibt,
die Pixels mit der selektierten Farbe innerhalb von Zeilen in dem
Block haben, die Pixels mit der selektierten Farbe haben, gemäß dem Array von
Farbordinalzahlen, wobei jede Zeile, die Pixels mit der selektierten
Farbe hat, durch eines von dem Satz von Zeilenflags repräsentiert
wird; Speichern des Satzes von Zeilenflags in dem komprimierten
Block; und Wiederholen dieser Schritte für alle Farben in dem Block.
-
Das Verfahren zum Dekomprimieren
eines komprimierten Blocks von Graphikbilddaten in einen unkomprimierten
Block enthält
die Schritte zum Erhalten der Rot-, Grün-, Blau- und Intensitätswerte
für eine
selektierte Farbe von dem komprimierten Block; Erhalten des Satzes
von Gruppenflags für
die selektierte Farbe von dem komprimierten Block; Erhalten eines
Satzes von Zeilenflags, der einem von dem Satz von Gruppenflags
entspricht und das Vorhandensein der selektierten Farbe in wenigstens
einer Zeile des komprimierten Blocks angibt; Schreiben der Rot-,
Grün-,
Blau- und Intensitätswerte
in den unkomprimierten Block an selektierten Stellen, die durch
Spalten indiziert sind, welche die selektierte Farbe haben, wie
sie durch den Satz von Zeilenflags angegeben wird, und durch Zeilen,
welche die selektierte Farbe haben, wie sie durch Satz von Gruppenflags
angegeben wird; Wiederholen dieser Schritte für jedes Flag in dem Satz von
Gruppenflags, der das Vorhandensein der selektierten Farbe in wenigstens
einer Zeile des komprimierten Blocks angibt; und Wiederholen der
obigen Schritte für
alle verschiedenen Farbkombinationen des komprimierten Blocks.
-
Zusätzliche Vorteile und neue Merkmale
der Erfindung werden in gewissem Grade in der folgenden Beschreibung
bekanntgegeben und werden für
die Fachwelt bei Prüfung
derer ersichtlich sein oder können durch
das Umsetzen der Erfindung in die Praxis erkannt werden.
-
Gemäß einer anderen Ausführungsform
der vorliegenden Erfindung werden die obigen und andere Vorteile
durch ein System zum Komprimieren eines Blocks von Graphikbilddaten
in einen komprimierten Block erreicht, wobei der Block eine Vielzahl
von Zeilen hat, jede Zeile eine Vielzahl von Spalten hat, jede Spalte
ein Pixel enthält
und jedes Pixel eine Farbe hat, die durch Rot-, Grün-, Blau-
und Intensitätswerte
repräsentiert wird.
Die Vorrichtung enthält
ein Mittel zum Aufbauen eines Arrays von Farbordinalzahlen durch
das Identifizieren aller Farben, die in den Pixels des Blocks vorhanden
sind, wobei jede Farbordinalzahl eine der Farben repräsentiert,
welches Array von Farbordinalzahlen eine der Farbordinalzahlen,
die der Farbe eines Pixels entspricht, für jedes Pixel in dem Block
umfaßt;
ein Mittel zum Aufbauen eines ersten Satzes von Flags, der Zeilen in
dem Block angibt, die Pixels mit einer selektierten Farbe haben,
gemäß dem Array
von Farbordinalzahlen ein Mittel zum Aufbauen wenigstens eines zweiten
Satzes von Flags, der Spalten angibt, die Pixels mit der selektierten
Farbe innerhalb von Zeilen in dem Block haben, die Pixels mit der
selektierten Farbe haben, gemäß dem Array
von Farbordinalzahlen, wobei jede Zeile, die Pixels mit der selektierten
Farbe hat, durch eines von dem zweiten Satz von Flags repräsentiert
wird und ein Mittel zum Speichern der Rot-, Grün-, Blau- und Intensitätswerte,
des ersten Satzes von Flags und des wenigstens einen zweiten Satzes
von Flags für
eine selektierte der Farben in dem komprimierten Block.
-
In einer anderen Ausführungsform
der vorliegenden Erfindung werden die obigen und andere Vorteile durch
ein System zum Dekomprimieren eines komprimierten Blocks von Graphikbilddaten
in einen unkomprimierten Block erreicht, wobei der komprimierte
Block eine Vielzahl von verschiedenen Rot-, Grün-, Blau- und Intensitätswert-Farbkombinationen
hat, jede verschiedene Farbkombination einen Satz von Gruppenflags
hat, der das Vorhandensein der verschiedenen Farbkombination in
Zeilen des unkomprimierten Blocks repräsen tiert, und wenigstens einen
Satz von Zeilenflags, der das Vorhandensein der verschiedenen Farbkombination in
Spalten des unkomprimierten Blocks für Zeilen des unkomprimierten
Blocks mit der verschiedenen Farbkombination repräsentiert.
Die Vorrichtung enthält
ein Mittel zum Lesen der Rot-, Grün-, Blau- und Intensitätswerte
für eine
selektierte Farbe von dem komprimierten Block, des Satzes von Gruppenflags
für die
selektierte Farbe von dem komprimierten Block und eines Satzes von
Zeilenflags, der einem Gruppenflag in dem Satz von Gruppenflags
entspricht, der das Vorhandensein der selektierten Farbe in wenigstens
einer Zeile des komprimierten Blocks angibtt und ein Mittel zum
Schreiben der Rot-, Grün-,
Blau- und Intensitätswerte
in den unkomprimierten Block an selektierten Stellen, die durch
Spalten indiziert sind, welche die selektierte Farbe haben, wie
sie durch den Satz von Zeilenflags angegeben wird, und durch Zeilen,
die die selektierte Farbe haben, wie sie durch den Satz von Gruppenflags
angegeben wird.
-
Die Ziele und Vorteile der vorliegenden
Erfindung, die durch die beigefügten
Ansprüche
definiert ist, sind für
die Fachwelt aus der folgenden eingehenden Beschreibung ohne weiteres
ersichtlich, in der nur die bevorzugte Ausführungsform der Erfindung gezeigt
und beschrieben ist, indem einfach der Modus dargestellt wird, der
als der beste zum Ausführen
der Erfindung betrachtet wird. Wie erkannt werden wird, kann die
Erfindung andere und unterschiedliche Ausführungsformen haben und können ihre
verschiedenen Details abgewandelt werden, ohne dabei den Schutzumfang
der Erfindung zu verlassen. Daher sind die Zeichnungen und die Beschreibung
von Natur aus als erläuternd
und nicht als einschränkend
anzusehen. Der Schutzumfang der Erfindung wird nur durch die beigefügten Ansprüche begrenzt.
-
1 ist
ein Diagramm eines Farbgraphikbildes und dessen zugeordneter Speicherdarstellung
(Stand der Technik).
-
2 ist
ein Diagramm eines Beispielblocks 8 × 8 mit den RGBA-Vierergruppen,
die als Ordinalzahlen dargestellt sind, gemäß der vorliegenden Erfindung.
-
3 ist
ein Diagramm, das die Umsetzung von Ordinalzahlen in RGBA-Vierergruppen
zeigt.
-
4 ist
eine textliche Darstellung einer Datenstruktur für den Beispielblock von 2.
-
5 ist
ein Diagramm der Beispieldatenstruktur von 4, wie sie in einem Computerspeicher
gespeichert ist.
-
6 ist
ein Diagramm einer verallgemeinerten Datenstruktur zum Speichern
eines komprimierten Blocks gemäß der vorliegenden
Erfindung.
-
7–8 sind problemorientierte
Flußdiagramme
der Schritte zum Komprimieren von Bilddaten gemäß der vorliegenden Erfindung.
-
9–10 sind problemorientierte
Flußdiagramme
der Schritte zum Dekomprimieren von zuvor komprimierten Bilddaten
gemäß der vorliegenden
Erfindung.
-
11 ist
ein Diagramm einer Software-Ausführungsform
der vorliegenden Erfindung, wie sie auf einem Computersystem implementiert
wird.
-
12 ist
ein Diagramm eines M*N-Verteilers, der zur Dekomprimierung verwendet
wird.
-
13 ist
ein Blockdiagramm einer Dekomprimierungsschaltungsanordnung.
-
Die vorliegende Erfindung arbeitet
mit unkomprimierten Bitmap-Bilddaten, wie etwa jenen, die in 1 gezeigt sind, um eine
komprimierte Darstellung des Bildes zu erzeugen. Sie arbeitet auch
mit komprimierten Bitmap-Bilddaten, um die originale, unkomprimierte
Darstellung zu erzeugen. Um ein Bild zu komprimieren, verarbeitet
die vorliegende Erfindung im allgemeinen alle Blöcke aus 8 mal 8 Pixels des
Bildes der Reihe nach individuell. Für jeden Block werden alle verschiedenen
Farben, die in dem Block vorhanden sind, identifiziert und einer
Ordinalzahl zugeordnet. Eine Datenstruktur für den Block wird erzeugt, um
die Anzahl von verschiedenen Farben zu speichern, die in dem Block
vorhanden sind, einen Komprimierungsbildqualitätsmaskenwert (der weiter unten
erläutert
ist), die eigentliche RGBA-Vierergruppe für jede Farbe, die in dem Block
vorhanden ist, und Sätze
von Gruppen- und Zeilenbinärflags,
die das Vorhandensein einer besonderen Farbe an einem besonderen
Pixel innerhalb des Blocks angeben. Die resultierende Datenstruktur
benötigt
wesentlich weniger Speicher als der Satz von originalen RGBA-Vierergruppen
für den
Block. Die Datenstruktur für
den Block wird dann in dem Speicher oder in einer Computerdatei
gespeichert, und der nächste
Block des Bildes wird verarbeitet. Dieser Prozeß wird für alle Blöcke des Bitmap-Bildes wiederholt.
Um das Bild zu dekomprimieren, werden die RGBA-Vierergruppen von
allen Pixels innerhalb jedes Blocks aus der Datenstruktur für den Block
rekonstruiert. Diese Rekonstruktion wird für alle Blöcke in dem Bild wiederholt.
-
Die Darstellung der komprimierten
Bilddaten gemäß der vorliegenden
Erfindung kann am besten unter Bezugnahme auf ein einfaches Beispiel
verstanden werden. 2 ist
ein Diagramm eines Beispielblocks 8 × 8, wobei die RGBA-Vierergruppen
als Ordinalzahlen dargestellt sind, gemäß der vorliegenden Erfindung. Block 24 verkörpert einen
Block 8 × 8
von einem Bitmap-Bild. Er wird auch als Farbordinaltabelle bezeichnet. Er
hat Indizes in der horizontalen Richtung von 0 bis 7 und in der
vertikalen Richtung von 0 bis 7. Alternativ kann er als eindimensionales
Array mit 64 Elementen dargestellt werden. Die Pixels des
Blocks werden gescant, um zu bestimmen, welche verschiedenen Farben
in dem Block dargestellt sind. Jede gefundene verschiedene Farbe
wird einer Ordinalzahl zugeordnet. 3 ist
ein Diagramm, das die Umsetzung von Ordinalzahlen in RGBA-Vierergruppen
zeigt. Zum Beispiel gibt die Ordinalzahl Eins eine Farbe an, die
gebildet ist aus dem Rotwert R1, dem Grünwert G1, dem Blauwert B1 und
dem Helligkeitswert A1. Die Ordinalzahl Zwei gibt eine Farbe an,
die gebildet ist aus dem Rotwert R3, dem Grünwert G3, dem Blauwert B3 und
dem Helligkeitswert A3. Jede RGBA-Kombination ist eine einzigartige
Farb- und Helligkeitsspezifikation für wenigstens ein Pixel in dem
gegenwärtigen
Block. Die anderen Farben, die in dem Beispielblock gefunden werden,
werden so umgesetzt, wie es gezeigt ist. Unter erneuter Bezugnahme
auf das Beispiel von 2 gibt
die Farbordinaltabelle an, daß eine
erste Farbe gefunden wird in Reihe 0, Spalte 1; Reihe 5, Spalten
0 und 2–7;
und Reihe 6, Spalten 2–5.
Eine zweite Farbe wird gefunden in Reihe 3, Spalten 0 und 6; Reihe
4, Spalten 0–4;
Reihe 5, Spalte 1; und Reihe 6, Spalten 0–1. Eine dritte Farbe wird
gefunden in Reihe 0, Spalten 0 und 2–3; Reihe 1, Spalten 1, 3 und
5; Reihe 2, Spalten 0–7;
und Reihe 6, Spalten 6–7.
Die übrigen
Farben werden auf ähnliche
Weise identifiziert. Bei dem in 2 gezeigten
Beispiel sind sechs unterschiedliche Farben in dem Block 24 dargestellt.
Das Auftreten von jeder Farbe in dem Block kann als Satz von Binärflags dargestellt
werden, wobei jedes Flag das Vorhandensein oder Nichtvorhandensein
der spezifizierten Farbe in einer Zeile des Blocks durch ein Bit
in dem komprimierten Block angibt. Zusätzliche Sätze von Flags können für jede Zeile
erzeugt werden, die eine spezifizierte Farbe hat, die alle Spalten
angeben, die der selektierten Zeile mit der spezifizierten Farbe entsprechen.
-
Bei der Darstellung des Blocks 24 in 2 können Sätze von Flags für jede in
dem Block gefundene Farbe erzeugt werden und in einer Datenstruktur
für den
Block gespeichert werden. Zum Beispiel ist die erste Farbe in den
Zeilen 0, 5 und 6 zu finden. Daher kann ein Satz von Binärflags für diese
Zeilen in dem Block für die
erste Farbe erzeugt werden, der den Wert {10000110} hat. Diese Flags
werden als Gruppenflags bezeichnet. Jede Position in dem Satz von
Gruppenflags stellt eine Zeile in dem Block dar, beginnend bei der
nullten Zeile und weiter bis zur siebten Zeile. Eine Eins an einer
Satzposition gibt an, daß die
selektierte Farbe irgendwo in der Zeile vorhanden ist, und eine
Null an einer Satzposition gibt an, daß die selektierte Farbe in
der Zeile nicht vorhanden ist. Für
jede Zeile, die die selektierte Farbe hat, wird ein Satz von Binärflags erzeugt,
die das Vorhandensein der selektierten Farbe in jeder Spalte der
gegenwärtigen
Zeile angeben. Diese Flags werden Zeilenflags genannt. Zum Beispiel
ist die erste Farbe nur in der Spalte 1 von Zeile 1 zu finden. Daher
wird ein Satz von Binärflags
mit dem Wert {01000000B} erzeugt, um den Fakt darzustellen, daß die erste
Farbe in Spalte 1 gefunden wird, aber in keiner anderen Spalte der
Zeile. Ähnlich
wird ein Satz von Binärflags
mit dem Wert {10111111B} erzeugt, um die Existenz der ersten Farbe
in den Spalten 0 und 2–7
von Zeile 5 darzustellen, und wird ein Satz von Binärflags mit
dem Wert {00111100B} erzeugt, um die Existenz der ersten Farbe in
den Spalten 2–5
von Zeile 6 darzustellen. Dieser Satzerzeugungsprozeß wird für alle in
dem Block gefundenen Farben ausgeführt. Wenn alle Farben verarbeitet
worden sind, ist eine Datenstruktur für den Block vollständig erzeugt worden,
die wesentlich weniger Speicher als frühere Verfahren benötigt und
keine Kosinusfunktionsauswertung oder Gleitkommakoeffizient-Multiplikationsoperationen
erfordert.
-
4 ist
eine textliche Darstellung einer Datenstruktur für den Beispielblock von 2. Jedes Feld der Datenstruktur
wird in einem Byte des Speichers gespeichert. Das Feld 30 "N" gibt die Anzahl von verschiedenen Farben
an, die in dem Block gefunden wurden. Bei diesem Beispiel beträgt die Anzahl
von Farben sechs. Das Feld 32 "Maskenwert" wird verwendet, wenn Sätze von ähnlichen
Farben verglichen werden. Es wird unten eingehender beschrieben.
Die Byte R1, G1, B1 und A1 34 halten die R-, G-, B- und
A-Werte für
die erste Farbe. Bei der verlustfreien Komprimierung werden die
R-, G-, B- und A-Werte in vier Byte gespeichert, wie in dem Originalblock.
Bei der verlustbehafteten Komprimierung wird jede Komponente in
vier Bit gespeichert. In dem Fall werden die R-, G-, B- und A-Werte
in zwei Byte gespeichert. Das Feld 36 "Gruppe1" enthält Bits, die das Vorhandensein
der ersten Farbe in den Zeilen des Blocks angeben. Die erste Farbe
tritt, wie oben erläutert,
in den Zeilen 0, 5 und 6 auf. Daher wird ein Satz von Gruppenflags
für das
Feld 36 " Gruppe1" für die erste
Farbe mit dem Wert {10000110B} erzeugt. Das niedrigstwertige Bit
stellt die untere Zeile des Blocks dar. Da die erste Farbe in drei
Zeilen gefunden wird, werden drei zusätzliche Sätze von Binärflags benötigt, um die Spalten in jenen
drei Zeilen darzustellen, wo die erste Farbe auftritt. Deshalb enthält die Datenstruktur
drei Sätze
von Zeilenflags: Zeile10 38, Zeile15 40 und Zeile16 42.
Die Zahlen in dem Feldnamen geben die Gruppennummer und die Zeilennummer
an (z. B. bedeutet Zeile10 Gruppennummer 1, Zeile 0; bedeutet Zeile15
Gruppennummer 1, Zeile 5; und bedeutet Zeile16 Gruppennummer 1,
Zeile 6). Der Wert {01000000B} wird erzeugt, wie zuvor erläutert, um
den Fakt darzustellen, daß die
erste Farbe in Spalte 1 gefunden wird, aber in keiner anderen Spalte.
Dieser Wert wird in dem Feld 38 "Zeile10" gespeichert. Ähnlich wird der Wert {10111111B} erzeugt,
um die Existenz der ersten Farbe in den Spalten 0 und 2–7 von Zeile
5 darzustellen, und im Feld 40 "Zeile15" gespeichert. Der Wert {00111100B} wird
erzeugt, um die Existenz der ersten Farbe in den Spalten 2–5 von Zeile
6 darzustellen, und in dem Feld 42 "Zeile16" gespeichert.
-
Bei diesem Beispiel wird die vierte
Farbe in die Kombination 44 aus R2, G2, B2, A2 umgesetzt.
Die vierte Farbe wird in den Zeilen 0, 1, 3 und 4 gefunden, weshalb
das Feld 46 "Gruppe2" den Wert {110011000B} erhält. Da diese
Farbe in vier Zeilen auftritt, folgen vier Sätze von Zeilenflags: Zeile20,
Zeile21, Zeile23 und Zeile24. Diese Felder erhalten die Werte {00001111B},
{10101011B}, {00000100B} bzw. {00000111B}. Die zweite Farbe wird
in die Kombination 48 aus R3, G3, B3, A3 umgesetzt. Die
zweite Farbe wird in den Zeilen 3–6 gefunden, weshalb das Feld 50 "Gruppe3" den Wert {00011110B}
erhält.
Da diese Farbe in vier Zeilen gefunden wird, folgen vier Sätze von
Zeilenflags: Zeile33, Zeile34, Zeile35 und Zeile36. Diese Felder
haben die Werte {10000010B}, {11111000B}, {01000000B} bzw. {11000000B}.
Die fünfte
Farbe wird in die Kombination 52 aus R4, G4, B4, A4 umgesetzt.
Die fünfte
Farbe wird in Zeile 3 gefunden, weshalb das Feld 54 "Gruppe4" den Wert {00010000B}
erhält.
Da die fünfte
Farbe in nur einer Zeile gefunden wird, folgt ein Satz von Zeilenflags:
Zeile43. Dieses Feld erhält
den Wert {01111001B}, um zu reflektieren, daß die fünfte Farbe in den Spalten 1–4 und 7
von Zeile 3 gefunden wird. Die sechste Farbe wird in die Kombination 56 aus
R5, G5, B5, A5 umgesetzt. Die sechste Farbe wird in Zeile 7 gefunden,
weshalb das Feld 58 "Gruppe5" den Wert {00000001B} erhält. Da die
sechste Farbe nur in einer Zeile gefunden wird, folgt ein Satz von
Zeilenflags: Zeile57. Dieses Feld erhält den Wert {11111110B}, um
zu reflektieren, daß die
sechste Farbe in den Spalten 0–6
von Zeile 7 auftritt.
-
Die dritte Farbe wird in die Kombination 60 aus
R6, G6, B6, A6 umgesetzt. Die dritte Farbe wird jedoch nicht von
einem Satz von Gruppenflags oder Sätzen von Zeilenflags begleitet.
Die Informationen, die die Positionen der dritten Farbe in dem Block
beschreiben, können
während
des Dekomprimierungsprozesses rekonstruiert werden. Diese Stellen
sind die Pixels in dem Block, die übrigbleiben, nachdem alle anderen
Farben verarbeitet worden sind. Deshalb ist eine Spezifizierung
von Pixels, die diese Farbe haben, unnötig.
-
5 ist
ein Diagramm der Beispieldatenstruktur von 4, wie sie in einem Computerspeicher
gespeichert ist. Bei diesem Beispiel wird die verlustbehaftete Komprimierung
verwendet, wobei die Werte R, G, B und A in insgesamt zwei Byte
gespeichert sind. Bei diesem Beispiel beträgt die Gesamtanzahl von Byte,
die zum Speichern der komprimierten Daten benötigt wird, die den Block darstellen, 32.
Da der unkomprimierte Block 256 Byte benötigte, ergab die Operation
der vorliegenden Erfindung ein Komprimierungsverhältnis von 8
: 1 für
den Musterblock.
-
6 ist
ein Diagramm einer verallgemeinerten Datenstruktur zum Speichern
eines komprimierten Blocks gemäß der vorliegenden
Erfindung. Die Größe (in Byte)
des komprimierten Blocks 62 wird zusammen mit einem Maskenwert 64 gespeichert.
Für jede
Farbe in dem Block werden die R-, G-, B- und A-Werte 66 gespeichert,
und ein Satz von Gruppenflags 68 wird erzeugt. Für jede Zeile,
die die gegenwärtige
Farbe hat, wird ein Satz von Zeilenflags 70 erzeugt, um
die Position der gegenwärtigen
Farbe in der Zeile zu speichern. Diese Datenstruktur wird für alle Blöcke in dem
Bitmap-Bild wiederholt.
-
Das vorliegende Verfahren zum Konstruieren
einer Datenstruktur für
einen Block von Bilddaten während
der Komprimierung weist zwei Ausnahmen auf. Falls der Block nur
eine Farbe hat, ist dann nur eine RGBA-Farbgruppe vorhanden, und
das Format der Datenstruktur ist {N = 4, Maskenwert, RG, BA}. Daher
kann der Block mit nur sechs Byte bei der verlustbehafteten Komprimierung
und mit acht Byte bei der verlustfreien Komprimierung dargestellt
werden. Falls 64 RGBA-Farbgruppen
vorhanden sind (mit der Bedeutung, daß jedes Pixel eine verschiedene
Farbe hat), lautet das Format dann {N = 130, Maskenwert, R1G1, B1A1,
R2G2, B2A2, R3G3, B3A3, ..., R64G64, B64A64}. In der Praxis ist
es jedoch unwahrscheinlich, daß in
einem Block 8 × 8
jedes Pixel eine verschiedene Farbe hat.
-
Unter erneuter Bezugnahme auf 4 hält das Feld 32 " Maskenwert" die Anzahl von Maskenbits,
die verwendet werden, wenn die Farben von zwei Pixels in einem Block
verglichen werden. Der Maskenwert wird während der Komprimierung eines
unkomprimierten Blocks verwendet und an die Dekomprimierungsfunktion zur
Verwendung während
der Dekomprimierung eines komprimierten Blocks übergeben. In der bevorzugten Ausführungsform
der vorliegenden Erfindung lautet der Standardwert des Maskenwertes
16D, oder 00001000B. Dies bedeutet, daß die vier niedrigstwertigen
Bits von jedem R-, G-, B- und A-Wert maskiert werden, wenn Farben
verglichen werden. Das heißt,
nur die vier höchstwertigen
Bits von jedem R-, G-, B- und A-Wert werden für jedes Pixel verglichen. Dadurch
ergeben sich zwei Farben, die ähnlich,
aber nicht identisch sind, wobei sie für Komprimierungszwecke als
dieselbe Farbe betrachtet werden. Der Maskenwert ist eine Variable,
die durch den Benutzer des Komprimierungsalgorithmus festgelegt
werden kann. Genauer gesagt, zwei RGBA-Vierergruppen, nämlich RpGpBpAp
und RgGqBqAq, werden hinsichtlich der Farbe als gleich betrachtet,
falls Rp = Rq mod Maskenwert, Gp = Gq mod Maskenwert, Bp = Bq mod
Maskenwert und Ap = Aq mod Maskenwert ist. Wenn der Maskenwert auf
Null gesetzt wird, findet keine Maskierung statt. Dies ist dann
eine verlustfreie Komprimierung, und das dekomprimierte Bild hat
die beste Qualität,
da es alle Originalinformationen enthält. Das resultierende Komprimierungsverhältnis ist
in diesem Fall jedoch niedriger. Wenn der Maskenwert auf 16D festgelegt
wird, ist die Qualität
des dekomprimierten Bildes nicht ganz so gut, wie wenn der Maskenwert
Null ist, aber das Komprimierungsverhältnis ist besser. Bei dem Standardwert
für die
vorliegende Erfindung können
die meisten Benutzer keine Verschlechterung der Bildqualität entdecken,
nachdem Komprimierungs- und Dekomprimierungsoperationen ausgeführt worden
sind. Der Benutzer kann den Maskenwert auf der Basis dessen selektieren,
was er in Hinblick auf Komprimierungsverhältnis vs. Bildqualität bevorzugt. Je
niedriger der Maskenwert ist, desto wenigere verschiedene Farben
werden für
Komprimierungszwecke als dieselbe Farbe angesehen und desto niedriger
ist das Komprimierungsverhältnis
je höher
der Maskenwert, desto mehr verschiedene Farben werden für Komprimierungszwecke
als dieselbe angesehen und desto höher ist das Komprimierungsverhältnis.
-
7–8 sind problemorientierte
Flußdiagramme
der Schritte zum Komprimieren von Bilddaten gemäß der vorliegenden Erfindung.
Nach dem Komprimierungsstartschritt 100 bei Schritt 102 wird
der Maskenwert für diese
Komprimierungsoperation erhalten. Der Maskenwert kann durch einen
Anwender des Komprimierungsverfahrens auf der Basis des gewünschten
Komprimierungsverhältnisses
und der resultierenden Qualität
des dekomprimierten Bildes festgelegt werden. Alternativ kann der
Maskenwert auf einen Standardwert voreingestellt werden, wie zum
Beispiel auf 16D. Der Maskenwert kann für alle Blöcke in dem zu komprimierenden
Bild derselbe sein, oder es kann ein neuer Maskenwert für jeden
Block spezifiziert werden. Ein unkomprimierter Block von Bilddaten
von 8 × 8
Pixels wird bei Schritt 104 zur Komprimierungsverarbeitung
erhalten. Typischerweise sind die Bilddaten in einer Datei auf einem
Computersystem gespeichert, wird die Datei geöffnet und wird der erste Block
von Bilddaten von der Datei gelesen.
-
Bei Schritt 106 werden die
64 Pixels des unkomprimierten Blocks gescant, um eine Farbordinaltabelle (die
der in 2 gezeigten Beispieltabelle ähnlich ist)
von allen verschiedenen Farben gemäß dem Maskenwert zu erstellen.
Die Farben, die in dem Block vorhanden sind, werden identifiziert,
und jedem Pixel wird eine Ordinalzahl der Farbe zugeordnet, die
in dem Pixel vorhanden ist. Zwei Pixels werden als ein und dieselbe Farbe
betrachtet, falls die RGBA-Werte der Pixels um weniger als den Maskenwert
differieren. Sobald die Farbordinaltabelle für den Block erstellt ist, wird
bei Schritt 108 die erste Farbe von der Farbordinaltabelle
selektiert. Dies ist die Farbe, die zuerst zu verarbeiten ist, wenn
die Datenstruktur konstruiert wird, die die komprimierten Bilddaten
für den
Block hält.
Als nächstes
werden bei Schritt 110 die RGBA-Werte für die gegenwärtig verarbeitete
Farbe aus dem unkomprimierten Block von Bilddaten extrahiert und
in der Datenstruktur des komprimierten Blocks gemäß dem spezifizierten
Maskenwert gespeichert. Die Datenstruktur des komprimierten Blocks
ist in 6 gezeigt. Dann
wird die Farbordinaltabelle bei Schritt 112 gescant, um
einen Satz von Gruppenflags zu erstellen, der Zeilen in dem unkomprimierten
Block angibt, die die gegenwärtige
Farbe haben. Da acht Zeilen in dem Block vorhanden sind, reicht
ein Satz von acht Binärflags
aus, um das Vorhandensein oder Nichtvorhandensein der gegenwärtigen Farbe
in den Zeilen des Blocks anzugeben. Der Satz von Gruppenflags kann
in einem 8-Bit-Byte gespeichert werden. Der Satz von Gruppenflags
wird dann in dem komprimierten Block gespeichert. Bei Schritt 114 wird
die Farbordinaltabelle verarbeitet, um einen oder mehrere Sätze von
Zeilenflags zu erstellen, die Spalten angeben, die die gegenwärtige Farbe
haben, und zwar für
jede in dem gegenwärtigen
Satz von Gruppenflags durch ein Flag gekennzeichnete Zeile. Das
heißt,
für jede
Zeile in dem Block, die ihr zugeordnetes Bit hat, das in dem Satz
von Gruppenflags gesetzt ist, wird ein Satz von Zeilenflags erzeugt.
Da acht Spalten in dem Block vorhanden sind, reicht ein Satz von
acht Binärflags
aus, um das Vorhandensein oder Nichtvorhandensein der gegenwärtigen Farbe
in den Spalten der selektierten Zeile anzugeben. Der Satz von Zeilenflags
wird in einem 8-Bit-Byte gespeichert. Alle Sätze von Zeilenflags, die gesetzten Bits
in dem Satz von Gruppenflags entsprechen, werden in dem komprimierten
Block gespeichert. Die Komprimierungsverarbeitung wird in 8 über die Verbindung 8A fortgesetzt.
-
Falls bei dem Testschritt 116 in 8 in der Farbordinaltabelle
weitere Farben übrig
sind, um verarbeitet zu werden, wird der JA-Pfad 118 über die
Verbindung 7B zu Schritt 108 in 7 gewählt.
Bei Schritt 108 wird die nächste zu verarbeitende Farbe
von den Farben in der Farbordinaltabelle selektiert, und diese Farbe wird
wie oben beschrieben verarbeitet. Falls keine weiteren zu verarbeitenden
Farben mehr übrig
sind, wird dann der NEIN-Pfad 120 zu Schritt 122 gewählt. Als
Optimierungsmerkmal der vorliegenden Erfindung wird die Farbe, die
in dem Originalblock von Bilddaten am häufigsten vorkommt, als letzte
Farbe in dem komprimierten Block dargestellt, wobei der Satz von
Gruppenflags und die Sätze
von Zeilenflags weggelassen werden. Während der Dekomprimierungsverarbeitung
wird angenommen, daß diese
Farbe in allen Pixels vorhanden ist, die nicht durch andere Sätze von
Gruppenflags und Sätze
von Zeilenflags bezeichnet sind. Deshalb werden die RGBA-Werte der
größten Farbgruppe
bei Schritt 122 an das Ende des komprimierten Blocks verschoben,
und andere Bytes des komprimierten Blocks werden verschoben, um
den Block zu verdichten und die Lücke im Speicher zu füllen, die
durch die größte Farbgruppe
verblieben ist, falls erforderlich. Bei Schritt 124 werden
die Größe des komprimierten
Blocks und der während
der Verarbeitung des Blocks verwendete Maskenwert in dem komprimierten
Block gespeichert. Der komprimierte Block wird dann bei Schritt 126 ausgegeben.
Typischerweise hat diese Ausgabeoperation das Schreiben des komprimierten
Blocks in eine Datei zum Speichern der komprimierten Bilddaten zur
Folge. Falls bei dem Testschritt 128 weitere Blöcke der
Bilddaten verarbeitet werden müssen,
wird dann über
die Verbindung 7A der JA-Pfad 130 zu Schritt 104 in 7 gewählt. Bei Schritt 104 wird
der nächste
unkomprimierte Block von Bilddaten zur Komprimierungsverarbeitung
erhalten. Anderenfalls wird der NEIN-Pfad 132 zu dem Endschritt 134 gewählt, und
die Komprimierungsverarbeitung für
die Bilddaten ist vollendet.
-
Tabelle I beschreibt einen Pseudocode
zum Komprimieren eines Blocks von Bilddaten gemäß der vorliegenden Erfindung.
In Anhang A ist eine Implementierung des Komprimierungsalgorithmus
der vorliegenden Erfindung in der Sprache "C" offenbart.
-
-
-
-
9–10 sind problemorientierte
Flußdiagramme
der Schritte zum Dekomprimieren von zuvor komprimierten Bilddaten
gemäß der vorliegenden
Erfindung. Die Dekomprimierungsschritte werden gewöhnlich ausgeführt, wenn
eine Anzeige eines komprimierten Bildes gewünscht wird. Nach dem Dekomprimierungsstartschritt 150 wird
bei Schritt 152 ein komprimierter Block von Bilddaten zur
Dekomprimierungsverarbeitung erhalten. Typischerweise ist der komprimierte
Block in einer Datei auf einem Computersystem gespeichert, wird
die Datei geöffnet
und wird der erste komprimierte Block von Bilddaten von der Datei
gelesen. Bei Schritt 154 werden die Größe des komprimierten Blocks
und der Maskenwert aus den ersten zwei Speicherstellen des komprimierten
Blocks extrahiert. Bei Schritt 156 werden die letzten RGBA-Werte
in dem komprimierten Block extrahiert und an alle Stellen des unkomprimierten
Blocks geschrieben, um durch die Dekomprimierungsverarbeitung ausgegeben
zu werden. Durch ein anschließendes
Schreiben an selektierte Stellen in dem unkomprimierten Block wird
die Standardfarbe überschrieben,
da aber diese Farbe die am häufigsten
verwendete Farbe in dem Block ist, werden durch diesen Schritt Speicher
sowie Dekomprimierungsverarbeitungszeit eingespart. Bei Schritt 158 wird
die erste Farbe des komprimierten Blocks selektiert. Die RGBA-Werte
für diese Farbe
werden aus dem komprimierten Block unter Verwendung des Maskenwertes
bei Schritt 160 extrahiert. Als nächstes wird bei Schritt 162 der
Satz von Gruppenflags für
diese Farbe aus dem komprimierten Block extrahiert. Falls der Satz
von Gruppenflags irgendwelche gesetzten Bit hat (die angeben, daß diese
Farbe in der entsprechenden Zeile des Blocks vorkommt), wird dann
bei Schritt 164 ein Satz von Zeilenflags für diese
Farbgruppe aus dem komprimierten Block extrahiert. Die Verarbeitung
dieser Farbe wird über
die Verbindung 10A mit Schritt 166 in 10 fortgesetzt.
-
Bei Schritt 166 werden die
RGBA-Werte an selektierten Stellen in den unkomprimierten Block
geschrieben, die durch die Kombination aus den Gruppen- und Zeilenflags
angegeben sind, und zwar für
alle Spalten in dem Satz von Zeilenflags mit gesetzten Bits. Es
sei daran erinnert, daß jeder
Satz von Zeilenflags das Vorhandensein der gegenwärtigen Farbe
in Spalten der gegenwärtigen
Zeile des Blocks angibt. Falls ein Spaltenbit für eine besondere Zeile gesetzt
ist, werden dann die RGBA-Werte an die Stelle für das selektierte Pixel in
dem unkomprimierten Block geschrieben. Falls bei dem Testschritt 168 weitere
Sätze von
Zeilenflags für
die gegenwärtige
Farbgruppe existieren, wird als nächstes dann der JA-Pfad 170 über die
Verbindung 9C zu Schritt 164 in 9 gewählt,
um den nächsten
Satz von Zeilenflags für
diese Farbe zu erhalten. Anderenfalls wird der NEIN-Pfad 172 zu
dem Testschritt 174 gewählt.
Falls bei diesem Schritt weitere Farben übrig sind, die für den gegenwärtigen Block
zu verarbeiten sind, wird dann der JA-Pfad 176 über die
Verbindung 9B zu Schritt 158 in 9 zum Selektieren der nächsten Farbe
gewählt.
Anderenfalls wird der NEIN-Pfad 178 zu dem Testschritt 180 gewählt. Falls
bei dem Testschritt 180 keine weiteren Blöcke vorhanden
sind, die für
dieses komprimierte Bild zu verarbeiten sind, wird dann der JA-Pfad 182 über die
Verbindung 9A zu Schritt 152 in 9 zum Erhalten des nächsten zu verarbeitenden komprimierten
Blocks gewählt.
Falls alle Blöcke
des Bildes verarbeitet worden sind, wird dann der NEIN-Pfad 184 zu
dem Endschritt 186 gewählt
und ist die Dekomprimierungsverarbeitung vollendet.
-
Tabelle II beschreibt einen Pseudocode
zum Dekomprimieren eines zuvor komprimierten Blocks von Bilddaten
gemäß der vorliegenden
Erfindung. Eine Implementierung des Dekomprimierungsalgorithmus
der vorliegenden Erfindung in der Sprache "C" ist
in Anhang B offenbart.
-
-
-
Die vorliegende Erfindung wurde auf
mehrere Muster-Bitmap-Bilder mit einem Standardmaskenwert von 16D
angewendet (das heißt,
vier Bits wurden bei jedem R-, G-, B-, A-Wert maskiert). So wurde
eine verlustbehaftete Komprimierung getestet, aber der Maskenwert
wurde so festgelegt, daß keine
Verschlechterung der Bildqualität
spürbar
war. Zuerst wurde das Musterbild komprimiert, und dann wurde die
komprimierte Darstellung des Bildes dekomprimiert. Die Musterbilder
hatten eine Größe von 640 × 480 Pixels,
wobei jedes Pixel durch 32 Bit dargestellt wurde. Die Komprimierungs-/
Dekomprimierungsoperationen wurden während der Ausführung durch
einen PC auch zeitlich erfaßt.
Für Vergleichszwecke
wurden Komprimierungs- und Dekomprimierungsoperationen an denselben
Bildern auch unter Verwendung einer Implementierung des JPEG-Standards
ausgeführt.
Die exakten Zeitwerte, die unten angegeben sind, würden variieren,
wenn diese Algorithmen auf verschiedenen Computersystemen implementiert
würden,
aber die wesentliche Maßzahl
ist die reaktive Differenz zwischen den Resultaten der gegenwärtigen Erfindung
und dem JPEG-Standard. Tabelle III zeigt die Resultate der Komprimierungs-
und Dekomprimierungsoperationen, wobei R das resultierende Komprimierungsverhältnis ist
und T die verstrichene Zeit in Sekunden zur Komprimierung und Dekomprimierung
darstellt.
-
-
Gemäß diesen Testresultaten ist
das Komprimierungsverhältnis
für die
vorliegende Erfindung besser als das Komprimierungsverhältnis für den JPEG-Standard,
wenn auch nicht signifikant. Die Gesamtzeit, die zum Komprimieren
und Dekomprimieren eines Bildes benötigt wird, ist bei Anwendung
der vorliegenden Erfindung im Vergleich zu dem JPEG-Standard jedoch
bedeutend kürzer
(hier beträgt
die Verarbeitungszeit bei der vorliegenden Erfindung etwa 1,3% der
Verarbeitungszeit bei dem JPEG-Standard für jedes Bild).
-
Oben ist eine Software-Implementierung
der vorliegenden Erfindung beschrieben. 11 ist ein Diagramm einer Software-Ausführungsform
der vorliegenden Erfindung bei Implementierung auf einem Computersystem.
Ein unkomprimiertes Bild 180 wird auf einer Speichervorrichtung 182 gespeichert,
die mit einem Computersystem 184 gekoppelt ist. Das Computersystem 184 führt eine
Komprimierungsfunktion 186 gemäß der vorliegenden Erfindung
aus, um ein unkomprimiertes Bild 180 zu lesen und zu komprimieren.
Die Resultate der Komprimierungsoperation werden in dem komprimierten
Bild 188 der Speichervorrichtung 182 zur künftigen
Verwendung gespeichiert. Anschließend führt dasselbe Computersystem 184,
oder ein verschiedenes Computersystem (nicht gezeigt), eine Dekomprimierungsfunktion 190 gemäß der vorliegenden
Erfindung aus, um ein komprimiertes Bild zu lesen und zu dekomprimieren.
Das dekomprimierte Bild wird zu einer Anzeige 192 zur Darstellung
für einen
Benutzer des Computersystems gesendet.
-
Obwohl die oben beschriebenen Komprimierungs-
und Dekomprimierungsverfahren in Form von Software implementiert
werden können,
die auf einem Mehrzweckcomputer ausführt wird, ist die bevorzugte
Ausführungsform
der vorliegenden Erfindung eine Multiprozessor-Hardware-Implementierung,
die von der inhärenten
Parallelität
profitiert, die bei dem vorliegenden Verfahren zur Verfügung steht.
Obgleich sowohl die Komprimierung als auch die Dekomprimierung wichtig
ist, wird in der Praxis ein Bild typischerweise einmal komprimiert,
aber viele Male dekomprimiert. Deshalb ist die Dekomprimierungsgeschwindigkeit
sehr wichtig. Falls die Dekomprimierungsschritte parallel auf mehreren
Verarbeitungsvorrichtungen implementiert werden können, kann
eine Gesamtdekomprimierungszeit extrem reduziert werden. Der Dekomprimierungsprozeß ist in
dem in Tabelle IV gezeigten Pseudocode allgemein beschrieben.
-
-
Auf der Basis des Pseudocodes von
Tabelle IV sind drei mögliche
Ebenen vorhanden, um RGBA-Vierergruppen-Schreiboperationen während einer
Dekomprimierungsverarbeitung gleichzeitig auszuführen, nämlich eine für jede der
drei inneren Steuerschleifen. Jede RGBA-Vierergruppen-Schreiboperation
ist von allen anderen Schreiboperationen unabhängig, so daß mehrere Verarbeitungsvorrichtungen
parallel verwendet werden können,
um das Original-Bitmap-Bild von der komprimierten Datendarstellung
zu rekonstruieren. Falls zum Beispiel acht Farben in einem Block
von Bilddaten vorhanden sind, könnten
dann acht Prozessoren, die jeweils eine verschiedene Farbe verarbeiten,
parallel arbeiten, um die RGBA-Vierergruppen für die einem gegebenen Prozessor
zugeordnete Farbe zu schreiben. Solch ein System sieht eine erhöhte Dekomprimierungsgeschwindigkeit
für Multimedia-PC-Anwendungen
vor.
-
In der bevorzugten Hardware-Ausführungsform
wird eine Dekomprimierungsvorrichtung in einem M*N-Verteiler mit
einem 32 Bit breiten Datenweg dargestellt. 12 ist ein Diagramm eines M*N-Verteilers, der
zur Dekomprimierung verwendet wird. Die Anzahl von Eingangsleitungen
zu dem Verteiler (M) ist auf acht festgelegt, und die Anzahl von
Ausgangsleitungen (N) ist auf 64 festgelegt. Die Ausgangsleitungen
sind mit konsekutiven Speicherelementen (nicht gezeigt) verbunden.
Die Anzahl von Eingangsleitungen M sollte der tatsächlichen
Anzahl von Farbgruppen in dem Bild entsprechen. Durch das Festlegen
von M auf acht und unter der Annahme, daß die Anzahl von Farbgruppen
in dem Bild größer als
acht ist, kann der gesamte Satz von Farbgruppen jedoch in Untersätze von
acht geteilt werden und können
die Untersätze
sequentiell verarbeitet werden. Bei diesem Verarbeitungsniveau würde keine
Parallelität
zur Anwendung kommen.
-
Für
jeden gegenwärtigen
Untersatz von Farbgruppen sendet der Verteiler Daten von den M Eingängen gemäß den Werten von
Elementen in einer Matrix zu den N Ausgängen. Für jeden Untersatz von Farbgruppen wird
ein Verteiler verwendet. Die Matrix wird mit den Informationen gebildet,
die durch die Sätze
von Gruppenflags und die Sätze
von Zeilenflags vorgesehen sind. Die Reihe i der Matrix A = {aij}, 1 <=
i <= 8, 1 <= j <= 64, die dem Eingang
i entspricht, kann wie folgt konstruiert sein: aij =
1, falls P = 1 und Q = 1 ist, anderenfalls ist aij =
0; wobei P der Wert des Bits m in dem Satz von Gruppenflags entsprechend
der Farbgruppe i ist; m = (int) (j/8) ist Q der Wert des Bits n
in dem Satz von Zeilenflags für
m entsprechend der Farbgruppe i ist; und n = j%8 ist (d. h., Rest
nach Division durch 8).
-
13 ist
ein Blockdiagramm einer Dekomprimierungsschaltungsanordnung. Komprimierte
Daten 200 sind in einem Lokalspeicher 202 gespeichert.
Der Lokalspeicher überträgt komprimierte
Daten über
M Eingangsleitungen zu wenigstens einem M × N-Verteiler 204,
wo die Eingabe-/Ausgabematrix durch Verschiebungsoperationen an
den Daten gebildet wird. Es sind keine Additions- oder Multiplikationsoperationen
erforderlich, und es werden keine Gleitkommazahlen manipuliert.
Der M × N-Verteiler 204 überträgt alle
Daten von den M Eingängen
zu den jeweiligen N Ausgängen
und in einen schnellen 64 × 32-Lokalspeicher 206.
Unkomprimierte Daten 208 werden aus dem schnellen 64 × 32-Lokalspeicher
zur weiteren Verarbeitung ausgelesen, wie etwa zur Anzeige des unkomprimierten
Bildes auf einem Computermonitor.
-
Die Erfindung ist in einem Modus
beschrieben worden, der zur Zeit als ihr bester betrachtet wird,
und es ist klar, daß sie
verschiedene Abwandlungen zuläßt. Daher
ist der Schutzumfang in den beigefügten Ansprüchen angegeben, die die Erfindung
definieren.
-
ANHANG A
-
Implementierung des Algorithmus zum
Komprimieren eines Blocks von Bilddaten in der Sprache C
-
ANHANG B
-
Implementierung des Algorithmus zum
Dekomprimieren eines zuvor komprimierten Blocks von Bilddaten in
der Sprache C