HINTERGRUND DER ERFINDUNG
-
Die Erfindung betrifft allgemein ein
Bilddatenkompressionsverfahren, das auf Bildcodierungsvorrichtungen anwendbar
ist, um n-Bit-Bilder mit Zeichen, Graphikmustern oder
dergleichen (die nachfolgend als Zeichenbilder bezeichnet
werden) mit hohem Wirkungsgrad reversibel zu codieren.
-
Allgemein gesagt, ist es zum Erzielen eines guten
Zeichenbildes mit relativ feiner Auflösung erforderlich, Bildpixel
in mehreren Graustufen darzustellen. Ein Zeichenbild weist
im allgemeinen Zeichenabschnitte, weißen Hintergrund und
Kantenabschnitte auf, die an der Grenze zwischen den
Zeichenabschnitten und dem weißen Hintergrund liegen. Um Pixel
eines Zeichenbildes in mehreren Graustuf en darzustellen,
werden den Bildpixeln jeweilige Werte zugeordnet, z.B. 0 für
die Zeichenabschnitte, (2n-1) für den weißen Hintergrund, 1
für (2n-2) für die Kantenabschnitte, mit n> 2. Derartige n-
Bit-Bilddaten werden dann codiert.
-
Derartige Pixelwerte werden dadurch erhalten, daß von einem
Scanner, einer Kamera oder dergleichen gelesene Bilddaten
vorverarbeitet werden.
-
Fig. 10 zeigt ein bekanntes Bilddaten-Kompressionsverfahren,
wie es zum Codieren von Pixelwerten verwendet wird. Beim
bekannten Verfahren werden n-Bit-Bilddaten in n Bitebenen
unterteilt und jede Bitebene wird durch ein
Lauflängen-Codierverfahren codiert. Gemäß dem Lauflängen-Codierverfahren kann
ein langer Laufso komprimiert werden, daß statt des
Wiederholens derselben Daten im Lauf ein die Lauflänge anzeigender
Code und ein den Typ oder den Wert der wiederholten
datenanzeigender Code eingesetzt werden, so daß Datenkompression
erzielt wird.
-
Gemäß dem bekannten Datenkompressionsverfahren unter
Verwendung des in Fig. 10 dargestellten Verfahrens zum Unterteilen
in Bitebenen sind die Binärdaten an Pixelpositionen, die
einen Zeichenabschnitt repräsentieren Nullen (0) für alle
Bitebenen und die Binärdaten an Pixelpositionen, die weißen
Hintergrund repräsentieren sind Einsen (1) für alle
Bitebenen. D.h., daß jedes Bit in den Bitebenen denselben binären
Datenwert an Pixelpositionen von Bildabschnitten aufweist,
die keine Kantenabschnitte sind. Da jedoch die
Kantenabschnitte eine sehr begrenzte Fläche im Bild einnehmen,
weisen die Bitebenen einander sehr ähnliche Muster auf. Daher
ist es ineffizient, diese Bitebenen getrennt unter
Verwendung der Lauflängencodierung zu codieren, da zuviel
Redundanz erforderlich ist.
ZUSAMMENFASSUNG DER ERFINDUNG
-
Es ist eine Aufgabe der Erfindung, ein
Datenkompressionsverfahren zu schaffen, durch das die Redundanz beim obigen
Datenkompressionsverfahren beseitigt wird, und durch das
wirkungsvolle Codierung ausgeführt werden kann.
-
Erfindungsgemäß wird bei einem
Bilddaten-Kompressionsverfahren, das beim Codieren digitaler Bilddaten verwendbar ist,
deren Pixel durch n Bits repräsentiert wird, und die 2n
verschiedene Lauftypen aufweisen, ein Wert, während die
Lauflänge des aktuellen Laufs gezählt wird, vorhergesagt,
der den Lauftyp des aktuellen Laufs repräsentiert, welche
Vorhersage wiederholt wird, bis der vorhergesagte Wert mit
dem tatsächlichen Wert des Lauftyps des aktuellen Laufs
übereinstimmt; dann, wenn der vorhergesagte Wert nicht mit
dem tatsächlichen Wert des Lauftyps des aktuellen Laufs
übereinstimmt, die Lauflänge für einen imaginären Lauf mit
dem vorhergesagten Wert als Null angesehen wird und diese
Lauflänge des imaginären Laufs statistisch codiert wird;
andererseits dann, wenn der vorhergesagte Wert mit dem
tatsächlichen Wert übereinstimmt, die tatsächliche Lauflänge
des aktuellen Laufs statistisch codiert wird.
-
Beim erfindungsgemäßen Verfahren ist es, da die Lauftypen
repräsentierenden Werte durch Vorhersage erhalten werden,
abweichend vom üblichen Lauflängencodieren nicht
erforderlich, jeweiligen Lauflängendaten n-Bit-Information
hinzuzufügen, die Lauftypen repräsentiert. Daher kann, wenn die
Vorhersage mit hoher Genauigkeit ausgeführt wird, die
Gesamtdatenmenge verringert werden. Darüber hinaus kann selbst
dann, wenn viele fehlerhaft vorausgesagte Werte vorliegen
daß viele Lauflängendaten den Wert Null haben), die
Gesamtdatenmenge auch in diesem Fall verringert werden, da
diese Werte statistisch oder entropiecodiert sind, (d.h.,
daß dann, wenn viele Lauflängen vom Wert 0 vorliegen, ein
Code kurzer Länge solchen Lauflängendaten zugeordnet ist).
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Die Erfindung wird aus der nachfolgenden Beschreibung und
den Zeichnungen, die nur zur Veranschaulichung dienen und
demgemäß für die Erfindung nicht beschränkend sind,
deutlicher verständlich werden. In den Zeichnungen ist folgendes
dargestellt:
-
Fig. 1 ist ein Blockdiagramm, das einen Codierer zeigt, der
ein erfindungsgemäßes Bilddaten-Kompressionsverfahren
ausführt;
-
Fig. 1B ist ein Blockdiagramm eines Codierers, der ein
erfindungsgemäßes Bilddaten-Kompressionsverfahren ausführt;
-
Fig. 2 ist ein Beispiel für Laufdaten in einer Zeile eines
Vorlagenbildes;
-
Fig. 3 ist ein Diagramm, das ein Verfahren zum Vorhersagen
von Lauftypen veranschaulicht;
-
Fig. 4 ist ein Diagramm, das die Beziehung zwischen
Lauflängendaten und vorausgesagten Werten zeigt;
-
Fig. 5 ist ein Format komprimierter Daten;
-
Fig. 6 ist ein Flußdiagramm zum Codieren der Daten einer
Zeile gemäß einem Ausführungsbeispiel der Erfindung;
-
Fig. 7 ist ein Flußdiagramm zum Decodieren der Daten einer
Zeile gemäß einem Ausführungsbeispiel der Erfindung;
-
20 Fig. 8 ist ein Flußdiagramm, das die Verarbeitung in
Schritten veranschaulicht, die in den Fig. 6 und 7 mit
"Laufvorhersage" bezeichnet sind;
-
Fig. 9 ist ein Diagramm, das ein Verfahren zum Vorhersagen
von Lauftypen veranschaulicht; und
-
Fig. 10 ist ein bekanntes Codiersystem, bei dem
n-Bit-Bilddaten in n-Bildebenen unterteilt werden.
DETAILLIERTE BESCHREIBUNG
DER BEVORZUGTEN AUSFÜHRUNGSBEISPIELE
-
Fig. 1A zeigt ein Blockdiagramm eines Codierers zum
Umwandeln von n-Bit-Bilddaten in komprimierte Daten, und Fig. 1B
zeigt ein Blockdiagramm für einen Decodierer zum Rückwandeln
der komprimierten Daten zurück in die n-Bit-Bilddaten. Der
allgemein durch die Bezugszahl 10 gekennzeichnete Codierer
weist eine Lauflängen-Zählerschaltung 11, eine
Laufvorhersageschaltung 12 zum Vorhersagen des Lauftyps, eine
Entropiecodierungsschaltung 13 zur statistischen Codierung von
Lauflängendaten sowie eine Steuerschaltung 14 auf. Der
Decodierer 20 verfügt über eine Decodierschaltung 21 zum
Lesen codierter Daten, eine Laufvorhersageschaltung 22, eine
Bildwiederherstellschaltung 23 und eine Steuerschaltung 24.
-
Fig. 2 zeigt ein Beispiel für Pixelwertdaten in einer Zeile
eines ursprünglichen 2-Bit-Zeichenbildes. Die folgende
Beschreibung erfolgt unter Bezugnahme auf die Daten von Fig.
2.
-
Die 2-Bit-Bilddaten werden in horizontaler Richtung
ausgehend von einer oberen linken Ecke sequentiell abgetastet.
Bilddaten, die durch den Abtastvorgang erhalten werden,
werden in die Lauflängen-Zählerschaltung 11 eingegeben, in der
Lauflängen von Läufen vier verschiedener Typen gezählt
werden. Die Lauftypen sind gemäß den Werten der Läufe wie folgt
klassifiziert: 0, 1, 2 und 3.
-
Zeilendaten werden auf die folgende Weise codiert.
-
Der Typ und die Länge des ersten Laufs in jeder Zeile werden
abgespeichert. Der Typ jedes auf den ersten Lauf folgenden
Laufs in jeder Zeile wird vorhergesagt, bis ein
vorhergesagter Wert mit dem tatsächlichen Typwert übereinstimmt. Wenn
der vorhergesagte Wert sich vom tatsächlichen Wert eines
Lauftyps unterscheidet, wird der vorhergesagte Wert so
behandelt, als wäre es ein imaginärer Lauf vom Typ mit dem
vorhergesagten Wert, jedoch mit der Lauflänge Null. Daher
wird der Lauflängendatenwert "0" für den vorhergesagten Wert
aufgezeichnet, der nicht mit dem tatsächlichen Wert
übereinstimmt.
Ein derartiger Vorhersageprozeß wird wiederholt, bis
ein vorhergesagter Wert mit dem tatsächlichen Wert
übereinstimmt. Wenn ein vorhergesagter Wert mit dem Lauftyp
übereinstimmt, werden die tatsächlichen Lauflängendaten des von
der Lauflängen-Zählerschaltung 11 ermittelten Laufs
aufgezeichnet. Dann startet die Vorhersage für einen nächsten
Lauf. Wenn z.B., wie dies in den Fig. 2 und 4 dargestellt
ist, der vorhergesagte Wert 2 für den zweiten Lauf ist,
dessen tatsächlicher Wert 1 ist, wird der Wert 0 aufgezeichnet
oder als Lauflänge für den Lauftyp 2 abgespeichert. Da
jedoch der nächste vorhergesagte Wert 1 mit dem tatsächlichen
Wert 1 übereinstimmt, wird die Lauflänge "b" des aktuellen
Laufs gezählt und aufgezeichnet. Im vorliegenden Fall
existieren vier verschiedene Lauftypen, wie oben angegeben.
Demgemäß ist die Anzahl von Vorhersagen drei oder weniger.
-
Im folgenden wird ein Verfahren zum Vorhersagen der
Lauftypen im einzelnen unter Bezugnahme auf die Fig. 3 und 4
beschrieben.
-
Allgemein gesagt, weist ein Zeichenbild einen Aufbau auf,
bei dem ein Kantenabschnitt an der Grenze zwischen einem
Zeichen und einem weißen Hintergrund vorliegt. Daher kann
angenommen werden, daß dann, wenn ein Zeichenbild
abgetastet wird, Pixeln für den weißen Hintergrund Pixel für den
Kantenabschnitt und dann Pixel für den Zeichenabschnitt,
dann wieder Pixel für einen Kantenabschnitt und dann Pixel
für den weißen Hintergrund usw. folgen. Unter Verwendung
einer solchen Eigenart eines Zeichenbildes wird vorhergesagt,
daß die vier Lauftypen in jeder Zeile in der Reihenfolge 3,
2, 1, 0, 1, 2, ... auftreten. Jedoch ändert sich der erste
vorhergesagte Wert abhängig vom allerersten Lauf in jeder
Zeile, wie in Fig. 3 dargestellt.
-
Es ist zu beachten, daß Fig. 3 Fälle zeigt, bei denen der
vorhergesagte Wert durch eine einzige Vorhersage mit dem
tatsächlichen Laufwert übereinstimmt. Wenn mehr als zwei
Vorhersagen für denselben Lauf ausgeführt werden müssen,
sollte derselbe Vorhersagewert nicht wiederholt werden und
der vorhergesagte Wert sollte sich vom Wert des direkt
vorangehenden Laufs unterscheiden. Z.B. sind im Fall der in
Fig. 2 dargestellten Zeilendaten die vorhergesagten Werte
und die zu codierenden Lauflängendaten solche, wie sie in
Fig. 4 dargestellt sind.
-
In Fig. 4 erscheinen vorhergesagte Werte in der Reihenfolge
1, 2, 3, 0, nicht in der Reihenfolge 1, 2, 3, 2, 1, 0
zwischen "d" und "e", jeweils einschließlich. Dies, da die
vorstehend genannten Vorhersageregeln, daß derselbe Wert, 2 in
diesem Fall, nicht doppelt vorhergesagt werden sollte und
daß ein Wert, der mit dem eines direkt vorangehenden
vorhandenen Laufs übereinstimmt, 1 in diesem Fall, nicht als
Vorhersagewert verwendet wird.
-
Die Lauflängendaten werden unter Verwendung z.B. eines
Huffman-Codes statistisch codiert. Wenn die statistische
Codierung ausgeführt wird, kann ein zuvor auf Grundlage von
Abtastdaten von Zeichenbildern erstellte Codetabelle oder
eine Codetabelle verwendet werden, die als geeignetste für
ein zu verarbeitendes Bild unter allen Codetabellen
angesehen wird, die für verschiedene Bildtypen dadurch vorbereitet
wurden, daß statistische Werte für die Lauflängen jedes
Bildes gesammelt wurden. Darüber hinaus steht statistische
Codierung mit Universalcodes zur Verfügung. Das Format
codierter Daten kann ein solches sein, wie es in Fig. 5
dargestellt ist, in der das Symbol "A" zwei Bits repräsentiert,
die den Typ des allerersten Laufs anzeigen, und ein Symbol
"H" Entropiecodes repräsentiert, die durch das Codieren von
Lauflängen erhalten werden.
-
Die obige statistische Codierung von Lauflängen für die
Daten einer Zeile eines Bildes wird nun detaillierter unter
Bezugnahme auf das Flußdiagramm von Fig. 6 beschrieben.
Fig. 7 ist ein Flußdiagramm betreffend das Decodieren der
codierten Lauflängendaten.
-
In den Flußdiagrammen der Fig. 6 und 7 repräsentiert (i,j)
Koordinaten einer Pixelposition, Iij repräsentiert den Wert
eines Pixels an der Position (i,j), "dx" repräsentiert die
Anzahl von Pixeln in einer Zeile, "l" repräsentiert die
Lauflänge, "r" repräsentiert den Typ eines Laufs, der gerade
verarbeitet wird, "rr" repräsentiert den Typ des direkt
vorangehenden Laufs, "pr" repräsentiert den für einen Lauf
vorhergesagten Wert und "ppr" repräsentiert den ersten für
einen Lauf vorhergesagten Wert.
-
Fig. 8 zeigt den Inhalt eines Schritts, der in den Fig. 6
und 7 mit "Laufvorhersage" bezeichnet ist. In Fig. 8 ist
p[k] (k=0, 1, 2, 3, 4, 5) eine Anordnung vorausgesagter
Werte, wobei die sechs Elemente die folgenden sind: 0, 1, 2, 3,
2 und l. Die sechs Elemente werden durch ihre jeweiligen
Elementnummern k (k=0, 1, 2, 3, 4 und 5) repräsentiert. Wie
es leicht ersichtlich ist, kann dann, wenn der Wert, der
den Typ des allerersten Laufs einer Zeile anzeigt, zunächst
durch "k" ersetzt wird, der Wert "pr" der Reihe nach mit der
in Fig. 3 dargestellten Reihenfolge im Schritt der
"Laufvorhersage" erhalten werden.
-
Die Flußdiagramme der Fig. 6 und 7 werden nun beschrieben,
wobei die in Fig. 2 dargestellten Daten als Beispiel
verwendet werden. In diesem Fall gilt i=0 und dx=a+b+c+d+e.
-
Es wird zunächst auf Fig. 6 Bezug genommen, gemäß der "j"
und "l" in einem Schritt S1 auf j=l=0 gesetzt werden. Dann
werden in einem Schritt S2 "r" (der Typ des aktuellen Laufs)
und "k" auf r=k=I&sub0;&sub0; (=3) gesetzt und der Wert 3 (r=3) wird
in einem Schritt S3 als Typ des allerersten Laufs einer
Zeile aufgezeichnet. Dann werden in einem Schritt S14 "j" und
"l" jeweils auf 1 gesetzt (j=0+1=1, l=0+1=1) und das
Programm geht zu einem Schritt S15 weiter. In diesem Fall ist
das Beurteilungsergebnis im Schritt S15 j< dx, so daß das
Programm zum Schritt S4 übergeht. Im Schritt S4 wird
entschieden, ob r=Iij ist. Im vorliegenden Fall sind r=3 und
I&sub0;&sub1;=3 und daher geht das Programm erneut zum Schritt S14
über. Ab nun werden die Schritte S15, S4 und S14 wiederholt,
bis "j" im Schritt S14 den Wert "a" einnimmt und "l" den
Wert "a" einnimmt. Wenn im Schritt S14 j=a und l=a gelten,
geht das Programm über den Schritt S15 zum Schritt S4
weiter. Im Schritt S4 werden r=3 und 10a=1 erhalten, so daß das
Programm zu einem Schritt S5 weitergeht, in dem 1=a
abgespeichert wird. Danach wird in einem Schritt S6 "rr" (der
Typ des vorangehenden Laufs) auf rr=r=3 gesetzt und "r" und
"l" werden auf r=I0a=1 bzw. l=0 gesetzt. Die folgenden
Schritte S7 bis S13 sind Schritte zum Vorhersagen von
Lauftypen.
-
Im Schritt S7 ist der erste vorausgesagte Wert "pr" 2, wie
in Fig. 3 dargestellt. In diesem Fall geht das Programm, da
im Schritt S8 pr=2 und r=1 sind, zum Schritt S9 über und
"ppr" (der erste vorhergesagte Wert eines Laufs) wird im
Schritt S9 auf 2 (ppr=pr=2) gesetzt und dann wird der Wert
0 als Lauflänge im Schritt S10 abgespeichert. Danach wird im
Schritt S11 zum Erhalten von "pr" 1 als vorhergesagter Wert
eingestellt, wie in Fig. 3 dargestellt. In diesem Fall wird,
da pr=1, ppr=2 und rr=3 sind, im Schritt S12 erkannt, daß
pr≠ppr und pr≠rr sind, so daß das Programm zum Schritt S13
weitergeht. Da pr=1 und r=1 sind, wird im Schritt S13
erkannt, daß "pr" dem Wert "r" entspricht, und das Programm
geht zum Schritt S14 weiter.
-
Nun werden die Schritte S14, S15 und S4 wiederholt, bis im
Schritt S14 "j" den Wert "a+b" einnimmt und "l" den Wert
"b" einnimmt. Wenn im Schritt S14 j=a+b und l=b sind, wird
"r" 1 (r=1) und I0,a+b wird 0 (I0,a+b=0) und daher wird im
Schritt S4 entschieden, daß "r" nicht mit Iij übereinstimmt.
Dann geht das Programm zum Schritt S5 weiter, in dem "b" als
Lauflänge l (l=b) abgespeichert wird. Im Schritt S6 werden
"rr", "r" und "l" auf 1, 0 bzw. 0 gesetzt (rr=1, r=0, 1=0).
Im nächsten Schritt S7 zum Erhalten von "pr" wird diesmal
der vorhergesagte Wert "pr" 0, wie in Fig. 3 dargestellt.
Daher geht das Programm über den Schritt S8 zum Schritt S14
weiter.
-
Die Schritte S14, S15 und S4 werden erneut wiederholt, bis
"j" im Schritt S14 den Wert (a+b+c) einnimmt und "l" den
Wert c (j=a+b+c, l=c) einnimmt. Wenn im Schritt S14 j=a+b+c,
l=c sind, sind r=0 und I0,a+b+c=1 Daher geht das Programm
vom Schritt S4 zum Schritt S15 über, in dem "c" als
Lauflänge "l" für den Lauftypen 0 abgespeichert wird. Dann
werden im Schritt S6 "rr", "r" und "l" auf 0, 1 bzw. 0
gesetzt (rr=0, r=1, l=0). Da zu diesem Zeitpunkt im Schritt S7
pr=1 erhalten wird, wie in Fig. 3 dargestellt, geht das
Programm über S8 zu S14 weiter.
-
Die Schritte S14, S15 und S4 werden wiederholt, bis "j" im
Schritt S14 den Wert (a+b+c+d) einnimmt und l den Wert d
(j=a+b+c+d, l=d) einnimmt. Wenn im Schritt S14 j=a+b+c+d,
l=d sind, sind r=1 und I0,a+b+c+d=0 Daher geht das Programm
vom Schritt S4 zum Schritt S5 über, in dem "d" als Lauflänge
"l" für den Lauftyp 1 abgespeichert wird. Danach werden im
Schritt S6 "rr", "r" und "l" auf 1, 0 bzw. 0 (rr=1, r=0,
1=0) gesetzt. Da der im Schritt S7 zu diesem Zeitpunkt
vorausgesagte Wert 2 (pr=2) ist, geht das Programm zum Schritt
S8 weiter. Da in diesem Fall pr=2 und r=0 sind, wird im
Schritt S8 erkannt, daß "pr" nicht mit "r" übereinstimmt,
und das Programm geht zum Schritt S9 weiter. Nachdem im
Schritt S9 "pr" (pr=2) in "ppr" (ppr=pr=2) eingesetzt wurde,
wird im Schritt S10 0 als Lauflänge aufgezeichnet. Danach
wird im Schritt S11, der ein Vorhersageschritt ist, der
Vorhersagewert pr=3 erhalten, wie in Fig. 3 dargestellt. Da
pr=3, ppr=2 und rr=1 sind, wird im Schritt S12 entschieden,
daß "pr" nicht mit "ppr" übereinstimmt und daß "pr" nicht
mit "rr" übereinstimmt. Infolgedessen geht das Programm zum
Schritt S13 weiter, in dem "pr" (pr=3) als nicht mit "r"
(r=0) übereinstimmend beurteilt wird. Der Wert 0 wird im
Schritt S10 als Lauflänge abgespeichert.
-
Das Programm kehrt wieder zum Schritt S11 zurück, in dem
"pr" den Wert 2 repräsentiert. Da jedoch pr=2, ppr=2 und
rr=1 sind und daher ppr=pr ist, kehrt das Programm zum
Schritt S11 zurück, in dem der neue Vorhersagewert 1
erhalten wird. Da jedoch pr=1, ppr=2 und rr=1 sind und daher
pr=rr ist, kehrt das Programm erneut zum Schritt S11 zurück.
Nun wird der Vorhersagewert "pr" auf 0 gesetzt. In diesem
Fall geht das Programm über den Schritt S12 zum Schritt S13
weiter, da pr=0, ppr=2 und rr=1 sind. Im Schritt S13 wird
entschieden, daß "pr" (pr=0) mit "r" (r=0) übereinstimmt, so
daß das Programm zum Schritt S14 weitergeht.
-
Die Schritte S14, S15 und S4 werden erneut wiederholt, bis
"j" den Wert (a+b+c+d+e) einnimmt und "l" den Wert "e"
einnimmt. Wenn im Schritt j=a+b+c+d+e und l=e sind, wird "j"
im nächsten Schritt S15 dx (j=dx), wodurch das Programm zum
Schritt S16 übergeht, in dem "e" als Lauflänge (l=e)
aufgezeichnet wird. Auf diese Weise wird der Codierprozeß
abgeschlossen.
-
Gemäß nachfolgender Bezugnahme auf Fig. 7 werden, nachdem
"j" im Schritt S1 auf 0 (j=0) gesetzt wurde, im Schritt S2
r=3 und l=a aus den codierten Daten erhalten. Im nächsten
Schritt S3 wird "r" für "k" und "pr" verwendet (k=r=3,
pr=r=3). Dann geht das Programm zum Schritt S12 weiter, in
dem "pr" für "rr" verwendet wird (rr=pr=3). Die Schritte
S13, S14 und S15 sind Schritte zum Expandieren codierter
Lauflängen. Pixel mit der Nummer "a" werden in den Schritten
S13-S15 zunächst wiederhergestellt. Danach geht das Programm
zum Schritt S16 weiter. Da j=a< dx gilt (mit dx=a+b+c+d+e),
kehrt das Programm zur Laufvorhersage zum Schritt S4 zurück,
in dem pr=2 erhalten wird. Da die aus den codierten Daten im
nächsten Schritt S5 erhaltene Lauflänge l 0 ist (1=0), geht
das Programm über den Schritt S6 zum Schritt S7 weiter. Im
Schritt S7 wird der Wert 2 für "pr" für "ppr" verwendet
(ppr=pr=2). Nachdem im Schritt S8 der Wert 1 für "pr" (pr=1)
erhalten wurde, geht das Programm über den Schritt S9 zum
Schritt S10 weiter, da pr=1, ppr=2, rr=3 sind und daher
pr≠ppr und pr≠rr sind. Im Schritt S10 wird die Lauflänge "b"
erhalten, die nicht Null ist. Da "l" nicht 0 ist (l≠0), geht
das Programm zum Schritt S12 weiter, in dem "rr" durch pr
ersetzt wird, so daß es 1 ist (rr=pr=1). Danach werden die
Pixel b durch Verarbeitung in den Schritten S13-S15
wiederhergestellt und danach kehrt das Programm über den Schritt
S16 erneut zum Schritt S4 zur Laufvorhersage zurück.
-
Diesmal wird im Schritt S4 pr=0 erhalten. In diesem Fall
wird im Schritt S5 l=c≠0 erhalten. Daher geht das Programm
erneut über S6 zum Schritt S12 weiter. Nachdem im Schritt
S12 rr durch den Wert 0 von "pr" ersetzt wurde (rr=pr=0)
werden in den Schritten S13-S15 die Pixel c
wiederhergestellt.
-
Auf ähnliche Weise geht das Programm zum Schritt S4 über und
in diesem Schritt wird 1 als Vorhersagewert (pr=1) erhalten.
In diesem Fall ist die im Schritt S5 erhaltene Lauflänge
"d", die nicht Null ist (1=d≠0). Demgemäß geht das Programm
über den Schritt S6 zum Schritt S12 weiter. Die Pixel d
werden in
den Schritten S13-S15 wiederhergestellt, nachdem im
Schritt S12 "rr" durch den Wert 1 von "pr" ersetzt wurde
(rr=pr=1).
-
Das Programm kehrt erneut über den Schritt S16 zum Schritt
S4 zurück. Zu diesem Zeitpunkt ist der im Schritt S4
erhaltene Vorhersagewert 2 (pr=2) und die im Schritt S5 erhaltene
Lauflänge l ist Null (l=0). Daher geht das Programm vom
Schritt S6 zum Schritt S7 weiter, in dem der Wert 2 von "pr"
als Wert von "ppr" eingesetzt wird (ppr=pr=2). Im Schritt S8
wird der Lauftyp als 3 vorhergesagt (pr=3). Da zu diesem
Zeitpunkt pr=3, ppr=2 und rr=1 sind, geht das Programm von
S9 auf S10 weiter, wo der Wert 0 als Lauflänge l vom
Lauftyp 3 eingesetzt wird. Das nächste Vorhersageergebnis im
Schritt S8 ist 2 (pr=2). In diesem Fall ist jedoch, da
pr=ppr=2 und rr=1 sind, das Entscheidungsergebnis im Schritt
S9 NEIN und daher kehrt das Programm zur Laufvorhersage zum
Schritt S8 zurück. Danach wird im Schritt S8 1 als
Vorhersagewert "pr" erhalten. In diesem Fall ist, da pr=rr=1 ist,
das Entscheidungsergebnis im Schritt S9 NEIN und daher kehrt
das Programm wieder zum Schritt S8 zurück. Danach wird im
Schritt S8 pr=0 erhalten. In diesem Fall kehrt das Programm,
da pr=0, ppr=2 und rr=1 sind, vom Schritt S9 zum Schritt
S10 zurück, in dem 1,e" als Lauflänge für einen Lauf vom Typ
0 erhalten wird (l=e). Demgemäß ist das
Entscheidungsergebnis im Schritt S11 NEIN und das Programm geht über die
Schritte S12-S14 zum Schritt S15 weiter. Die Pixel e werden
durch die Verarbeitung im Schritt S12-S15 wiederhergestellt.
Nachdem die Datenwiederherstellung abgeschlossen ist, geht
das Programm zum Schritt S16 weiter. Zu diesem Zeitpunkt
entspricht "j" dx (dx=a+b+c+d+e). So wird der obige
Decodierprozeß abgeschlossen.
-
Vorstehend wurde unter Bezugnahme auf Fig. 6 und Fig. 7 ein
Beispiel für die Erfindung beschrieben. Bei der obigen
Beschreibung
wurde nur ein Verfahren als Verfahren zum
Vorhersagen von Lauftypen dargestellt. Jedoch stehen andere
Verfahren zur Verfügung.
-
Wenn z.B. keine geeignete Vorverarbeitung an den Bilddaten
vorgenommen wird, so daß ein Zeichenabschnitt und/oder ein
weißer Hintergrund Pixel mit Werten enthalten, die denen von
Pixeln gleich sind, die in einem Kantenabschnitt vorhanden
sind, oder wenn nicht nur Zeichenbilder sondern auch
natürliche Bilder behandelt werden sollen, ändert sich der
Lauftyp nicht notwendigerweise in der Reihenfolge 3, 2, 1, 0, 1,
2, ... . Es kann aber angenommen werden, daß kleine
Änderungen wie "3, 2", "1, 0" oder "1, 2" häufiger auftreten als
relativ große Änderungen wie "3, 0", "2, 0" oder "3, 1".
Demgemäß wird die Laufvorhersage in den vorstehenden Fällen
gemäß einer Vorhersageregel ausgeführt, wie sie in Fig. 9
dargestellt ist.
-
Wie es aus Fig. 9 erkennbar ist, werden gemäß der
Vorhersageregel drei Werte, die dem Wert am nächsten liegen, der den
Typ des vorangehenden Laufs repräsentiert, als erster,
zweiter und dritter Vorhersagewert gekennzeichnet. Z.B. wird
dann, wenn der vorangehende Lauftyp 0 ist, der Wert 1
zunächst als erster Vorhersagewert gekennzeichnet. Die Werte
2 und 3 folgen dem Wert 1 in dieser ansteigenden
Reihenfolge. Wenn der vorangehende Lauftyp 3 ist, wird zunächst der
Wert 2 als erster Vorhersagewert gekennzeichnet. Die Werte
1 und 0 folgen dem Wert 3 in dieser absteigenden
Reihenfolge. Wenn der vorangehende Lauftyp "rr" 1 oder 2 ist,
bestehen zwei mögliche Werte als dichteste. Wenn z.B. der
vorangehende Lauftyp "rr" 1 ist, sind die dichtesten Werte 2 und
0. In diesem Fall wird die Priorität unter Berücksichtigung
des Lauftyps vor dem vorangehenden Lauftyp entschieden. Wenn
der Lauftyp vor dem vorangehenden Lauftyp "rrr" 0 ist, wird
dem Wert 2 Priorität gegenüber dem Wert 0 eingeräumt, und
zwar aufgrund der Überlegung, daß die Werte der
verarbeiteten Lauftypen ansteigen könnten. Wenn dagegen der Lauftyp
"rrr" vor dem vorangehenden Lauftyp 1 den Wert 3 oder 2 hat,
wird dem Wert 0 Priorität gegenüber dem Wert 2 eingeräumt,
und zwar aufgrund der Überlegung, daß die Werte der
verarbeiteten Lauftypen fallen könnten.
-
In jedem Fall werden dann, wenn der erste vorhergesagte Wert
nicht mit dem tatsächlichen Lauftyp übereinstimmt, die zwei
anderen Werte jeder für sich abhängig von der Priorität als
zweiter und dritter Vorhersagewert bereitgestellt.
-
Die vorstehende Beschreibung erfolgte unter Bezug auf ein
2-Bit-Zeichenbild. Die Erfindung kann jedoch auf umkehrbare
Codierung für beliebige n-Bit-Bilder angewandt werden. In
diesem Fall ist die Anzahl vorherzusagender Lauftypen 2n.