DE69736329T2 - Verschachtelte verteilte kodierung von spärlich bestückten datensätzen - Google Patents

Verschachtelte verteilte kodierung von spärlich bestückten datensätzen Download PDF

Info

Publication number
DE69736329T2
DE69736329T2 DE69736329T DE69736329T DE69736329T2 DE 69736329 T2 DE69736329 T2 DE 69736329T2 DE 69736329 T DE69736329 T DE 69736329T DE 69736329 T DE69736329 T DE 69736329T DE 69736329 T2 DE69736329 T2 DE 69736329T2
Authority
DE
Germany
Prior art keywords
data
data block
block
value
bit length
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69736329T
Other languages
English (en)
Other versions
DE69736329D1 (de
Inventor
K. Charles Palo Alto CHUI
Rongxiang Sunnyvale YI
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zoran Corp
Original Assignee
Zoran Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zoran Corp filed Critical Zoran Corp
Publication of DE69736329D1 publication Critical patent/DE69736329D1/de
Application granted granted Critical
Publication of DE69736329T2 publication Critical patent/DE69736329T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/20Image preprocessing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • H04N19/619Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding the transform being operated outside the prediction loop
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/63Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]

Description

  • Die vorliegende Erfindung bezieht sich allgemein auf Systeme und Verfahren für die verlustlose Kompression und Rekonstruktion von Daten, wie z. B. die quantisierten Elementarwellenkoeffizienten eines elementarwellen-transformierten Bildes, die spärlich mit Nicht-Null-Daten belegt sind, und insbesondere auf ein System und ein Verfahren zum effizienten Identifizieren und Codieren von Abschnitten eines Datensatzes, der mit Null- und Nahezu-Null-Werten belegt ist.
  • HINTERGRUND DER ERFINDUNG
  • Spärlich belegte Datensätze werden in zahlreichen technischen Gebieten verwendet. Die vorliegende Erfindung wurde entwickelt, um Bilddaten effizient zu codieren, die durch schrittweises Anwenden von Elementanrwellentransformationen transformiert worden sind, ist jedoch gleichermaßen auf andere Typen von spärlich belegten Datensätzen anwendbar. Bilddaten, die durch schrittweises Anwenden von Elementarwellentransformationen transformiert worden sind, weisen tendenziell große Abschnitte auf, die mit Null- und Nahezu-Null-Werten belegt sind, insbesondere wenn die Daten vor der Codierung einem Datenquantisierungsschritt unterworfen wurden.
  • Die primären Ziele der vorliegenden Erfindung sind, eine Codierungsmethodik zu schaffen, die (A) effizient Teilfelder lokalisiert, die vollständig mit Null-Daten belegt sind, und solche Teilfelder mit möglichst wenigen Datenbits codiert, (B) die maximale Anzahl von Datenbits bestimmt, die erforderlich ist, um Teilfelder zu codieren, die wenigstens einige Nicht-Null-Daten enthalten, und (C) Nicht-Null-Daten mit der minimalen Anzahl von Datenbits codiert, die zum verlustfreien Speichern solcher Daten erforderlich sind.
  • Andere Ziele der vorliegenden Erfindung sind, eine Codierungsmethodik zu schaffen, die sehr recheneffizient ist, und eine, die für die Implementierung in Hardware (z. B. mittels elektronischer Schaltung) geeignet ist.
  • ÜBERBLICK ÜBER DIE ERFINDUNG
  • Zusammengefasst umfasst die vorliegende Erfindung ein System und ein Verfahren zum Codieren eines Feldes (Anordnung) von Daten. Das Datencodierungsverfahren analysiert schrittweise zunehmend kleinere Blöcke eines spezifizierten Datenfeldes. Die Datenblöcke werden in einer vorgegebenen Reihenfolge analysiert, wobei entsprechende Einträge, die Datenblöcke identifizieren, die wenigstens einen Nicht-Null-Wert enthalten, in der gleichen Reihenfolge in einer Liste von Blöcken gespeichert werden. Immer dann, wenn ein Datenblock verarbeitet wird, wird dann, wenn der Datenblock vollständig mit Null-Daten gefüllt ist, dieser in den Ausgangsdaten identifiziert, wobei keine weitere Verarbeitung des Datenblocks erforderlich ist. Andernfalls, wenn die Größe des Datenblocks größer ist als eine vorgegebene minimale Blockgröße (z. B. 2 × 2), wird der Block in kleinere Datenblöcke unterteilt, wobei diese kleineren Datenblöcke auf die Liste von Blöcken für die weitere Verarbeitung gesetzt werden. Wenn schließlich die Größe eines Datenblocks, der verarbeitet wird, gleich der vorgegebenen minimalen Blockgröße ist, werden Werte, die alle Datenelemente in diesem Datenblock repräsentieren, in die Ausgangsdaten geschrieben. Informationen, die die minimale Anzahl von Bits identifizieren, die erforderlich ist, um den Größendatenwert in jedem Datenblock zu codieren, werden in die Ausgangsdaten in der gleichen Reihenfolge geschrieben, in der die Blöcke analysiert werden, wodurch einer Decodiererprozedur ermöglicht wird, die Anzahl von Datenbits zu bestimmen, die verwendet worden sind, um jeden in den Ausgangsdaten gespeicherten Datenwert zu codieren.
  • Dieses Datendecodierungsverfahren verfolgt die codierten Daten zurück, um somit den vom Codierungsverfahren ausgeführten Prozess umzukehren. Die Bits der codierten Daten werden der Reihe nach in einem einzelnen Durchlauf vom ersten Bit bis zum letzten Bit gelesen. Wenn das letzte Datenbit in den codierten Daten verarbeitet worden ist, ist die Rekonstruktion des codierten Datenfeldes abgeschlossen. Wenn die codierten Daten gelesen werden, werden Einträge zu einer Blockliste hinzugefügt, um Datenblöcke zu identifizieren, die später verarbeitet werden, zusammen mit den Daten, die die maximale Anzahl von Bits anzeigen, die erforderlich ist, um die Daten in diesen Datenblöcken zu codieren. Datenblöcke werden in der Reihenfolge analysiert, in der sie in den codierten Daten erscheinen. Immer wenn ein Datenblock verarbeitet wird, wird dann, wenn der Datenblock vollständig mit Null-Daten gefüllt ist, der relevante Abschnitt des rekonstruierten Datenfeldes mit Null-Datenwerten gefüllt. Anderenfalls werden Datenblockidentifizierer zur Blockliste hinzugefügt, bis Datenblöcke einer vorgegebenen minimalen Größe (z. B. 2 × 2) erreicht werden, wobei zu diesem Zeitpunkt die Datenwerte in jedem solchen Datenblock decodiert und an das rekonstruierte Datenfeld ausgegeben werden.
  • US 54 12 741 beschreibt ein Verfahren für die nullfreie Codierung von Elementarwellenkoeffizienten, wobei eine dominante Liste Koordinaten derjenigen Koeffizienten enthält, die noch nicht als signifikant befunden worden sind, und die keine Vorfahren aufweisen, die nullfreie Stämme sind, wobei ein nullfreier Stamm ein Koeffizient ist, von dem alle Nachfahren entweder vorhersagbar insignifikant sind oder vorhersagbar als signifikant befunden wurden.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Zusätzliche Aufgaben und Merkmale der Erfindung werden leichter ersichtlich anhand der folgenden genauen Beschreibung und der beigefügten Ansprüche, in Verbindung mit den Zeichnungen, in welchen:
  • 1 ein Blockdiagramm einer Bildverarbeitungs-Arbeitsstation ist, die eine erste bevorzugte Ausführungsform der vorliegenden Erfindung enthält;
  • 2 schematisch ein Bilddatenfeld und eine überlappende Menge von Datenanalysefeldern zeigt;
  • 3A und 3B Knotenlisten und Blocklistendatenstrukturen zeigen, die vom Datencodierer und vom Datendecodierer der bevorzugten Ausführungsformen verwendet werden;
  • 4 und 5 Flussdiagramme einer bevorzugten Ausführungsform des Datencodierungsverfahrens der vorliegenden Erfindung sind;
  • 6 ein Beispielfeld von Daten ist, das verwendet wird, um die Operation der ersten bevorzugten Ausführungsform der vorliegenden Erfindung zu demonstrieren;
  • 7 und 8 Flussdiagramme einer bevorzugten Ausführungsform des Datendecodierungsverfahrens der vorliegenden Erfindung sind;
  • 9 ein Blockdiagramm einer Bildverarbeitungs-Arbeitsstation ist, die eine zweite bevorzugte Ausführungsform der vorliegenden Erfindung enthält;
  • 10, 11 und 12 Flussdiagramme einer zweiten bevorzugten Ausführungsform des Datencodierungsverfahrens der vorliegenden Erfindung sind;
  • 13, 14 und 15 Flussdiagramme einer zweiten bevorzugten Ausführungsform des Datendecodierungsverfahrens der vorliegenden Erfindung sind.
  • BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
  • In 1 ist ein Computersystem oder eine Arbeitsstation 300 gezeigt, die eine erste bevorzugte Ausführungsform der vorliegenden Erfindung enthält. Das System 300 enthält eine Zentraleinheit 302, ein internes System, Steuer- und Datenbusse 304, Speicher 306 (einschließlich Schreib/Lese-Speicher sowie nichtflüchtigen Speicher, wie z. B. einen Magnetplattenspeicher), eine Benutzerschnittstelle 308, und eine Kommunikationsschnittstelle 310 für die Übertragung von Informationen zu und von anderen Vorrichtungen über einen oder mehrere Kommunikationskanäle 312.
  • Der Speicher 306 speichert sowohl Computer-Software als auch Daten, einschließlich:
    • – ein Betriebssystem 320
    • – Rohbilddaten 322, wie z. B. Bilddatendateien, die von einer Digitalkamera, einer CAT-Abtastvorrichtung, einem MR-Abbildungssystem oder einem Bildabtaster erzeugt worden sind;
    • – codierte Daten 324, wie z. B. komprimierte Bilddatendateien, die von einem Datencodierer oder einer Datencodierungsprozedur erzeugt worden sind;
    • – rekonstruierte Bilddaten 325, wie z. B. rekonstruierte Bilddatendateien, die von einem Datendecodierer und einer Elementarwellendaten-Rekonstruktionsprozedur erzeugt worden sind; und
    • – Prozeduren 328 zum Verwalten des Speicherns, der Übertragung und des Empfangs von Datendateien;
    • – ein Bildverarbeitungsmodul 330 zum Verarbeiten von Bilddaten.
    • In der ersten bevorzugten Ausführungsform enthält das Bildverarbeitungsmodul 330:
    • – eine Elementarwellenprozedur 332 zum Transformieren von Datenfeldern unter Verwendung von Elementarwellentransformationen zu elementarwellen-analysierten Daten, und umgekehrt;
    • – eine Datenquantisierungsprozedur 334 zum Quantisieren der elementarwellen-analysierten Daten (auch bekannt als Elementarwellenkoeffizienten), die von der Elementarwellenprozedur 332 erzeugt worden sind;
    • – eine Codiererprozedur 336 zum Codieren eines Datenfeldes;
    • – eine Decodiererprozedur 338 zum Decodieren eines Satzes codierter Daten in ein entsprechendes Datenfeld;
    • – eine Daten-Dequantisierungsprozedur 339 zum Rückabbilden quantisierter Elementarwellenkoeffizienten zu Elementarwellenkoeffizienten;
    • – verarbeitete Bilddatendateien oder Speicherfelder 340 zum vorübergehenden Speichern von elementarwellen-analysierten Daten oder decodierten Daten; und
    • – Knotenlisten- und Blocklistendatenstrukturen 353, 354 zum Speichern von Daten, die von den Codierer- und Decodiererprozeduren 336, 338 verwendet werden.
  • Wie oben aufgezeigt, ist die vorliegende Erfindung geeignet für die Verwendung mit irgendeinem spärlich belegten Datensatz. Zum Zweck der Erläuterung der Funktion der Codierer- und Decodiererprozeduren sind der spezifi sche Typ der Elementarwellentransformationsprozedur 332, die verwendet wird, und der spezifische Typ der Datenquantisierungsprozedur 334, die verwendet wird, um eine Bilddatei in eine verarbeitete Bilddatendatei zu transformieren, nicht relevant und werden daher hier nicht weiter beschrieben. Eine bevorzugte Ausführungsform der Elementarwellentransformationsprozedur 332 und der Datenquantisierungsprozedur 334 ist jedoch in der US-Patentanmeldung Nr. 08/758.224, eingereicht am 27. November 1996, "System and Method for Performing Wavelet and Inverse Wavelet Like Transformations of Digital Data Using Only Add and Bit Shift Arithmetic Operations" beschrieben, die hiermit durch Literaturhinweis als Hintergrundinformation eingefügt ist.
  • In 2 ist ein Datenfeld 322 der Bilddaten (dicker Umriss) gezeigt, auf welchem ein Satz von 16 "Analysefeldern" 350 überlagert ist. Jedes Analysefeld 350 ist ein quadratisches N × N-Feld, wie z. B. ein 32 × 32-Feld. Eine ausreichende Anzahl von Analysefeldern wird verwendet, um das gesamte Datenfeld 322, das zu codieren ist, abzudecken, selbst wenn einige der Analysefelder über die Kanten des Datenfeldes hängen. Die überhängenden Abschnitte der Analysefelder werden während des Datencodierungsprozesses mit Null-Datenwerten gefüllt. Eine Analysefeldgröße von 32 × 32 ist bequem, da ein 11 × 9-Satz solcher Analysefelder perfekt ein 352 × 288-Datenfeld abdeckt, was eine sehr häufig verwendete Bilddatenfeldgröße ist. In der bevorzugten Ausführungsform ist der Ursprung des Datenfeldes die obere linke Ecke, die erste Koordinate, die verwendet wird, um Datenfeldabschnitte zu identifizieren, ist die "Y"-Achse oder vertikale Koordinate, wobei die zweite Koordinate, die verwendet wird, die "X"-Achse, oder horizontale Koordinate ist. Somit zeigt eine Position von 0,64 ein Pixel an der oberen vertikalen Position des Feldes, 64 Pixelpositionen ausgehend vom Feldursprung nach rechts, während eine Position von 32,0 ein Pixel an der linken Kante des Feldes zeigt, 32 Pixelpositionen vertikal nach unten ausgehend vom Feldursprung.
  • In den 3A und 3B sind die Haupt "Buchführungs"-Datenstrukturen gezeigt, die von den Codierer- und Decodiererprozeduren verwendet werden. Genauer listet eine Knotenlistendatenstruktur 353 Knoten (im Datenfeld) auf, die analysiert werden, während eine Blocklistendatenstruktur 354 Datenblöcke (d. h. Teilfelder der Daten) auflistet, die analysiert werden. Die Knotenliste 353, die nur in der zweiten bevorzugten Ausführungsform verwendet wird, speichert einen Knotenidentifizierer (d. h. x- und y-Koordinaten) für jeden Knoten in der Liste. Die Blockliste 354 speichert zwei Elemente für jeden Datenblock: (A) einen Blockidentifizierer, der aus zwei Werten besteht, die den Ursprung des Datenblocks und einen Wert, der die Höhe und Breite des Datenblocks angibt, angeben, und (B) einen Wert, der die maximale Anzahl von Bits angibt, die erforderlich ist, um irgendeinen Datenwert im Datenblock zu repräsentieren (d. h. int(log2V) + 1, wobei "int()" den Ganzzahlanteil eines spezifischen Wertes repräsentiert). Außerdem weist jede Liste 353, 354 einen entsprechenden ersten Zeiger 351, 356 auf, der zum höchsten Knoten oder Block in der Liste 353, 354 zeigt, der noch nicht verarbeitet worden ist, sowie einen zweiten Zeiger 352, 358, der auf den höchsten ungenutzten Schlitz in der Liste 353, 354 zeigt.
  • Codiererprozedur
  • Wie in 4 gezeigt ist, werden vor der Ausführung der Codiererprozedur 336 typischerweise ein oder mehrere Datenvorbereitungsprozeduren ausgeführt (Schritt 359). In den bevorzugten Ausführungsformen umfasst die Datenvorbereitung das Durchführen einer Elementarwellentransformation (unter Verwendung der Elementarwellenprozedur 332) eines Bilddatenfeldes, gefolgt von einer Quantisierung (unter Verwendung der Datenquantisierungsprozedur 334) der resultierenden Daten zu einem vordefinierten Satz diskreter Datenwerte. Die Elementarwellentransformations- und Quantisierungsdaten-Vorbereitungsschritte erzeugen typischerweise ein Datenfeld, das spärlich mit Nicht-Null-Daten belegt ist. Die Codiererprozedur ist jedoch geeignet für die Codierung wirklich jedes Datenfeldes, einschließlich dreidimensionaler und N-dimensionaler Datenfelder.
  • Wie in den 4 und 5 gezeigt ist, arbeitet die Codiererprozedur 336 im allgemeinen durch Analysieren zunehmend kleinerer Blöcke eines spezifizierten Datenfeldes. Die Datenblöcke werden in der Reihenfolge analysiert, in der sie in der Liste von Blöcken 354 erscheinen. Immer wenn ein Datenblock verarbeitet wird, wird er dann, wenn der Datenblock als vollständig mit Null-Daten gefüllt bestimmt wird (d. h. Datenwerte alle gleich Null, auch als Null-Daten bezeichnet), so in den Ausgangsdaten identifiziert, wobei keine weitere Verarbeitung des Datenblocks erforderlich ist. Wenn ansonsten die Größe des Datenblocks größer als 2 × 2 ist, wird der Datenblock in vier kleinere Teilblöcke unterteilt, wobei diese vier kleineren Teilblöcke auf die Liste von Blöcken für eine weitere Verarbeitung gesetzt werden. Wenn schließlich die Größe eines Datenblocks, der verarbeitet wird, gleich 2 × 2 ist, werden in die Ausgangsdaten vier Werte geschrieben, die die vier Datenelemente im Block repräsentieren. Informationen über die Anzahl von Bits, die erforderlich sind, um den maximalen Datenwert in jedem Datenblock zu codieren, werden in der gleichen Reihenfolge in die Ausgangsdaten geschrieben, in der die Blöcke und ihre Teilblöcke analysiert werden, um somit einer Decodiererprozedur zu ermöglichen, die Anzahl von Datenbits zu bestimmen, die verwendet wird, um jeden in den Ausgangsdaten gespeicherten Datenwert zu codieren.
  • Wie in 4 gezeigt ist, beginnt die Codiererprozedur mit dem Bestimmen der Höhe und Breite des spezifizierten Datenfeldes, das zu codieren ist, und gibt diese Werte an die Ausgangsdatei aus (Schritt 360), und bestimmt anschließend die Anzahl von Analysefeldern, die erforderlich sind, um das spezifizierte Datenfeld abzudecken. Wenn z. B. ein 32 × 32-Analysefeld verwendet wird, kann die Anzahl der benötigten Analysefelder bestimmt werden durch Abschneiden der fünf niedrigstwertigen Bits von den Werten "31 + Datenfeldhöhe" und "31 + Datenfeldbreite". In bestimmten Anwendungen können die Höhe und Breite dauerhaft fixiert sein, wobei in diesem Fall die Schritte 360 und 362 weggelassen werden können. Anschließend wird eine Analysefeldcodiererprozedur mehrmals aufeinanderfolgend aufgerufen, um jedes der Analysefelder zu codieren, die erforderlich sind, um das spezifizierte Datenfeld abzudecken (Schritt 364).
  • Die Tabelle 1 zeigt Definitionen der Ausdrücke und Abkürzungen, die in den Flussdiagrammfiguren verwendet werden.
  • Figure 00090001
  • Wie in 5 gezeigt ist, beginnt die Prozedur zum Codieren eines Feldes von 2n × 2n Datenwerten mit dem Sätzen eines ersten Eintrags, der das gesamte Analysefeld 2n × 2n repräsentiert, in die Liste der Blöcke (Schritt 370). Die Liste der Blöcke ist mit Ausnahme dieses ersten Eintrags leer.
  • Ferner bestimmt im Schritt 370 die Codierungsprozedur den Wert von Bit(0,0,n), was gleich der maximalen Anzahl von Bits ist, die erforderlich ist, um irgendeinen Datenwert im gesamten analysierten Feld zu codieren, und gibt diesen Wert unter Verwendung einer vordefinierten Anzahl von Bits (z. B. 4 Bits) aus. Wenn das Bit(0,0,n) gleich 0 ist (Schritt 371), zeigt dies an, dass alle Knoten im zu codierenden Feld gleich 0 sind und damit die Codierungsprozedur abgeschlossen ist (Schritt (396).
  • Wenn wenigstens ein in der Blockliste aufgelisteter Block noch nicht verarbeitet worden ist (Schritt (372), was im Fall zu Beginn der Codiererprozedur offensichtlich zutrifft, wählt die Prozedur den nächsten unverarbeiteten Datenblock (h,w,k) aus der Blockliste aus und setzt eine variable B gleich der maximalen Anzahl von Bits, die zum Decodieren irgendeines Datenwertes im ausgewählten Datenblock erforderlich ist (Schritt 374).
  • Wenn die Größe des ausgewählten Datenblocks nicht gleich oder kleiner als eine vorgegebene minimale Blockgröße, wie z. B. 2 × 2, ist (Schritt 376), werden die folgenden Schritte für jeden der vier Teilblöcke des ausgewählten Blocks durchgeführt. Die variable b wird gleich der maximalen Anzahl von Bits gesetzt, die zum Codieren irgendeines Datenwertes im Teilblock erforderlich ist. Wenn b = 0 ist, bedeutet dies, dass alle Werte im Teilblock gleich 0 sind, wobei in diesem Fall ein Wert von 0 unter Verwendung B Bits ausgegeben wird. (B ist die maximale Anzahl von Bits, die zum Codieren irgendeines Datenwertes im Stammdatenblock erforderlich ist.) Wenn ansonsten b ungleich 0 ist, dann wird (A) ein Wert von 0 unter Verwendung von B – b Bits ausgegeben, (B) ein Wert von 1 unter Verwendung von einem Bit ausgegeben, und (C) der Teilblock zur Blockliste hinzugefügt (Schritt 378). Es ist zu beachten, dass der Eintrag in der Blockliste den Wert b enthält, um die maximale Anzahl von Bits anzuzeigen, die zum Codieren der Daten im Teilblock erforderlich ist. Wenn somit ein Teilblock nicht lauter Null-Daten enthält, dann wird die maximale Anzahl von Bits, die zum Codieren von Daten im Teilblock erforderlich ist, bestimmt, wobei dieser Wert sowohl in der Blockliste (oder in einem parallelen Datenfeld) gespeichert wird als auch als entsprechende Folge von Nullen abgeschlossen von einem 1-Bit ausgegeben wird. Dieser Prozess wird anschließend für die anderen drei Teilblöcke des ausgewählten Blocks wiederholt (Schritte 380, 382, 384).
  • Nachdem alle Teilblöcke des ausgewählten Blocks durch die Schritte 378-384 verarbeitet worden sind, wird der Zeiger 356 auf den nächsten verarbeiteten Block (siehe 3) um eine Position im Schritt 374 vorgerückt, wenn irgendwelche unverarbeiteten Datenblöcke in der Blockliste zurückgeblieben sind (Schritt 372).
  • Wenn die Größe des ausgewählten Blocks die vorgegebene minimale Blockgröße ist, wie z. B. 2 × 2, (Schritt 376) werden alle Datenwerte im Block codiert und wie folgt ausgegeben. Jeder Datenwert wird unter Verwendung von B Bits ausgegeben, wobei B die Anzahl der Bits ist, die in der Blockliste für diesen Block angegeben ist, und gleich der maximalen Anzahl von Bits ist, die von irgendeinem Datenwert im ausgewählten Block verwendet wird. Für jeden Datenwert ungleich 0 wird auch ein Vorzeichenbit ausgegeben (Schritte 388, 390, 392, 394).
  • Die obenbeschriebene Prozedur wird fortgesetzt, bis alle Blöcke in der Blockliste verarbeitet worden sind (Schritt 372), wobei zu diesem Zeitpunkt die Codierung des Datenanalysefeldes abgeschlossen ist (Schritt 396).
  • 8 zeigt ein Beispiel eines spärlich belegten 16 × 16-Datenfeldes. Tabelle 2 zeigt die Datenausgabe, während dieses Datenfeld unter Verwendung der in 5 gezeigten Prozedur codiert wird.
    Figure 00110001
    Figure 00120001
    Figure 00130001
    Die Ausgabedaten für mehrere Datenblöcke sind nicht gezeigt.
    Figure 00130002
  • Die Ausgabedaten für die übrigen Datenblöcke sind nicht gezeigt.
  • Decodiererprozedur
  • Wie in den 7 und 8 gezeigt ist, arbeitet die Decodiererprozedur 336 im allgemeinen durch Lesen und Interpretieren der codierten Daten, um somit den von der Codiererprozedur 336 durchgeführten Prozess umzukehren. Die Bits der codierten Daten werden gelesen, in einer Reihenfolge in einem einzigen Durchlauf vom ersten Bit bis zum letzten Bit. Wenn das letzte Datenbit in den codierten Daten verarbeitet worden ist, ist die Rekonstruktion des codierten Datenfeldes abgeschlossen.
  • Wenn die codierten Daten gelesen werden, werden Einträge zur Blockliste hinzugefügt, um die Datenblöcke und Teilblöcke zu identifizieren, die später in der Prozedur verarbeitet werden, zusammen mit den Daten, die die maximale Anzahl von Bits angeben, die erforderlich ist, um die Daten in diesen Blöcken und Teilblöcken zu codieren. Die Datenblöcke und Teilblöcke werden in der Reihenfolge analysiert, in der sie in den codierten Daten erscheinen. Immer dann, wenn ein Teilblock verarbeitet wird, wird dann, wenn der Teilblock vollständig mit Null-Daten gefüllt ist (d. h. die Datenwerte sind alle gleich 0), der relevante Abschnitt des rekonstruierten Datenfeldes mit Null-Datenwerten gefüllt. Andernfalls werden Teilblockidentifizierer zur Blockliste hinzugefügt, bis Teilblöcke mit der Größe 2 × 2 erreicht werden, wobei zu diesem Zeitpunkt vier Werte im Teilblock decodiert und anders rekonstruierte Datenfeld ausgegeben werden.
  • Wie in 7 gezeigt ist, beginnt die Decodiererprozedur mit dem Lesen (Eingeben) der Höhe und Breite des zu decodierenden und zu rekonstruierenden Datenfeldes aus den codierten Daten (Schritt 400), Initialisieren des rekonstruierten Bildfeldes vollständig auf Nullwerte (Schritt 401), und anschließendes Bestimmen der Anzahl von Analysefeldern, die erforderlich ist, um das spezifizierte Datenfeld abzudecken (Schritt 402). Anschließend wird eine Analysefelddecodiererprozedur (in 8 gezeigt) mehrmals nacheinander aufgerufen, um jedes der Analysefelder zu decodieren, die benötigt werden, um das spezifizierte Datenfeld abzudecken (Schritt 404). Nachdem der Decodierungsprozess abgeschlossen ist, können die resultierenden rekonstruierten Daten einer Nachverarbeitungsprozedur unterworfen werden (Schritt 406), wie z. B. einer umgekehrten Elementarwellentransformationsprozedur, um somit eine Bilddatei zu rekonstruieren.
  • Wie in 8 gezeigt ist, beginnt die Prozedur zum Decodieren eines Satzes codierter Daten, die ein Feld von 2n × 2n Datenwerten repräsentieren, durch Setzen eines ersten Eintrags, der das gesamte Analysefeld 2n × 2n repräsentiert, in die Liste von Blöcken (Schritt 410). Die Liste von Blöcken ist mit Ausnahme dieses ersten Eintrags leer. Ferner gibt die Decodierungsprozedur im Schritt 410 einen "Bitlängenwert" Bit(0,0,n) ein, der eine vorgegebene Anzahl von Bits (z. B. 4 Bits) aufweist und die maximale Anzahl von Bits repräsentiert, die verwendet wird, um irgendeinen Datenwert im gesamten decodierten Feld zu codieren. Dieser Bitlängenwert ist in der Blockliste in dem Eintrag gespeichert, der das gesamte Analysefeld repräsentiert. Wenn der Bitlängenwert Bit(0,0,n) gleich 0 ist (Schritt 411), zeigt dies an, dass alle Knoten in dem zu decodierenden Feld gleich 0 sind, und daher die Decodierungsprozedur abgeschlossen ist (Schritt 440).
  • Wenn wenigstens ein in der Blockliste aufgelisteter Block noch nicht verarbeitet worden ist (Schritt 412), was offensichtlich zu Beginn der Decodiererprozedur der Fall ist, wählt die Prozedur den nächsten unverarbeiteten Block (h,w,k) aus der Blockliste aus und liest aus der Blockliste einen Wert B gleich der maximalen Anzahl von Bits, die zum Decodieren irgendeines Datenwertes im Block benötigt wird (Schritt 414).
  • Wenn die Größe des ausgewählten Blocks nicht eine vordefinierte minimale Blockgröße, wie z. B. 2 × 2, ist (Schritt 416), werden die folgenden Schritte für jeden der vier Teilblöcke des ausgewählten Blocks ausgeführt. Die Schritte 418 und 420 werden verwendet, um jeden aufeinanderfolgenden Teilblock auszuwählen, und um die Schleife zu verlassen, wenn alle vier Teilblöcke verarbeitet worden sind. Für jeden Teilblock werden die codierten Datenbits gelesen, bis entweder ein 1-Bit erreicht wird oder B Bits ohne Lesen eines 1-Bits gelesen worden sind. Die variable "Wiederholungen" verfolgt, wie viele 0-Bits gelesen worden sind. Wenn ein 1-Bit gelesen wird, bevor Wiederholungen einen Wert B erreicht, wird der Teilblock zur Blockliste hinzugefügt und ein Wert "B – Wiederholungen" in der Blockliste für den Teilblock gespeichert, was die maximale Anzahl von Datenbits repräsentiert, die zum Codie ren der Daten im Teilblock verwendet wird. Wenn B 0-Bits gelesen werden, dann enthält der Teilblock nur Null-Daten und es werden keine Einträge zur Blockliste hinzugefügt (Schritt 422). Es ist zu beachten, dass keine Datenwerte in das rekonstruierte Datenfeld im Schritt 422 geschrieben werden, da keine Notwendigkeit besteht, Null-Datenwerte in das rekonstruierte Datenfeld zu schreiben (siehe Schritt 401 in 7). Die Schritt 418, 420 und 422 werden wiederholt, bis alle vier Teilblöcke des ausgewählten Datenblocks verarbeitet worden sind. Nachdem alle Teilblöcke des ausgewählten Blocks mittels der Schritte 418-422 verarbeitet worden sind, wird der Zeiger 356 auf den nächsten verarbeiteten Block (siehe 3) um eine Position im Schritt 414 vorgerückt, wenn irgendwelche unverarbeiteten Datenblöcke in der Blockliste zurückgeblieben sind (Schritt 412).
  • Wenn die Größe des ausgewählten Datenblocks gleich der vordefinierten minimalen Blockgröße, wie z. B. 2 × 2, ist (Schritt 416), werden alle Werte im Block decodiert und an das rekonstruierte Datenfeld ausgegeben (Schritt 430, 432, 434, 436, 437).
  • Die obenbeschriebene Prozedur wird fortgesetzt, bis alle Blöcke in der Blockliste als verarbeitet markiert sind (Schritt 412), wobei zu diesem Zeitpunkt die Codierung des Datenanalysefeldes abgeschlossen ist (Schritt 440).
  • Datenkompressionsverbesserungen
  • In einer bevorzugten Ausführungsform wird die in 5 gezeigte Codierungsprozedur wie folgt modifiziert, um die Größe der erzeugten codierten Daten zu reduzieren. Wenn im Schritt 384 die maximale Anzahl von Bits bestimmt wird, die erforderlich ist, um den letzten Teilblock des derzeit ausgewählten Blocks (h,w,k) zu codieren, ist dann und nur dann, wenn die maximale Anzahl von Bits, die zum Codieren jedes der anderen drei Teilblöcke erforderlich ist, kleiner als B, die maximale Anzahl von Bits, die zum Codieren von Daten im ausgewählten Teilblock erforderlich ist, war, bekannt, dass wenigstens ein Datenwert im letzten Teilblock B Bits zum Codieren erfordert. In diesem Fall wird der letzte Teilblock zur Blockliste mit einem Wert B, der im Blocklisteneintrag angegeben ist, hinzugefügt, jedoch werden keine Daten zur Ausgabe hinzugefügt.
  • Wenn außerdem im Schritt 394 die Werte für die ersten drei Datenwerte im ausgewählten Block alle kleiner als 2B-1 waren, dann wird das oberste "1"-Bit des letzten Datenwertes nicht ausgegeben, da die Anwesenheit dieser "1" impliziert werden kann.
  • Im Decodierer werden die Schritt 422 und 436 wie folgt modifiziert. Wenn im Schritt 422 die ersten drei Teilblöcke des ausgewählten Blocks verarbeitet worden sind und keiner einen Wert B von Bit(i,j,k-1) aufweist, dann sind keine Daten für den vierten Teilblock zu lesen. Zusammengefasst, wenn die maximale Anzahl der Bits, die zum Decodieren jedes der ersten drei Teilblöcke erforderlich ist, kleiner als B war, dann sind keine Daten im vierten Teilblock zu lesen. Wenn diese Bedingung erfasst wird, werden keine codierten Daten für den vierten Teilblock gelesen, jedoch wird trotzdem ein Eintrag für den vierten Teilblock zur Blockliste hinzugefügt, wobei eine spezifizierte maximale Anzahl von Bits, die zum Codieren der Daten im Teilblock erforderlich ist, auf B gesetzt wird, was die maximale Anzahl von Bits ist, die zum Codieren der Daten im ausgewählten (Stamm-)Block erforderlich ist.
  • Wenn im Schritt 436 die ersten Datenwerte im ausgewählten Block verarbeitet worden sind und alle drei einen Wert kleiner als 2B-1 aufweisen, dann weist der nächste zu lesende Datenwert B – 1 Bits anstelle von B Bits auf, da sein oberstes Bit bekanntermaßen gleich 1 ist. Wenn diese Bedienung erfasst wird, werden B – 1 Bits an codierten Daten für den vierten Datenwert im ausgewählten Block gelesen, ein 1-Bit diesem Wert als höchstwertiges Bit vorangehängt (verkettet), woraufhin die normale Verarbeitung des vierten Datenwertes fortgesetzt wird.
  • Die Datenkompressionsverbesserung, die oben mit Bezug auf die Schritt 384, 394, 422 und 436 der Codierer- und Decodiererprozeduren beschrieben worden ist, reduziert typischerweise die Menge an codierten Ausgangsdaten, die erzeugt werden, um 2 bis 3 %. Somit wird die Datenkompression um 2 bis 3 % verbessert.
  • Zweite bevorzugte Ausführungsform
  • Wie in den 4, 10, 11 und 12 gezeigt ist, ist in einer zweiten bevorzugten Ausführungsform die Reihenfolge der Codierungsschritte modifiziert, um somit die Anzahl der Bits, die zum Codieren der Knoten in einem Datenfeld verwendet wird, etwas zu reduzieren. Es werden die gleiche Terminologie (siehe Tabelle 1) und die gleichen Datenstrukturen wie in der ersten bevorzugten Ausführungsform verwendet, mit der Ausnahme, dass eine zusätzliche Listendatenstruktur, genannt Knotenlistendatenstruktur LN, verwendet wird, um eine Liste der Knoten zu verfolgen. Der Beginn der Codiererprozedur, wie in 4 gezeigt, bleibt unverändert. Die Prozedur zum Decodieren eines Feldes von 2n × 2n Datenwerten, wie in 5 gezeigt ist, wird jedoch durch die in den 10, 11 und 12 gezeigte Prozedur ersetzt.
  • Wie in 10 gezeigt ist, beginnt die Prozedur zum Codieren eines Feldes von 2n × 2n Datenwerten mit dem Setzen eines ersten Eintrags, der das gesamte Analysefeld 2n × 2n repräsentiert, in die Liste der Blöcke (Schritt 500). Die Liste der Blöcke ist mit Ausnahme dieses ersten Eintrags leer. Ferner bestimmt im Schritt 500 die Codierungsprozedur die maximale Anzahl von Bits, die zum Codieren irgendeines Datenwertes im gesamten analysierten Feld erforderlich ist, und gibt diesen Wert unter Verwendung einer vordefinierten Anzahl von Bits (z. B. 4 Bits) aus.
  • Anschließend wird eine Steuervariable m auf n gesetzt, wobei n gleich der Anzahl der Bits ist, die zum Codieren des Datenabtastwertes mit dem größten Absolutwert in der gesamten spezifizierten Menge von zu codierenden Daten benötigt wird (Schritt 502). Wenn die Steuervariable m anfangs gleich 0 ist (Schritt 510), zeigt dies an, dass alle Knoten im zu codierenden Feld gleich 0 sind, und daher die Codierungsprozedur abgeschlossen ist (Schritt 512).
  • Als nächstes werden unter Verwendung des aktuellen Wertes m die LN-Verarbeitungsprozedur (Schritt 504) und LB-Verarbeitungsprozedur (Schritt 506) aufgerufen. Diese zwei Prozeduren verarbeiten und codieren Knoten und Blöcke unabhängig davon, ob die Datenabtastwerte in diesen Knoten und Blöcken einen Absolutwert größer als 2m-1 aufweisen. Nach der Ausfüh rung dieser zwei Prozeduren wird die Steuervariable m um ein 1 inkrementiert (Schritt 508), wobei dann, wenn m immer noch größer als 0 ist (Schritt 510), die zwei Prozeduren erneut ausgeführt werden (d. h. die Schritt 504, 506 und 508 werden wiederholt). Dies wird fortgesetzt, bis m auf einen Wert von 0 dekrementiert wird, wobei zu diesem Zeitpunkt die Codierung des Datenfeldes abgeschlossen ist (Schritt 512).
  • Wie in 11 gezeigt ist, beginnt die LN-Codierungsverarbeitungsprozedur mit dem Bestimmen, ob irgendwelche unverarbeiteten Knoten in der Liste der Knoten vorhanden sind (Schritt 520). Jedes mal, wenn die LN-Verarbeitungsprozedur aufgerufen wird, wird der Zeiger 351 auf den nächsten unverarbeiteten Knoten auf das allererste Element in der Liste zurückgesetzt. Die Knotenliste ist anfangs leer, wenn die Codierung jedes Analysefeldes beginnt. Im Schritt 522 wird der nächste unverarbeitete Knoten in der Liste der Knote ausgewählt, wobei ein Bit ausgegeben wird, um anzuzeigen, ob |V(i,j| ≥ 2m-1 gilt. Wenn |V(i,j| ≥ 2m-1 gilt, wird ein 1-Bit ausgegeben, während ansonsten ein 0-Bit ausgegeben wird.
  • Wenn der Absolutwert |V(i,j)| des ausgewählten Knotens (i,j) kleiner als 2m-1 ist (d. h. wenn der im Schritt 522 ausgegebene Bitwert gleich 0 ist, oder äquivalent wenn das m-te niedrigstwertige Bit von |V(i,j)| ungleich 1 ist) (Schritt 524), dann ist die Verarbeitung des ausgewählten Knotens für die laufende Iteration der Verarbeitungsschleife der Codiererprozedur abgeschlossen. Wenn ansonsten der im Schritt 522 für den aktuell ausgewählten Knoten ausgegebene Bitwert gleich 1 ist, gibt die Prozedur m Bits aus, einschließlich m-1 Bits, die auf |V(i,j)| – 2m-1 gesetzt sind, und ein Bit gleich sgn(V(i,j)) enthalten, wobei ferner der aktuell ausgewählte Knoten aus der Liste der Knoten entfernt wird (Schritt 526).
  • Die LN-Verarbeitungsprozedur der 11 wird fortgesetzt, bis alle Knoten in der Liste der Knoten verarbeitet worden sind. Wenn die Prozedur abgeschlossen ist, wurden die vorher in der Liste befindlichen Konten, deren Absolutwert größer oder gleich 2m-1 war, codiert und aus der Liste der Knoten entfernt, während für jeden der anderen Knoten in der Liste ein "0"-Bit ausgegeben wurde, um anzuzeigen, dass jeder dieser Knoten einen Absolutwert kleiner als 2m-1 aufweist.
  • Wie in 12 gezeigt ist, beginnt die LB-Verarbeitungsprozedur mit der Bestimmung, ob irgendwelche unverarbeiteten Blöcke in der Liste der Blöcke vorhanden sind (Schritt 540). Jedes mal, wenn die LB-Verarbeitungsprozedur aufgerufen wird, wird der Zeiger 356 auf den nächsten unverarbeiteten Block auf das allererste Element in der Liste zurückgesetzt. Solange die Liste nicht leer ist, erfasst daher der Schritt 540 die Anwesenheit unverarbeiteter Blöcke in der Liste, wenn die LB-Verarbeitungsprozedur zum ersten Mal aufgerufen wird. Im Schritt 500 jedoch (10), wird die Liste der Blöcke initialisiert, so dass sie einen Eintrag enthält. Im Schritt 542 wird der nächste unverarbeitete Block in der Liste der Blöcke ausgewählt und ein Bit wird ausgegeben, um anzuzeigen, ob V(i,j,k) ≥ 2m-1 ist. Wenn sich somit wenigstens ein Knoten im Block (i,j,k) befindet, dessen Absolutwert größer oder gleich 2m-1 ist, wird ein 1-Bit ausgegeben, während ansonsten ein 0-Bit ausgegeben wird.
  • Wenn der maximale Absolutwert des Knotens im ausgewählten Block |V(i,j,k)| kleiner als 2m-1 ist (d. h. wenn der im Schritt 542 ausgegebene Bitwert gleich 0 ist) (Schritt 544), dann ist die Verarbeitung des ausgewählten Blocks für die aktuelle Iteration der Verarbeitungsschleife der Codiererprozedur abgeschlossen. Ansonsten, wenn der im Schritt 542 ausgegebene Bitwert für den aktuellen ausgewählten Block gleich 1 ist, wird der ausgewählte Block weiter verarbeitet. Genauer, wenn die Blockgröße gleich oder kleiner als eine vorgegebene minimale Blockgröße, wie z. B. 2 × 2, ist (Schritt 546), werden alle Datenwerte im Block in einer vorgegebenen Reihenfolge verarbeitet, wobei jeder entweder codiert oder zum Ende der Knotenliste LN hinzugefügt wird. Für jeden Datenwert V(x,y) im Block (i,j,k) wird ein Bit ausgegeben, um anzuzeigen, ob |V(x,y)| ≥ 2m-1 ist. Wenn anschließend das für den Datenwert ausgegebene Bit gleich 1 ist, was anzeigt, dass |V(x,y)| ≥ 2m-1 ist, werden weitere m Bits an die komprimierte Datei ausgegeben, die m – 1 Bits, die gleich |V(x,y)| – 2m-1 gesetzt sind, und ein Bit gleich sgn(V(x,y)) enthalten. Für jeden Knoten (x,y) im Block, dessen Absolutwert kleiner als 2m-1 ist, wird ein entsprechender Knotenidentifizierer zum Ende der Liste der Knoten LN hinzugefügt (Schritt 548).
  • Wenn die Größe des ausgewählten Datenblocks nicht gleich oder kleiner als die vorgegebene minimale Blockgröße, wie z. B. 2 × 2, ist (Schritt 546), wird der Block in vier kleinere Blöcke (i,j,k-1), (i,j+2k-1,k-1), (i+2k-1,j,k-1), (i+2k-1,j+2k-1,k-1)unterteilt, wobei Blockidentifizierer für diese vier Blöcke zum Ende der Liste der Blöcke LB hinzugefügt werden (Schritt 550). Nach jedem Schritt 548 oder 550 wird der ausgewählte Block aus der Liste der Blöcke LB entfernt (Schritt 552).
  • Die LB-Verarbeitungsprozedur der 12 wird fortgesetzt, bis alle Blöcke in der Liste der Blöcke verarbeitet worden sind. Wenn die Prozedur abgeschlossen ist, wurden die vorher in der Liste befindlichen Blöcke, die wenigstens einen Knoten enthalten, dessen Absolutwert größer oder gleich 2m-1 war, aus der Liste der Blöcke entfernt und in kleinere Blöcke unterteilt oder in Knoten unterteilt, die codiert oder auf die Knotenliste gesetzt worden sind, während für jeden der anderen Blöcke in der Liste ein "0"-Bit ausgegeben wurde, um anzuzeigen, dass keiner der Knoten in diesen Blöcken einen Absolutwert größer oder gleich 2m-1 aufweist.
  • Der Beginn der Decodiererprozedur in der zweiten Ausführungsform, wie in 7 gezeigt, ist der gleiche wie in der ersten bevorzugten Ausführungsform. Die Prozedur zum Decodieren jedes Analysefeldes von 2n × 2n Datenwerten, die in 8 gezeigt ist, wird durch die in den 13, 14 und 15 gezeigten Decodiererprozeduren ersetzt.
  • Wie in 13 gezeigt ist, beginnt die Prozedur zur Decodierung eines Feldes von 2n × 2n Datenwerten mit dem Setzten eines ersten Eintrags, der das gesamte Analysefeld 2n × 2n repräsentiert, in der Liste der Blöcke (Schritt 560). Die Liste der Blöcke ist mit Ausnahme dieses ersten Eintrags leer. Ferner gibt im Schritt 560 die Codierungsprozedur einen Wert Bit(0,0,n) ein, der die maximale Anzahl von Bits angibt, die zum Decodieren irgendeines Datenwertes im gesamten decodierten Feld verwendet wird. Wenn Bit(0,0,n) gleich 0 ist (Schritt 570), zeigt dies an, dass alle Knoten im zu decodierenden Feld gleich 0 sind und somit die Decodierungsprozedur abgeschlossen ist (Schritt 572).
  • Ansonsten wird eine Steuervariable m auf Bit(0,0,n) gesetzt (d. h. die maximale Anzahl von Bits, die verwendet wird, um den Datenabtastwert mit dem größten Absolutwert im gesamten spezifizierten Satz von zu decodierenden Daten zu codieren) (Schritt 562).
  • Als nächstes werden unter Verwendung des aktuellen Wertes m die LN-Decodierungsverarbeitungsprozedur (Schritt 564) und die LB-Decodierungsverarbeitungsprozedur (Schritt 566) aufgerufen. Diese zwei Prozeduren verarbeiten und decodieren Knoten und Blöcke unabhängig davon, ob die Datenabtastwerte in diesen Knoten und Blöcken einen Absolutwert größer als 2m-1 aufweisen. Nach Ausführung dieser zwei Prozeduren wird die Steuervariable m um 1 dekrementiert (Schritt 568), wobei dann, wenn m immer noch größer als 0 ist (Schritt 570) die zwei Prozeduren erneut aufgerufen werden (d. h. die Schritt 564, 566 und 568 werden wiederholt). Dies wird fortgesetzt, bis m auf einen Wert von 0 dekrementiert worden ist, wobei zu diesem Zeitpunkt die Codierung des Datenfeldes abgeschlossen ist (Schritt 572).
  • Wie in 14 gezeigt ist, beginnt die LM-Decodierungsverarbeitungsprozedur mit der Bestimmung, ob irgendwelche unverarbeiteten Knoten in der Liste der Knoten vorhanden sind (Schritt 580). Jedes mal, wenn die LN-Verarbeitungsprozedur aufgerufen wird, wird der Zeiger 351 auf den nächsten unverarbeiteten Knoten auf das allererste Element in der Liste zurückgesetzt. Die Knotenliste ist anfangs leer, wenn die Decodierung jedes Analysefeldes beginnt. Im Schritt 582 wird der nächste unverarbeitete Knoten in der Liste der Knoten ausgewählt, wobei ein Bit eingegeben wird, das anzeigt, ob |V(i,j)|| ≥ 2m-1 ist. Wenn |V(i,j)|| ≥ 2m-1 ist, wird ein 1-Bit eingegeben, während ansonsten ein 0-Bit eingegeben wird.
  • Wenn der Absolutwert |V(i,j)| des ausgewählten Knotens (i,j) kleiner als 2m-1 ist (d. h. wenn der im Schritt 582 eingegebene Bitwert gleich 0 ist, oder wenn äquivalent das m-te niedrigstwertige Bit von |V(i,j)| ungleich 1 ist) (Schritt 584), ist die Verarbeitung des ausgewählten Knotens für die aktuelle Iteration der Verarbeitungsschleife der Decodiererprozedur abgeschlossen. Wenn ansonsten der im Schritt 582 eingegebene Bitwert für den aktuell ausgewählten Knoten gleich 1 ist, gibt die Prozedur m zusätzliche Bits ein, die m – 1 Bits, die einen Wert gleich |V(i,j)|| – 2m-1 repräsentieren, und ein Bit, das sgn(V(i, j)) repräsentiert, enthalten. Der rekonstruierte Knotenwert wird in das rekonstruierte Datenfeld geschrieben, wobei ferner der aktuell ausgewählte Knoten aus der Liste der Knoten entfernt wird (Schritt 586).
  • Die LN-Verarbeitungsprozedur der 14 wird fortgesetzt, bis alle Knoten in der Liste der Knoten verarbeitet worden sind. Wenn die Prozedur abgeschlossen ist, wurden die vorher in der Liste befindlichen Knoten, deren Absolutwert größer oder gleich 2m-1 war, decodiert und aus der Liste der Knoten entfernt.
  • Wie in 15 gezeigt ist, beginnt die LB-Decodiererverarbeitungsprozedur mit der Bestimmung, ob irgendwelche unverarbeiteten Blöcke in der Liste der Blöcke vorhanden sind (Schritt 600). Jedes mal, wenn die LB-Verarbeitungsprozedur aufgerufen wird, wird der Zeiger 356 auf den nächsten unverarbeiteten Block auf das allererste Element in der Liste zurückgesetzt. Solange die Liste nicht leer ist, erfasst daher der Schritt 600 die Anwesendheit unverarbeiteter Blöcke in der Liste, wenn die LB-Decodiererverarbeitungsprozedur zum ersten Mal aufgerufen wird. Im Schritt 602 wird der nächste unverarbeitete Block in der Liste der Blöcke ausgewählt, wobei ein Bit eingegeben wird, das anzeigt, ob |V(i,j,k)| ≥ 2m-1 ist. Wenn somit wenigstens ein Knoten im Block (i,j,k) vorhanden ist, dessen Absolutwert größer oder gleich 2m-1 ist, wird ein 1-Bit eingegeben, wobei ansonsten ein 0-Bit eingegeben wird.
  • Wenn der maximale Absolutwert der Knoten im ausgewählten Block |V(i,j,k)| kleiner als 2m-1 ist (d. h. wenn der im Schritt 602 eingegebene Bitwert gleich 0 ist) (Schritt 604), dann ist die Verarbeitung des ausgewählten Blocks für die aktuelle Iteration der Verarbeitungsschleife der Codiererprozedur abgeschlossen. Wenn ansonsten der im Schritt 602 eingegebene Bitwert für den aktuell ausgewählten Block gleich 1 ist, wird der ausgewählte Block weiterverarbeitet. Genauer, wenn die Blockgröße gleich oder kleiner als eine vorgegebene minimale Blockgröße, wie z. B. 2 × 2, ist (Schritt 606), werden alle Datenwerte im Block in einer vordefinierten Reihenfolge verarbeitet, wobei jeder entweder decodiert wird oder zum Ende der Knotenliste LN hinzugefügt wird. Für jeden Knoten (x,y) im Block (i,j,k) wird ein Bit eingegeben, das anzeigt, ob |V(x,y)|| ≥ 2m-1 gilt. Wenn anschließend der für den Knoten eingegebene Bitwert gleich 1 ist, was anzeigt, dass |V(x,y)|| ≥ 2m-1 gilt, werden weitere m Bits von der komprimierten Datei eingegeben, die m – 1 Bits einen Wert von |V(x,y)|| – 2m-1 repräsentieren, und ein Bit, das sgn(V(x,y)) repräsentiert, enthalten. Für jeden Knoten (x,y) im Block dessen Absolutwert kleiner als 2m-1 ist, wird ein entsprechender Knotenidentifizierer zum Ende der Liste der Knoten LN hinzugefügt (Schritt 608). Außerdem wird der Wert jedes Knotens, der vollständig decodiert worden ist, an das rekonstruierte Datenfeld ausgegeben.
  • Wenn die Größe des ausgewählten Datenblocks nicht gleich oder kleiner als die vordefinierte minimale Blockgröße, wie z. B. 2 × 2, ist (Schritt 606), wird der Block in vier kleinere Blöcke (i,j,k-1), (i,j+2k-1,k-1), (i+2k-1,j,k-1), (i+2k-1,j+2k-1,k-1)unterteilt, wobei Blockidentifizierer für diese vier Blöcke zum Ende der Liste der Blöcke LB hinzugefügt werden (Schritt 610). Nach jedem Schritt 608 oder 610 wird der ausgewählte Block aus der Liste der Blöcke LB entfernt (Schritt 612).
  • Die LB-Decodiererverarbeitungsprozedur der 15 wird fortgesetzt, bis alle Blöcke in der Liste der Blöcke verarbeitet worden sind. Wenn die Prozedur abgeschlossen ist, wurden die vorher in der Liste befindlichen Blöcke, die wenigstens einen Knoten enthalten, dessen Absolutwert größer oder gleich 2m-1 war, in kleinere Blöcke oder Sätze von Knoten unterteilt und aus der Liste der Blöcke entfernt, während für jeden der anderen Blöcke in der Liste ein "0"-Bit ausgegeben wurde, um anzuzeigen, dass keiner der Knoten in diesen Blöcken einen Absolutwert größer oder gleich 2m-1 aufweist.
  • Die zweite bevorzugte Ausführungsform erzeugt normalerweise die gleiche Menge an codierten Daten, jedoch gegenüber der ersten bevorzugten Ausführungsform in einer anderen Reihenfolge.
  • Andere Ausführungsformen
  • Obwohl die Beschreibung der Erfindung oben allgemein gezeigt hat, dass ein System, das die Erfindung verwendet, sowohl einen Codierer als auch einen Decodierer aufweisen würde, wird angenommen, dass in vielen kommerziellen Ausführungsformen nur eine kleine Anzahl von Benutzern oder Maschinen sowohl einen Codierer als auch einen Decodierer enthält, während großen Zahlen von Benutzern oder Maschinen nur einen Decodierer enthalten würden. Zum Beispiel können Decodierer gemäß der vorliegenden Erfindung in einer Bibliothek von Bildbetrachterprozeduren enthalten sein, die an Benutzer von verschiedenen WWW-Browser (WWW = World Wide Web) verteilt werden, während nur Benutzer, die daran interessiert sind, Bilder zu anderen Personen zu senden oder zu verteilen, die Benutzung des Codierers lizenzieren können.
  • Wie in 9 gezeigt ist, enthält in einer anderen Ausführungsform eine Verarbeitungs-Arbeitsstation 450 für Bilddaten oder andere Daten die gleichen Komponenten, wie oben mit Bezug auf die Arbeitsstation 300 in
  • 1 beschrieben worden ist, mit der Ausnahme, dass (A) die Arbeitsstation eine Codierer/Decodierer-Schaltung 452 enthält zum Durchführen der Codierung und der Decodierung von N × N (z. B. 32 × 32) Analysefeldern unter Verwendung einer fest verschalteten Logikschaltung, und (B) die Codierer- und Decodiererprozeduren durch Codierer- und Decodierersteuerprozeduren 460, 462 ersetzt sind, die jeweils in den 4 und 7 gezeigt sind.
  • In dieser zweiten bevorzugten Ausführungsform wird die Folge der Codierungs- und Decodierungsverarbeitungsschritte, die in den 5 und 8 gezeigt sind, mittels fest verschalteter Logikschaltung 452 ausgeführt, die eine Zustandsmaschine enthält, um die sequenzielle Datenverarbeitung zu steuern. Der Zustand der Zustandsmaschine wird bei jedem Schritt entsprechend den verarbeiteten Daten und den Datenwerten, die aus der Blockliste gelesen und gespeichert werden, aktualisiert.
  • Die vorliegende Erfindung ist gleichermaßen anwendbar auf die Codierung und Decodierung dreidimensionaler Datenfelder, und ist tatsächlich anwendbar auf die Codierung und Decodierung von N-dimensionalen Datenfeldern, wobei N eine ganze Zahl größer als 0 ist. Wenn z. B. ein dreidimensionales Feld codiert wird, kann die Datenanalysefeldgröße auf 32 × 32 × 32 gesetzt werden. Jeder Datenblock würde acht Unterblöcke aufweisen, der ein Achtel der Größe seines Stammdatenblocks aufweist, wobei die minimale Größe eines Datenblocks z. B. 2 × 2 × 2 beträgt, mit acht Datenwerten, die eine Codierung erfordern. Bei Vorgabe dieser Blockabmessungen und dieses Unterblockschemas würden die Codierungs- und Decodierungsverfahren in allen anderen Gesichtspunkten unverändert bleiben.
  • Allgemeiner, wenn schrittweise zunehmend kleinere Datenblöcke identifiziert werden, wird die Anzahl der Datenwerte, die in jedem identifizierten Datenblock enthalten sind (anders als ein Block, der dem gesamten spezifizierten Datenfeld entspricht), gleich den 2–N-fachen der Anzahl der Datenwerte des entsprechenden Stammdatenblocks sein, wobei N eine ganze Zahl größer als 0 ist. Somit kann das Codierungsverfahren leicht modifiziert werden, so dass die Anzahl der Unterblöcke für jeden Datenblock gleich 2, 8 oder 16 ist, statt der 4, die in der bevorzugten Ausführungsform verwendet werden, indem einfach neu definiert wird, wie jeder Datenblock in Unterblöcke zu unterteilen ist.
  • Ferner kann die Definition der minimalen Datenblockgröße modifiziert werden, so dass sie gleich irgendeiner vordefinierten Anzahl von Datenwerten entspricht, typischerweise gleich einer Ganzzahlpotenz von 2, und vorzugsweise gleich einer Ganzzahlpotenz von 4. Somit wäre es einfach, das Codierungsverfahren zu modifizieren, um Datenblöcke einer minimalen Größe von 16 Datenwerten zu verwenden, indem die Entscheidung im Schritt 376 verändert wird, um auf k = 2 (anstatt auf k = 1) zu testen, und indem im Block des Verfahrens für die Verarbeitung von Datenblöcken minimaler Größe 16 Ausgangswerte erzeugt werden.
  • Mit Bezug auf die Schritte 370, 378, 380, 382, 384 (der 5) zum Ausgeben von Werten, die den Bitlängenwert für jeden identifizierten Datenblock repräsentieren, wäre es möglich, andere Verfahren zum Ausgeben dieser Bitlängenwerte zu verwenden, einschließlich der Codierung jedes Bitlängenwertes des Datenblocks unter Verwendung einer Entropiecodierung, wie z. B. der Huffman-Codierung oder der arithmetischen Codierung.
  • Obwohl die vorliegende Erfindung mit Bezug auf einige spezifische Ausführungsformen beschrieben worden ist, dient die Beschreibung der Erläuterung der Erfindung und ist nicht als die Erfindung einschränkend auszulegen.
  • Verschiedene Modifikationen können von Fachleuten vorgenommen werden, ohne vom wahren Erfindungsgedanken und Umfang der Erfindung, wie durch die beigefügten Ansprüche definiert, abzuweichen.

Claims (13)

  1. Verfahren des Codierens einer spezifizierten Datenanordnung, das die Schritte umfasst: schrittweises Identifizieren schrittweise kleinerer Blöcke von Daten innerhalb der spezifizierten Datenanordnung, wobei die Datenblöcke in einer vordefinierten Reihenfolge identifiziert werden; Verarbeiten jedes identifizierten Datenblocks durch: Bestimmen einer maximalen Anzahl von Bits, die erforderlich ist, um irgendeinen einzelnen Datenwert im identifizierten Datenblock zu repräsentieren; dann, wenn die bestimmte maximale Anzahl gleich 0 ist, Ausgeben von Daten, die anzeigen, dass der identifizierte Datenblock nur Null-Werte enthält; dann, wenn die bestimmte maximale Anzahl ungleich 0 ist und der identifizierte Datenblock mehr als eine vordefinierte Grenzanzahl von Datenwerten enthält, Ausgeben von Daten, die die bestimmte maximale Anzahl anzeigen; und dann, wenn die bestimmte maximale Anzahl ungleich 0 ist und der identifizierte Datenblock nicht mehr als die vordefinierte Grenzanzahl von Datenwerten enthält, Ausgeben von Daten, die jeden der Datenwerte im identifizierten Datenblock repräsentieren; wobei die von dem Verfahren ausgegebenen Daten in einer Reihenfolge ausgegeben werden, die der vordefinierten Reihenfolge entspricht, in der die Datenblöcke identifiziert werden.
  2. Verfahren nach Anspruch 1, wobei jeder identifizierte Block eine Anzahl von Datenwerten enthält; und die Anzahl von Datenwerten, die in jedem identifizierten Datenblock außer einem Datenblock, der der gesamten Datenanordnung entspricht, enthalten ist, gleich dem 2–N-fachen der Anzahl von Datenwerten in einem entsprechenden Stammdatenblock ist, wobei N eine ganze Zahl größer als 0 ist.
  3. Verfahren nach Anspruch 1, wobei der Identifizierungsschritt das Speichern eines Datenblockeintrags, der jeden identifizierten Datenblock repräsentiert, der wenigstens einen Nicht-Null-Wert enthält, in einer Liste von Datenblockeinträgen enthält, wobei die Datenblockeinträge in der vordefinierten Reihenfolge in der Datenblockliste gespeichert werden; wobei der Verarbeitungsschritt das Auswählen eines Datenblocks aus der Datenblockliste und das anschließende Verarbeiten dieses ausgewählten Datenblocks enthält, so dass Datenblöcke in der vordefinierten Reihenfolge durch den Verarbeitungsschritt verarbeitet werden.
  4. Verfahren nach Anspruch 3, wobei der Datenblockeintrag-Speicherschritt das Speichern eines Bitlängenwertes für jeden Datenblockeintrag enthält, der die bestimmte maximale Anzahl von Bits angibt, die benötigt wird, um irgendeinen einzelnen Datenwert in dem dem Datenblockeintrag entsprechenden Datenblock zu repräsentieren; und der Schritt des Ausgebens von Daten, die jeden der Datenwerte im identifizierten Datenblock repräsentieren, das Lesen des gespeicherten Bitlängenwertes, der dem identifizierten Datenblock entspricht, und das Codieren jedes Datenwertes mit einer Anzahl von Datenbits entsprechend dem gelesenen Bitlängenwert enthält.
  5. Verfahren nach Anspruch 4, wobei der Schritt des Speicherns eines Bitlängenwertes für jeden Datenblockeintrag enthält: dann, wenn der Datenblock der gesamte spezifizierte Datenblock ist, Speichern des Bitlängenwertes; und dann, wenn der Datenblock kleiner als der gesamte spezifizierte Datenblock ist und einen entsprechenden Stammdatenblock aufweist, Bestimmen einer Differenz zwischen dem Bitlängenwert des Stammdatenblocks und dem Bitlängenwert des Datenblocks, und Speichern eines Wertes entsprechend der bestimmten Differenz der Bitlängenwerte.
  6. Verfahren nach Anspruch 5, wobei der Schritt des Speicherns des Bitlängendifferenzwertes enthält: dann, wenn der Bitlängendifferenzwert kleiner als der Bitlängenwert des Stammdatenblocks ist, Speichern einer ersten Anzahl von Datenbits jeweils gleich einem ersten vordefinierten Binärwert, wobei die erste Anzahl dem Bitlängendifferenzwert entspricht, gefolgt von einem Bit gleich einem zweiten vordefinierten Binärwert, der verschieden ist vom ersten vordefinierten Binärwert; und dann, wenn der Bitlängendifferenzwert gleich dem Bitlängenwert des Stammdatenblocks ist, nur Speichern der ersten Anzahl von Bits jeweils gleich dem ersten vordefinierten Binärwert.
  7. Verfahren des Codierens einer Bilddatenanordnung, die ein Bild repräsentiert, die Schritte umfassend: Anwenden einer vordefinierten Transformation auf die Bilddatenanordnung, um eine verarbeitete Bilddatenanordnung zu erzeugen; Aufteilen der verarbeiteten Bilddatenanordnung in einen Satz von nicht-überlappenden Datenanordnungen, wobei wenigstens eine Mehrzahl der Datenanordnungen jeweils eine vorgegebene Größe von 2N × 2N aufweist, wobei N eine ganze Zahl ist; Codieren jeder der Datenanordnungen; wobei der Schritt des Codierens jeder Datenanordnung enthält: schrittweises Identifizieren schrittweise kleinerer Blöcke von Daten innerhalb der Datenanordnung; wobei die Datenblöcke in einer vordefinierten Reihenfolge identifiziert werden; Verarbeiten jedes identifizierten Datenblocks durch: Bestimmen einer maximalen Anzahl von Bits, die erforderlich ist, um irgendeinen einzelnen Datenwert im identifizierten Datenblock zu repräsentieren; dann, wenn die bestimmte maximale Anzahl gleich 0 ist, Ausgeben von Daten, die anzeigen, dass der identifizierte Daten block nur Null-Werte enthält; dann, wenn die bestimmte maximale Anzahl ungleich 0 ist und der identifizierte Datenblock mehr als eine vordefinierte Grenzanzahl von Datenwerten enthält, Ausgeben von Daten, die die bestimmte maximale Anzahl anzeigen; und dann, wenn die bestimmte maximale Anzahl ungleich 0 ist und der identifizierte Datenblock nicht mehr als die vorgegebene Grenzanzahl von Datenwerten enthält, Ausgeben von Daten, die jeden der Datenwerte im identifizierten Datenblock repräsentieren; wobei die von dem Verfahren ausgegebenen Daten in einer Reihenfolge ausgegeben werden, die der vordefinierten Reihenfolge entspricht, in der die Datenblöcke identifiziert werden.
  8. Verfahren des Decodierens codierter Daten, die eine spezifizierte Datenanordnung repräsentieren, die Schritte umfassend: (A) schrittweises Lesen von Datenbits der codierten Daten, wobei die gelesenen Datenbits Informationen über eine Folge von schrittweise kleineren Blöcken von Daten innerhalb der spezifizierten Datenanordnung repräsentieren, und in Übereinstimmung mit einer vordefinierten Datenblockverarbeitungsfolge Identifizieren von Datenblöcken, die Teilmengen der gelesenen Datenbits entsprechen; (B) Verarbeiten der Teilmenge der gelesenen Datenbits für jeden identifizierten Datenblock durch: (B1) dann, wenn der identifizierte Datenblock mehr als eine vordefinierte Grenzanzahl von Datenwerten enthält, (B1a) Interpretieren der Teilmenge der gelesenen Datenbits, um für jeden einer Mehrzahl von kleineren Datenblöcken, die innerhalb des identifizierten Datenblocks enthalten sind, einen Bitlängenwert zu bestimmen, der einer maximalen Anzahl von Bits entspricht, die verwendet wird, um irgendeinen einzelnen Datenwert im kleineren Datenblock zu repräsentieren; und (B1b) für jeden der kleineren Datenblöcke: (B1b1) dann, wenn der Bitlängenwert für den kleineren Datenblock gleich 0 ist, Ausgeben von rekonstruierten Datenanordnungs-Nulldatenwerten an Positionen, die dem kleineren Datenblock entsprechen; und (B1b2) dann, wenn der Bitlängenwert ungleich 0 ist, vorübergehendes Speichern der Bitlängendaten, die dem kleineren Datenblock zugeordnet sind, der dem Bitlängenwert entspricht; und (B2) dann, wenn der identifizierte Datenblock nicht mehr als die vordefinierte Grenzanzahl von Datenwerten enthält, Interpretieren der Teilmenge der gelesenen Datenbits gemäß den für den identifizierten Datenblock gespeicherten Bitlängendaten, um die vordefinierte Anzahl von Datenwerten zu rekonstruieren und die rekonstruierten Datenwerte an die rekonstruierte Datenanordnung an Positionen, die dem identifizierten Datenblock entsprechen, auszugeben.
  9. Verfahren nach Anspruch 8, wobei jeder identifizierte Block eine Anzahl von Datenwerten enthält; und die Anzahl von Datenwerten, die in jedem identifizierten Datenblock außer einem Datenblock, der der gesamten Datenanordnung entspricht, enthalten ist, gleich dem 2–N-fachen der Anzahl von Datenwerten in einem entsprechenden Stammdatenblock ist, wobei N eine ganze Zahl größer als 0 ist.
  10. Verfahren nach Anspruch 8, wobei der Identifizierungsschritt das Speichern eines Datenblockeintrags, der jeden identifizierten Datenblock repräsentiert, der wenigstens einen Nicht-Null-Wert enthält, in einer Datenblockliste enthält; wobei die Datenblockeinträge in der Datenblockliste in einer Reihenfolge gespeichert werden, die mit der vordefinierten Datenblockverarbeitungsfolge übereinstimmt; wobei der Verarbeitungsschritt das Auswählen eines Datenblocks aus der Datenblockliste und das anschließende Lesen und Verarbeiten von Datenbits von den codierten Daten, die dem ausgewählten Datenblock entsprechen, enthält, so dass durch den Verarbeitungsschritt Datenblöcke in einer Reihenfolge verarbeitet werden, die mit der vordefinierten Datenblockverarbeitungsfolge übereinstimmt.
  11. Verfahren nach Anspruch 10, wobei der Datenblockeintrag-Speicherschritt das Speichern des bestimmten Bitlängenwertes für den Datenblock, der dem Datenblockeintrag entspricht, für jeden Datenblockeintrag enthält; und der Schritt B2 das Lesen des gespeicherten Bitlängenwertes, der dem identifizierten Datenblock entspricht, und das Decodieren der gelesenen Datenbits entsprechend dem gelesenen Bitlängenwert für den identifizierten Datenblock enthält.
  12. Verfahren nach Anspruch 11, wobei der Schritt des Lesens des gespeicherten Bitlängenwertes, der dem identifizierten Datenblock entspricht, enthält: dann, wenn der Datenblock gleich dem gesamten spezifizierten Datenblock ist, Lesen des Bitlängenwertes; dann, wenn der Datenblock kleiner als der gesamte spezifizierte Datenblock ist und einen entsprechenden Stammdatenblock aufweist, Lesen eines Differenzwertes, der einer Differenz zwischen dem Bitlängenwert des Stammdatenblocks und dem Bitlängenwert des Datenblocks entspricht, und Bestimmten eines entsprechenden Bitlängenwertes für den identifizierten Datenblock durch Subtrahieren des Differenzwertes von einem vorher bestimmten Bitlängenwert für den entsprechenden Stammdatenblock.
  13. Verfahren nach Anspruch 12, wobei der Schritt des Lesens des gespeicherten Bitlängendifferenzwertes enthält: dann, wenn der Bitlängendifferenzwert kleiner als der Bitlängenwert des entsprechenden Stammdatenblocks ist, Lesen einer ersten Anzahl von Datenbits jeweils gleich einem ersten vordefinierten Binärwert, wobei die erste Anzahl dem Bitlängendifferenzwert entspricht, gefolgt von einem Bit gleich einem zweiten vordefinierten Binärwert, der verschieden ist vom ersten vordefinierten Binärwert; und dann, wenn der Bitlängendifferenzwert gleich dem Bitlängenwert des Stammdatenblocks ist, nur Lesen der ersten Anzahl von Bits jeweils gleich dem ersten vordefinierten Binärwert.
DE69736329T 1996-11-27 1997-11-10 Verschachtelte verteilte kodierung von spärlich bestückten datensätzen Expired - Lifetime DE69736329T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/758,590 US5748116A (en) 1996-11-27 1996-11-27 System and method for nested split coding of sparse data sets
US758590 1996-11-27
PCT/US1997/020326 WO1998024188A1 (en) 1996-11-27 1997-11-10 Nested split coding of sparse data sets

Publications (2)

Publication Number Publication Date
DE69736329D1 DE69736329D1 (de) 2006-08-24
DE69736329T2 true DE69736329T2 (de) 2007-08-30

Family

ID=25052303

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69736329T Expired - Lifetime DE69736329T2 (de) 1996-11-27 1997-11-10 Verschachtelte verteilte kodierung von spärlich bestückten datensätzen

Country Status (5)

Country Link
US (3) US5748116A (de)
EP (1) EP0944961B1 (de)
JP (1) JP3378257B2 (de)
DE (1) DE69736329T2 (de)
WO (1) WO1998024188A1 (de)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6031940A (en) * 1996-11-27 2000-02-29 Teralogic, Inc. System and method for efficiently encoding video frame sequences
US5748116A (en) * 1996-11-27 1998-05-05 Teralogic, Incorporated System and method for nested split coding of sparse data sets
AUPO472897A0 (en) * 1997-01-22 1997-02-20 Canon Information Systems Research Australia Pty Ltd A method for digital image compression
US5949911A (en) * 1997-05-16 1999-09-07 Teralogic, Inc. System and method for scalable coding of sparse data sets
US6393060B1 (en) * 1997-12-31 2002-05-21 Lg Electronics Inc. Video coding and decoding method and its apparatus
AUPP248498A0 (en) 1998-03-20 1998-04-23 Canon Kabushiki Kaisha A method and apparatus for encoding and decoding an image
AUPP248298A0 (en) * 1998-03-20 1998-04-23 Canon Kabushiki Kaisha A method and apparatus for hierarchical encoding and decoding an image
US6347157B2 (en) * 1998-07-24 2002-02-12 Picsurf, Inc. System and method for encoding a video sequence using spatial and temporal transforms
JP2000151974A (ja) * 1998-11-11 2000-05-30 Sony Corp 信号編集装置、信号編集方法
US6356665B1 (en) 1998-12-09 2002-03-12 Sharp Laboratories Of America, Inc. Quad-tree embedded image compression and decompression method and apparatus
US6239842B1 (en) 1998-12-18 2001-05-29 Oplus Technologies Ltd. Method of de-interlacing video signals using a mixed mode spatial and temporal approximation technique
EP1032216A1 (de) 1999-02-24 2000-08-30 Canon Kabushiki Kaisha Vorrichtung und Verfahren zur Transformation eines digitalen Signals
JP3285331B2 (ja) * 1999-04-12 2002-05-27 オリンパス光学工業株式会社 画像記録装置および電子カメラ装置
US8212893B2 (en) * 1999-06-08 2012-07-03 Verisign, Inc. Digital camera device and methodology for distributed processing and wireless transmission of digital images
FR2801743B1 (fr) * 1999-11-25 2002-02-15 Canon Kk Codage et decodage de signal numerique
US6671413B1 (en) * 2000-01-24 2003-12-30 William A. Pearlman Embedded and efficient low-complexity hierarchical image coder and corresponding methods therefor
US20020021758A1 (en) * 2000-03-15 2002-02-21 Chui Charles K. System and method for efficient transmission and display of image details by re-usage of compressed data
US6915015B1 (en) 2000-03-21 2005-07-05 Hewlett-Packard Development Company, L.P. Apparatus for and method for SNR scalable quad-tree bit-plane coding
US6560597B1 (en) 2000-03-21 2003-05-06 International Business Machines Corporation Concept decomposition using clustering
WO2001091039A1 (en) * 2000-05-23 2001-11-29 Compression Engine Technologies, Inc. Memory-efficient image compression
US20020089549A1 (en) * 2001-01-09 2002-07-11 Munro James A. Image having a hierarchical structure
US6611211B2 (en) * 2001-05-04 2003-08-26 International Business Machines Corporation Data mask coding
JP2003319184A (ja) * 2002-04-18 2003-11-07 Toshiba Tec Corp 画像処理装置および画像処理方法および画像表示方法および画像記憶方法
US7551787B2 (en) 2003-01-28 2009-06-23 International Business Machines Corporation Adaptive compression quality
FR2852179A1 (fr) 2003-03-06 2004-09-10 Thomson Licensing Sa Procede de codage d'une image video
US7191376B2 (en) * 2003-12-04 2007-03-13 Mitsubishi Electric Research Laboratories, Inc. Decoding Reed-Solomon codes and related codes represented by graphs
KR100643269B1 (ko) * 2004-01-13 2006-11-10 삼성전자주식회사 Roi를 지원하는 영상 코딩 방법 및 장치
US7653255B2 (en) 2004-06-02 2010-01-26 Adobe Systems Incorporated Image region of interest encoding
WO2008007760A1 (fr) * 2006-07-13 2008-01-17 Nec Corporation Dispositif de codage et de décodage, procédé de codage et procédé de décodage
FR2909499B1 (fr) * 2006-12-01 2009-01-16 Commissariat Energie Atomique Procede et dispositif de decodage pour codes ldpc, et appareil de communication comprenant un tel dispositif
US8503527B2 (en) 2008-10-03 2013-08-06 Qualcomm Incorporated Video coding with large macroblocks
US9092530B1 (en) * 2012-04-05 2015-07-28 Netapp, Inc. Systems and methods for rapidly provisioning virtual storage objects
GB201219599D0 (en) 2012-10-31 2012-12-12 Tangentix Ltd Apparatus and method for compression image data

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4599567A (en) * 1983-07-29 1986-07-08 Enelf Inc. Signal representation generator
US5163104A (en) * 1988-02-24 1992-11-10 Transtechnology Corporation Digital image processing technique including improved gray scale compression
US4974187A (en) * 1989-08-02 1990-11-27 Aware, Inc. Modular digital signal processing system
US5014134A (en) * 1989-09-11 1991-05-07 Aware, Inc. Image compression method and apparatus
US5384725A (en) * 1990-05-18 1995-01-24 Yale University Method and apparatus for encoding and decoding using wavelet-packets
US5262958A (en) * 1991-04-05 1993-11-16 Texas Instruments Incorporated Spline-wavelet signal analyzers and methods for processing signals
US5347479A (en) * 1991-12-27 1994-09-13 Nec Corporation Small-size wavelet transform apparatus
JPH05282159A (ja) * 1992-03-31 1993-10-29 Toshiba Corp 配列圧縮方式
US5392255A (en) * 1992-10-15 1995-02-21 Western Atlas International Wavelet transform method for downward continuation in seismic data migration
US5412741A (en) * 1993-01-22 1995-05-02 David Sarnoff Research Center, Inc. Apparatus and method for compressing information
JP3293920B2 (ja) * 1993-01-22 2002-06-17 キヤノン株式会社 画像処理装置およびその方法
US5388182A (en) * 1993-02-16 1995-02-07 Prometheus, Inc. Nonlinear method and apparatus for coding and decoding acoustic signals with data compression and noise suppression using cochlear filters, wavelet analysis, and irregular sampling reconstruction
JP2933457B2 (ja) * 1993-02-18 1999-08-16 日本電気株式会社 ウェーブレット変換符号化方法
US5420891A (en) * 1993-03-18 1995-05-30 New Jersey Institute Of Technology Multiplierless 2-band perfect reconstruction quadrature mirror filter (PR-QMF) banks
WO1995019683A1 (en) * 1994-01-14 1995-07-20 Houston Advanced Research Center Boundary-spline-wavelet compression for video images
US5748786A (en) * 1994-09-21 1998-05-05 Ricoh Company, Ltd. Apparatus for compression using reversible embedded wavelets
JP2930092B2 (ja) * 1994-11-15 1999-08-03 日本電気株式会社 画像符号化装置
US5764807A (en) * 1995-09-14 1998-06-09 Primacomp, Inc. Data compression using set partitioning in hierarchical trees
US5682152A (en) * 1996-03-19 1997-10-28 Johnson-Grace Company Data compression using adaptive bit allocation and hybrid lossless entropy encoding
US5748116A (en) * 1996-11-27 1998-05-05 Teralogic, Incorporated System and method for nested split coding of sparse data sets
US6101279A (en) * 1997-06-05 2000-08-08 Wisconsin Alumni Research Foundation Image compression system using block transforms and tree-type coefficient truncation
US5887084A (en) * 1997-11-07 1999-03-23 Polaroid Corporation Structuring a digital image into a DCT pyramid image representation

Also Published As

Publication number Publication date
JP2000505274A (ja) 2000-04-25
DE69736329D1 (de) 2006-08-24
EP0944961A4 (de) 2000-05-24
JP3378257B2 (ja) 2003-02-17
EP0944961B1 (de) 2006-07-12
WO1998024188A1 (en) 1998-06-04
US5748116A (en) 1998-05-05
EP0944961A1 (de) 1999-09-29
US6236762B1 (en) 2001-05-22
US5886651A (en) 1999-03-23

Similar Documents

Publication Publication Date Title
DE69736329T2 (de) Verschachtelte verteilte kodierung von spärlich bestückten datensätzen
DE69829700T2 (de) Bildkompression mit Diskreter-Wavelet-Transformation DWT
DE69635055T2 (de) Kodierung von zerotree-informationen in einem bildkodierungssystem mit wavelettransformation
DE69837017T2 (de) Zoomen mit vorbestimmten Grössen von Indexbildern
DE4133460C2 (de) Verfahren zum Verdichten von Bildern
DE19844752B4 (de) Ein verbessertes Kompressions- und Dekompressionssystem mit reversiblen Wavelets und verlustbehafteter Rokonstruktion
DE19819198B4 (de) Reversible DCT für verlustfreie/verlustbehaftete Kompression
DE69930886T2 (de) Datenverarbeitungsgerät und -verfahren sowie Speichermedium
US6347157B2 (en) System and method for encoding a video sequence using spatial and temporal transforms
DE69628760T2 (de) Speicherung und wiedergewinnung von grossen digitalen bildern
DE69737514T2 (de) System und verfahren zum bearbeiten wellenartiger und umgekehrten wellenartigen transformationen von digitalen daten
DE69722601T2 (de) Datenkompression mit hybrider verlustloser entropiekodierung von run-length codes
DE19534943B4 (de) Vorrichtung zur Komprimierung unter Verwendung von eingebetteten Kleinwellen
DE69835528T2 (de) Eingebetteter dct-basierte standbildkodierungsalgorithmus
DE19534730B4 (de) Verfahren zum Codieren und Decodieren von Daten
DE69836432T2 (de) Bildcoder und -decoder
DE69837430T2 (de) Verfahren zur datenkompression
DE602004001993T2 (de) Transformations basiertes restbewegungsrahmen kodierungsverfahren mit übervollständiger basis und zugehörige vorrichtung zur videokompression
EP3434015A1 (de) Datenkompression mittels adaptiven unterabtastens
DE60015755T2 (de) Verlustfreie adaptive codierung von daten eines endlichen alphabets
DE102005051723A1 (de) Vorrichtung und Verfahren zur Bildverarbeitung
WO2002015584A2 (de) Verfahren zur ganzzahligen approximation von transformationskoeffizienten sowie coder und decoder
DE19903605B4 (de) Verfahren zum Neuanordnen von Signalverlaufspacket-Koeffizienten
US5893100A (en) System and method for tree ordered coding of sparse data sets
EP0742673A2 (de) Verfahren zur Bilddatenreduktion mittels fraktaler Bildcodierung sowie Encoder und Decoder zur Durchführung des Verfahrens

Legal Events

Date Code Title Description
8364 No opposition during term of opposition