-
Wenn
Daten übertragen
oder gespeichert werden müssen,
werden sie üblicherweise
zuerst komprimiert, um die Übertragungszeit
oder die Speicheranforderung zu reduzieren. Dieses gilt insbesondere
für Bilddaten,
welche aus vier Farbauszügen
mit jeweils 8-Bit
Pixeln bestehen.
-
Ein
Verfahren zur Kompression ist eine "hierarchische Vektorquantisierung" (HVQ), in welcher ein
Block mit Daten auf ein einziges Codewort in einer Anzahl von Schritten
reduziert werden kann. Dieses Verfahren ist in dem US Patent Nr.
5,602,589 beschrieben. Diese Prozedur kann am deutlichsten unter
Verwendung eines numerischen Beispiels in Verbindung mit 1a dieses
Patentes erläutert
werden. Es werde angenommen, dass ein Block von 2×4 Pixeln
mit 8 Bit pro Pixel auf eine 9-Bit Zahl zu komprimieren ist. Zuerst
wird jedes Pixelpaar auf eine Nachschlagetabelle (LUT) einer Stufe 1,
die 9-Bit Codeworte enthält,
angewendet, wobei jedes Codewort einem Zwei-Pixel Bitmuster zugeordnet
ist. Die Tabelle ist so aufgebaut, dass, wenn eine genaue Übereinstimmung
der Eingangspixelbits nicht verfügbar ist,
dann stattdessen ein Codewort in Verbindung mit der nächstliegenden Übereinstimmung
ausgegeben wird. Das letztliche Ausgangssignal dieser Stufe 1 sind
vier Codeworte, wovon jedes die nächstliegende Übereinstimmung
mit dem Bitmuster der zwei Eingangspixel beschreibt. Da eine genaue Übereinstimmung
häufig
nicht möglich
ist, ist diese Kompression inhärent
in einem gewissen Umfang verlustbehaftet. Das Ausgangssignal der
ersten Stufe sind vier 9-Bit Codeworte.
-
Unter
der Annahme, dass dieser Kompressionsgrad nicht ausreicht, werden
diese vier Codeworte, wovon jedes das Bitmuster eines Blockes von
1×2 Pixeln
repräsentiert,
anschließend
an Tabellen einer Stufe 2 angelegt, was zu insgesamt zwei
9-Bit Ausgangscodeworten führt,
welche jeweils das Bitmuster eines Blockes von 2×2 Pixeln darstellen. Wenn
die Kompression immer noch unzureichend ist, werden diese zwei an
eine Tabelle der Stufe 3 angelegt, um das endgültige Ausgangswort
zu erzeugen, welches einem Block mit 2×4 Pixeln zugeordnet ist. Man
kann nun sehen, dass dieses Verfahren dahingehend hierarchisch ist,
dass mehrere Stufe verwendet werden, es Vek toren beinhaltet, da
die Eingangspixel eine Richtungsbeziehung miteinander haben, und
es dahin quantisiert ist, dass eine Anzahl von Pegeln implementiert
werden kann, um jeden beliebigen Grad an Kompression zu erzielen.
-
Zur
Dekompression wird jedes Codewort einfach an eine LUT mit 256 K × 64 Bit
angelegt, welche das Ausgangsmuster des gesamten 8-Pixel Blockes
ausgibt.
-
US-A-5
517 327, EP-A-0 358 815 und EP-A-0 856 988 (welche einen Teil des
Stands der Technik gemäß Artikel
54(3) EPC darstellen) offenbaren alle Systeme zum Komprimieren von
Bilddaten, indem Blöcke
aus Datenpixeln verwendet werden, jeder Block als eine einzelne
Zahl unterschiedlicher Typen von Daten klassifiziert wird, und dann
der Block dementsprechend komprimiert wird. Ein Problem mit diesen
bekannten Systemen besteht darin, dass sich Bilddaten nicht immer
leicht in die gewählte
Blockgröße unterteilen
lassen.
-
Gemäß der vorliegenden
Erfindung stellen wir ein Verfahren zum Komprimieren von Blöcken aus
Pixeln bereit, wobei jeder Block einen Druckhinweis enthält, der
den Datentyp innerhalb des Blockes als einen von Text, Farbverlauf
und Grafik bestimmt, wobei das Verfahren die Schritte aufweist:
Verwenden
des Hinweises, um eine von wenigstens drei Codierungseinrichtungen
zum Codieren des Blockes zu verwenden, und
Verwenden der ausgewählten Codierungseinrichtung zum
Codieren des Blockes, dadurch gekennzeichnet, dass der Hinweis den
Block als den einen oder anderen Datentyp oder als einen Grenzblock
bestimmt, der zwei Datentypen enthält.
-
In
einem Drucksystem, welches HVQ verwendet, werden die Daten an den
verlustbehafteten Kompressor in Blöcken aus Pixeln geliefert,
wobei jeder Block ein Text, ein Farbverlauf, ein Raster usw. ist.
Damit sich der Kompressor selbst optimal für den Typ der gerade empfangenen
Daten konfigurieren kann, kann das Eingangsende an den Kompressor eine
Maske senden, welche die Grenzen zwischen den unterschiedlichen
Typen von Daten bestimmt, und Druckhinweise, welche spezifizieren,
welche Konfiguration für die
Daten verwendet werden sollte, die in die jeweilige Maske fallen.
In diesem System müssen
die Maskenränder
zu den Blockrändern
ausgerichtet sein.
-
Das
System wird durch ein System zur Ermittlung, ob eine Grenze innerhalb
eines Blockes vorhanden ist, welche als ein Übergangsblock bezeichnet werden
kann, verbessert. Beispielsweise wird, wenn eine Grenze zwischen
einem Textzeichen und einem Farbverlaufsbild durch einen Block verläuft, dann
ein Druckhinweis an den Kompressor gesendet und es können für Übergangsblöcke optimierte
Tabellenwerte für
diesen Block gewählt
werden. Dieses würde
das Systemverhalten verbessern, indem es dem Kompressor ermöglicht,
mit weniger Verlust zu arbeiten.
-
In
einer Implementation ermittelt der Prozess, ob ein zu komprimierender
Block von Pixeln entweder zwei Typen von Bilddaten aufweist oder eine
Grenze zwischen den Typen enthält,
so dass der zum Komprimieren des Blockes verwendete verlustbehaftete
Kompressor für
den ersten und zweiten Datentyp oder für den Übergang zwischen den zweien
optimiert wird.
-
Einige
Beispiele von Verfahren gemäß der vorliegenden
Erfindung werden nun unter Bezugnahme auf die beigefügten Zeichnungen
beschrieben, in welchen:
-
1 ein
HVQ-Codierer ist, welcher einen parallelen Fehlerkanal besitzt;
-
2 der
Decodierer für
die Anordnung von 1 ist;
-
3 eine
Ein-Kanal-Anordnung zum Codieren eines Pixels ist, das in seine
höchst- und niedrigstwertigen
Bits aufgeteilt ist;
-
4 eine
Ein-Kanal-Anordnung zum Codieren eines Pixels ist, das in seine
höchst- und niedrigstwertigen
Bits aufgeteilt ist;
-
5 eine
Zwei-Kanal-Anordnung zum Codieren eines Pixels ist, das in seine
höchst- und niedrigstwertigen
Bits aufgeteilt ist;
-
6 ein
Decodierer für
den Codierer von 5 ist;
-
7 drei
Teile einer Rotation oder Spiegelabbildung eines HVQ-Kompression
verwendenden Bildes ist;
-
8 eine
Grenze zwischen Blöcken
unterschiedlicher Größer darstellt;
und
-
9 eine
Grenze zwischen Blöcken
derselben Größe darstellt.
-
Das
Basis HVQ-System kann verbessert werden, indem ein Fehlerkanal gemäß Darstellung
in 1 hinzugefügt
wird. In dem oberen Kanal wird ein Grauskalenbyte-Bild 16 in
der üblichen
Weise an einen HVQ-Codierer 10 angelegt, dessen Ausgangssignal
verlustlos in einem LZ-Codierer 11 komprimiert wird, und
das Ergebnis an den Decodierer üblicherweise
in der Form von 8 bis 10-Bit Worten gesendet wird.
-
Zusätzlich wird
das Ausgangssignal des HVQ-Codierers an einen Decodierer 12 in
einem Abtastzeilenformat gesendet, welcher eine Version des ursprünglichen
Byte-Bild erzeugt, welches sich von dem Original aufgrund von Fehlern
unterscheiden kann, die möglicherweise
durch den verlustbehafteten Codierer induziert werden. Die zwei
Byte-Bilder werden
dann Pixel für
Pixel subtrahiert, 13, um Fehlerterme zu erzeugen, welche,
wenn sie auf das Ausgangscodewort addiert werden, das ursprüngliche Bytebild
erzeugen. Diese Subtraktion kann auch unter Verwendung eines Exklusiv-ODER-Gatters durchgeführt werden,
welches einfacher und schneller ist und kein Vorzeichenbit erfordert.
Diese Fehlerterme, jeder eine vorzeichenbehaftete Größe mit 8 Bit
Breite oder weniger, kann dann in einem LZ-Codierer 15 komprimiert
werden und parallel zu dem Originalausgangssignal an den Decodierer
gesendet werden. Je größer der
Fehlerterm ist, desto kleiner ist das Kompressionsverhältnis. In
der Praxis sind kleine Fehler visuell nicht erkennbar. Um die Verschlechterung
des Kompressionsverhältnisses
zu begrenzen, kann der Fehler auf wenige höchstwertige Bits, drei beispielsweise,
im Quantisierer 14 begrenzt werden. Normalerweise ist der
Anteil eines Fehlers für
einen Pixel nicht groß genug,
um in den wenigen MSB's
zu erscheinen, wobei in diesem Falle überhaupt kein Fehlerterm vorliegt.
-
Der
Decodierer für
den quantisierten Fehler ist in 2 dargestellt.
Die komprimierten Codeworte werden im Decodierer 21 LZ-decodiert
und im Decodierer 22 HVQ-decodiert, um einen Term für den Addierer 23 zu
erzeugen. Die komprimierten quantisierten Fehler werden im Decodierer 24 LZ-decodiert und
als der andere Term an den Addierer 23 angelegt, dessen
Ausgangssignal ein Ausgangsvideosignal ist. Der Addierer 23 kann
entweder ein Addierer sein, der ein Vorzeichenbit und sieben Bits
addiert oder eine Exklusiv-ODER-Gatter, wenn eines zum Erzeugen
des Fehlerterms in dem Codierer verwendet wurde.
-
3 stellt
die Anordnung dar, wenn ein einzelnes Codewort 31 in die
höchst-
und niedrigstwertigen 32, 33 aufgeteilt wird und
wenn nur die niedrigstwertigen Bits komprimiert werden. In diesem Falle
werden die Bits 0 bis 4 durch den verlustbehafteten Kompressor 35 gesendet,
während
die Bits 5 bis 7 nicht gesendet werden. Beide
werden dann unter Verwendung der verlustlosen LZ-Kompression komprimiert
und an den in 4 dargestellten Decodierer ausgegeben.
Hier werden wiederum beide Kanäle
LZ-dekomprimiert 41, 42,
während
nur die LSB's HVQ-decodiert
werden, 43. Die zwei sich ergebenden Anteile werden dann
miteinander exklusiv-ODER-verknüpft, 44,
um an die Decodierungsnachschlagetabelle angelegt zu werden.
-
5 ist
ein System, in welchem ein einzelnes Pixel in ein niedrigstwertiges
Segment und ein höchstwertiges
Segment aufgeteilt wird, und in welchem ein getrennter und unterschiedlicher
Kompressionsprozess 54 bis 57 für jedes
Segment angewendet wird, wobei die niedrigstwertigen Bits stärker komprimiert
werden. Das ursprüngliche
Pixel wird in seine höchstwertigen
Bits 52 und niedrigstwertigen Bits 53 getrennt.
Das Ergebnis besteht darin, dass die höchstwertigen Bits, welche die
wichtigsten sind, weniger komprimiert werden, während die Kompression für die niedrigstwertigen
Bits ein besseres Kompressionsverhältnis aufweist. Eine programmierbare Nachschlagetabelle
könnte
verwendet werden, um das Eingangspixel in beliebige andere zwei
Segmente als in die dargestellte 3-5 Unterteilung zu unterteilen.
-
6 ist
der Decodierer für
den Codierer von 5. Die zwei komprimierten Ausgangssignale von 5 werden
an LZ-Decodierer 61, 62 angelegt und HVQ-decodiert, 63, 64.
Dann werden beide an ein Exlusiv-ODER-Gatter 65 angelegt,
um das gesamte Pixel zusammenzusetzen. Natürlich würde, wenn der Codierer irgendwelche
andere Kombinationen von Codierern verwenden hat, der Decodierer dieselbe
Form der Decodierung verwenden. D.h., dass allgemeiner die Datenworte
in einem String in mehr oder weniger wichtige Bits unterteilt werden können, um
parallele Strings zu erzeugen, und dann mittels beliebigen zwei
Kompressionsverfahren komprimiert werden, wobei die größere Kompression
auf die niederwertigen Bits angewendet wird.
-
Eine
HVQ-Kompression ist leicht an eine Bildrotation oder Spiegelabbildung
gemäß Darstellung
in 7 anzupassen. Der Prozess wird hier unter Verwendung
des Beispiels eines Originalbildes dargestellt, das vier Pixel hoch
und sechzehn Pixel breit ist, und um 90 im Uhrzeigersinn gedreht
und gespiegelt werden muss.
-
Der
Schritt 1 ist der übliche
Kompressionsprozess zur Reduzierung der 8-Pixel Segmente auf acht
Codeworte Cw1 bis Cw8. Der Schritt 2 ist der Schritt der
Neuanordnung der Codeworte in der gedrehten und gespiegelten Reihenfolge.
Diese Hardware kann in der Form einer Verdrahtung vorliegen, in
welcher das zweite Eingangs-Wort, beispielsweise Cw2, mit dem dritten
Ausgangs-Wort gemäß Darstellung
verbunden ist. Die Stufe 2 kann verschiedene Verdrahtungssätze aufweisen,
wobei jeder Satz eine unterschiedliche Drehung liefert. Schließlich verwendet
der Decodierungsschritt 3 eine Nachschlagetabelle, um ein
Pixelmuster für
jedes Segment zu erzeugen, das korrekt orientiert ist. Hier können wiederum
mehrere Tabellen verwendet werden, um verschiedene Orientierungen
zu erzeugen.
-
Druckhinweise
können
in die von dem Benutzer in der Ursprungsseitenbeschreibungssprache
gelieferten Ursprungsdaten eingebettet sein, um dem Drucker anzuzeigen,
wie die Daten am besten zu drucken sind. Beispielsweise kann ein
Hinweiswort aus zwei Bits in der Länge bestehen und eine von vier
Möglichkeiten
anzeigen, dass die nachstehenden Daten Text, ein Farbverlauf, Grafik
usw. sind. Beispielsweise kann, wenn der Drucker Daten empfängt, die
aus einer computergenerierten Grafik stammen, dieser einen anderes
Halbtonraster verwenden als er verwendet werden würde, wenn
die Ursprungsdaten aus einer Fotografie eingelesen würden.
-
Druckhinweise
können
zu jedem HVQ-Kanal gemäß Darstellung
in 5 hinzugefügt
werden. Es werde angenommen, dass für jeden 4-Pixel Block, der
in den HVQ-Codierer 54 eintritt, ein Codewort mit einer
Länge von
9 Bits erzeugt wird, das in zwei 8-Bit Bytes enthalten ist, so dass
die ersten 8 Bits in dem ersten Byte enthalten sind und das letzte
Bit in dem zweiten Byte enthalten ist. Dann wird der 2-Bit Hinweis
hinzugefügt.
Nun hat jedes Codewort plus Hinweis 11 Bits, die immer noch in 2
Bytes enthalten sind. Der LZ-Codierer
prüft einen
String aus Bytes, möglicherweise
mit 256 Byte Länge
und ermittelt die Lage und Größe der neuesten
identischen Musterübereinstimmung.
In dem Maße,
in dem sich der Hinweis ein- oder zweimal innerhalb dieses Strings
verändert,
liegt ein leicht verringerter Kompressionsgrad im Vergleich zu dem
Maß vor,
der sich ohne Hinweise ergeben hätte.
Jedoch liegt in dem Maße,
dass sich der Hinweis während
dieser Zeit nicht verändert,
keinerlei Verringerung vor. Die Folge ist, dass Druckhinweise nach
einem HVQ-Kompressor, jedoch vor dem verlustlosen Kompressor mit
sehr geringer Auswirkung auf das Kompressionsverhältnis hinzugefügt werden
könne.
Auf der Ausgangsseite werden, nachdem die Codeworte LZ-dekomprimiert
sind, jedoch vor der Decodierung werden die Hinweise für eine spätere Nutzung
extrahiert.
-
Die
Verluste eines HVQ-Kompressors können
weiter durch Auswählen
von Codeworten und von Ausgabedatenmustern minimiert werden, welche die
beste Möglichkeit
einer Übereinstimmung
mit den tatsächlichen
Eingangsdatenmustern haben. Beispielsweise werde zuerst Text betrachtet.
Wenn Textpixel in Gruppen von 4×2
Pixeln codiert sind, und die vier Eingangspixel in einer Linie schwarz,
dunkelgrau, hellgrau und weiß sind,
und das Eingangsvideosignal eingescannter Text war, waren die Daten
am wahrscheinlichsten ursprünglich
eine Grenze zwischen einem schwarzen Buchstaben und einem weißen Zwischenraum,
so dass das Ausgangspixelmuster schwarz, schwarz, weiß, weiß sein könnte. Andererseits
sind, wenn die ursprünglichen
Eingangsdaten eine eingescannte computergenerierte Grafik war, die
vier Pixel wahrscheinlicher eine allmähliche Abnahme in der Dichte
von schwarz nach weiß.
Die tatsächliche
Ermittlung der Codierercodeworte und Muster in der Decodierernachschlagetabelle
werden durch statistische Analyse ermittelt. Eine repräsentative
Gruppe von Text und Grafikdokumenten wird durch ein Testprogramm
geleitet und die besten Werte für
jeden Typ erzeugt.
-
Eine
Komplikation ergibt sich, wenn eine Grenze durch einen Eingangsblock
von Pixeln verläuft,
wobei in diesem Falle weder Text- noch Grafikwerte für den gesamten
Block verwendet werden können.
Die Lösung
besteht darin, einen dritten Satz von Codeworten und Mustern zu
liefern, welche spezifisch für
diese Grenzbedingung erzeugt werden. In diesem Falle würde ein
Satz von Dokumenten, welcher sowohl Text als auch Grafiken enthält, analysiert werden,
um einen Satz von Mustern zu erzeugen, welcher verwendet würde, wenn
ermittelt wird, das eine Grenz-, Misch-Bedingung innerhalb des Blockes vorliegt.
-
Die
Grenzbedingung wird gemessen, indem die Druckhinweise beobachtet
werden. Beispielsweise ist ein rechteckig eingescanntes Bild typischerweise
auf einer Textseite durch seine x, y Koordinaten bestimmt. Wenn
der Rasterausgangs-Scannerstrahl innerhalb der Koordinaten liegt,
zeigen die Druckhinweise dem Drucker an, welche Codeworte, Nachschlagetabelleneinträge und Raster
zu verwenden sind. Wenn sich der Hinweis beispielsweise von Bild auf
Text innerhalb des Blockes ändert,
weiß der
Codierer dann, dass eine Grenze innerhalb des Blockes vorliegt.
-
In
allen Folgen muss die Blockgröße erhalten bleiben. 8 ist
ein Beispiel eines Übergangs
zwischen Text und Farbverlauf. Da unterschiedliche Blockgrößen in HVQ-Codierern für unterschiedliche Arten
von Daten verwendet werden können,
ist die Blockgröße für den Text
hier mit 2×2
Pixel dargestellt, um größere Kantendetails
zu ermöglichen,
während die
Blockgröße für einen
Farbverlauf mit 4×2
dargestellt ist, um eine größere Kompression
zu ermöglichen.
-
Wenn
eine Grenze innerhalb eines Blockes von 2×2 Pixeln vorhanden ist, wird
dieser Block unter Verwendung von Grenzwerten codiert und decodiert. Zusätzlich werden
alle Farbverlaufspixel rechts von der Grenze, wie z.B. das Pixel
81, ebenfalls als ein Grenzpixel, falls erforderlich, behandelt,
so dass alle restlichen Pixel rechts von der Grenzlinie innerhalb von
Blöcken
mit 4×2
Pixel liegen. Ebenso werden in 9, welche
eine Grenze zwischen Blöcken
von 4×2
Pixeln aus Text und Farbverlauf darstellt, Grenzblöcke mit
2×2 Pixeln
in Paaren verwendet, so dass alle restlichen Blöcke 4×2 Blöcke sind.