DE60012717T2 - Bildcodierung unter verwendung einer umordnung von wavelet-koeffizienten - Google Patents

Bildcodierung unter verwendung einer umordnung von wavelet-koeffizienten Download PDF

Info

Publication number
DE60012717T2
DE60012717T2 DE2000612717 DE60012717T DE60012717T2 DE 60012717 T2 DE60012717 T2 DE 60012717T2 DE 2000612717 DE2000612717 DE 2000612717 DE 60012717 T DE60012717 T DE 60012717T DE 60012717 T2 DE60012717 T2 DE 60012717T2
Authority
DE
Germany
Prior art keywords
coefficients
data
coding
wavelet
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
DE2000612717
Other languages
English (en)
Other versions
DE60012717D1 (de
Inventor
S. Henrique MALVAR
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.)
OL Security LLC
Original Assignee
Microsoft 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
Priority claimed from US09/280,135 external-priority patent/US6678419B1/en
Priority claimed from US09/277,255 external-priority patent/US6477280B1/en
Priority claimed from US09/276,954 external-priority patent/US6850649B1/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Application granted granted Critical
Publication of DE60012717D1 publication Critical patent/DE60012717D1/de
Publication of DE60012717T2 publication Critical patent/DE60012717T2/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/63Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/46Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
    • 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
    • H04N19/64Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets characterised by ordering of coefficients or of bits for transmission
    • 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]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)
  • Dc Digital Transmission (AREA)

Description

  • Feld der Erfindung
  • Diese Erfindung betrifft allgemein das Feld der Bildkompression und insbesondere eine verbesserte Reihenfolge von Wavelet-Koeffizienten mit einem adaptiven Lauflängen-Codierungsmechanismus für das Codieren und Decodieren von Bilddaten.
  • Hintergrund der Erfindung
  • Digitale Bilder werden in vielen Anwendungen wie Web-Seiten, Enzyklopädien auf CD-ROM, Digitalkameras und anderen verwendet. In den meisten Fällen ist eine Kompression der Bilder erforderlich, um sie in einen Speicher geringer Kapazität einzubringen oder um sie in einer kurzen Zeitspanne herabzuladen. In einer typischen digitalen Kamera werden z.B. Bilder mit einer Auflösung von 1024 × 768 Bildelementen (Pixel) mit einer Auflösung von 12 bis 24 Bit pro Bildelement aufgenommen. Die Rohdaten in jedem Bild betragen deshalb etwa 1,2 bis 2,5 Megabyte. Um mehrere Bilder z.B. auf einer Computer-Diskette unterzubringen, ist es nötig die Menge der von einem jeden Bild verwendeten Daten zu reduzieren. Je größer das erreichte Kompressionsverhältnis ist, desto mehr Bilder passen auf eine Diskette oder Speicherkarte, und desto schneller können sie über in der Bandbreite begrenzte Übertragungsmedien wie Telefonleitungen übertragen werden.
  • Bildkompression wurde über die vergangenen zwanzig Jahre extensiv untersucht. Der JPEG-Standard, der durch das JPEG-(joint photographic experts group)-Komitee der ISO (International Standards Organization) definiert wurde, wurde 1992 definiert und ist das verbreitetste Verfahren für die Kompression digitaler Bilder. In JPEG werden kleine quadratische Blöcke von Bildelementen (der Dimension 8 × 8) mittels einer diskreten Cosinustransformation (DCT) in den Frequenzbereich abgebildet. Die DCT-Koeffizienten werden quantisiert (durch einen Skalierungsfaktor dividiert und auf die nächste ganze Zahl gerundet) und über ein feststehendes Zigzag-Muster auf einen eindimensionalen Vektor abgebildet. Der Vektor wird über eine Kombination von Lauflängen- und Huffman-Codierung codiert.
  • Die unabhängige Verarbeitung eines kleinen 8×8-Blocks in JPEG ist von einem Implementierungsstandpunkt aus vorteilhaft, besonders bei billiger Hardware. Jedoch führt sie auch zu dem Hauptproblem mit JPEG: Artefakte durch Blockbildung. Weil die Quantisierungsfehler benachbarter Blöcke unter den Blöcken unkorreliert aber innerhalb der Blöcke korreliert sind, werden die Grenzen der 8×8-Blöcke im rekonstruierten Bild aufgrund der potentiellen Differenz beim Codieren zwischen benachbarten Blöcken sichtbar. Solche Artefakte werden als Fliesenbildungs- oder Blockbildungsartefakte bezeichnet, die durch die Verwendung von Transformationen mit überlappenden Basisfunktionen reduziert (aber nicht vollständig beseitigt) werden können.
  • Ein effizienter Weg zur Beseitigung von Blockbildungsartefakten ist der Ersatz der Block-DCT durch eine Zerlegung in Wavelets, welches eine effiziente Zeit-Frequenz-Repräsentation ergibt. Sehr gute Kompressionsleistung kann erreicht werden durch Quantisierung und Codierung von Wavelet-Koeffizienten.
  • Viele auf Wavelets basierende Bildkompressionssysteme sind in den vergangenen wenigen Jahren in der technischen Literatur angegeben worden. Mit Wavelets ist es möglich, Kompressionsverhältnisse zu erreichen, die typisch von 20% bis 50% besser als JPEG sind. Wichtiger ist, dass Wavelet-Transformationen zu Bildern führen, die nicht die störenden Blockbildungsartefakte von JPEG haben. Deshalb werden auf Wavelets basierende Transformationen zunehmend beliebt. Tatsächlich verwenden in der nächsten Überarbeitung von JPEG, die JPEG2000 genannt wird, alle berücksichtigten Vorschläge Wavelets.
  • Einige frühere Wavelet-Transformationen zerlegen Bilder in Koeffizienten, die mit 16 Unterbändern korrespondieren. Dies ergibt eine 4×4-Matrix von Unterbändern, die als ein Großblockformat bezeichnet wird und eine spektrale Zerlegung und Reihenfolgebildung der Kanäle repräsentiert. Die Buchstaben L und H werden verwendet, um Tiefpassfilterung bzw. Hochpassfilterung für jedes Unterband zu identifizieren. Das erste Unterband umfasst LL- und HL-Koeffizienten, wobei der erste Buchstabe in jedem Satz mit horizontaler Filterung und der zweite Buchstabe mit vertikaler Filterung korrespondiert. Zwei Stufen werden bei jeder Unterbandfilterungskombination verwendet. Die Reihenfolge korrespondiert mit Frequenzen, die von links nach rechts und von unten nach oben zunehmen. Diese Reihenfolgebildung ist festgelegt, um zu ermöglichen, dass sowohl Codierung als auch Decodierung auf eine festgelegte Weise funktionieren. Dann wird Quantisierung der Koeffizienten durchgeführt, gefolgt durch eine Form komprimierender Codierung der Koeffizienten, einschließlich der Huffman-Codierung oder arithmetischer Codierung, um das Bild weiter zu komprimieren. Diese Formen der Codierung können ziemlich komplex sein, einschließlich Nullbaumstrukturen, welche von den Datentypen abhängen. Diese Codierer sind ziemlich komplex und viele müssen für unterschiedliche, zu komprimierende Bilder modifiziert werden, was es schwierig macht, sie in Hardware zu implementieren.
  • Eine Lösung zu der Komplexität eines Nullbaum-basierten Ansatzes zur Reihenfolgebildung von Wavelet-Koeffizienten wird offengelegt in dem Dokument von Ordentlich E. et al: "A low complexity modeling approach for embedded coding of wavelet compression coefficients", Proceedings DCC '98 Data Compression Conference (CAT. Nr. 98TB100225), Proceedings DCC '98 Data Compression Conference, Snowbird, UT, USA, 30. März – 1. April 1998, Seiten 408 – 417, XP000925096 1998 Los Alamitos, CA, USA, IEEE Comput. Soc, USA ISBN 0-8186-8406-2. Ordentlich legt einen zweistufigen Prozess offen, in dem ein Satz von Koeffizienten als eine Funktion von zuvor codierter Information außerhalb des Satzes in zwei oder mehrere Sätze von Koeffizienten zerlegt wird. Die zweite Stufe zerlegt die zwei oder mehreren Sätze von Koeffizienten unter Verwendung gewöhnlicher Kontext-Modellierung, die durch eine ausgewählte Reihenfolgebildung eingeschränkt ist (Seite 410 letzter Abschnitt – Seite 411 erster Abschnitt).
  • Während Wavelet-Kompression die Blockbildungs- und Geister- oder Moskitoeffekte der JPEG-Kompression beseitigt, besteht ein Bedarf für alternative Verfahren für die Transformation von Bildern in den Frequenzbereich und Kompression solcher Transformationen, einschließlich von Verfahren, die einfach zu implementieren sind, und die entweder durch Hardware oder durch Software implementiert werden können.
  • F. Rosetti et al., "Improved scanning methods for wavelet coefficients of video signals", Signal Processing: Image Communication 8 (1996) 365 – 378, legt Verfahren offen, um die Codierungseffizienz der Wavelet-Transformation vom Blickpunkt der Abtasttechniken zu verbessern.
  • Zusammenfassung der Erfindung
  • Es ist das Ziel der Erfindung, ein Codierungs- und Decodierungsverfahren und einen korrespondierenden Apparat vorzusehen mit reduzierter Komplexität der Nullbaum-basierten Reihenfolgebildung der Wavelet-Koeffizienten.
  • Dieses Ziel wird durch die Erfindung gelöst, wie in den unabhängigen Ansprüchen beansprucht wird.
  • Bevorzugte Ausführungsformen werden in den abhängigen Ansprüchen definiert.
  • Die Umordnung quantisierter Wavelet-Koeffizienten wird durchgeführt, um große und kleine Wavelet-Koeffizienten in getrennten Gruppen zusammenzuführen, ohne dass die Verwendung von Daten-abhängigen Datenstrukturen erforderlich wird. Die Koeffizienten werden dann adaptiv auf der Basis eines Lauflängencodes codiert, welcher kontinuierlich einen Parameter modifiziert, der die Codeworte steuert, die verwendet werden, um Ketten quantisierter Koeffizienten zu repräsentieren, wobei versucht wird, die Anzahl der Bit zu minimieren, die in den Codewörtern benötigt werden. Da das Reihenfolgebildungsmuster feststeht und die Codierung der Codewörter keine modifizierte Tabelle für jedes Bild benötigt, eignet sich die Erfindung selbst für leichtere Implementierungen in Hardware oder Software. Weitere Vorteile umfassen die Beseitigung von Blockbildungsartefakten und eine Einpasscodierung für jedes gewünschte Kompressionsverhältnis.
  • Ein Decodierer wendet das Obige in umgekehrter Reihenfolge an. Die Decodierung der codierten Koeffizienten wird zuerst durchgeführt, gefolgt von einer Umordnung der Koeffizienten. Die umgeordneten Koeffizienten werden dann einer inversen Wavelet-Transformation unterzogen, um die transformierten und komprimierten Daten wie etwa Bildpunktdaten wiederherzustellen.
  • In einem Aspekt der Erfindung werden die quantisierten Wavelet-Koeffizienten in Blöcken neu geordnet, so dass eine Matrix von Indizes die gröbsten Koeffizienten in der oberen linken Ecke enthält, und Tief-Hoch-Unterbänder und Hoch-Tief-Unterbänder abwechselnd in immer größeren Blöcken eingefüllt werden, so dass die Tief-Hoch-Unterbänder den oberen Teil der Matrix bilden, und die Hoch-Tief-Unterbänder die linke Seite der Matrix bilden. Um mit einer niedrigeren Auflösung zu decodieren, braucht man nur die feineren Unterbänder fallenzulassen. Dieser Typ der Haufenbildung produziert Koeffizienten, die Wahrscheinlichkeitsverteilungen haben, die angenähert eine Normalverteilung haben (z.B. lange Folgen von Nullen).
  • Die Codierung der Koeffizienten basiert auf einer neuen adaptiven Art von Lauflängencodierung. Das kürzeste Codewort wird zugeordnet, um eine Kette des wahrscheinlichsten Zeichens mit einer Länge von 2k zu haben, wo k ein Parameter ist. k wird angepasst auf der Basis aufeinander folgender Zeichen, die angetroffen werden. k wird vergrößert, wenn das Zeichen dasselbe ist, und verkleinert, wenn das Zeichen unterschiedlich ist. Zusätzlich zu einem Lauflängencodierer kann auch eine adaptive arithmetische Codierung verwendet werden.
  • In einem Aspekt der Erfindung werden die Koeffizienten als Bitebenen codiert. Dies vergrößert weiter die Wahrscheinlichkeit, dass lange Ketten von Null angetroffen werden, und vergrößert weiter die Kompressionsverhältnisse, die erreicht werden können.
  • Dadurch, dass keine Verwendung von Daten-abhängigen Datenstrukturen wie Nullbäume oder eine getrennte Liste für eingestellte Partitionen in Bäumen verlangt werden, sind Implementationen in Hardware einfacher zu bilden, und Implementationen in Software können schneller ablaufen.
  • Kurze Beschreibung der Zeichnungen
  • 1 ist ein Blockdiagramm eines Computersystems, auf dem die vorliegende Erfindung implementiert werden kann.
  • 2 ist ein Blockdiagramm eines Codierers, der Wavelet-Koeffizienten umordnet und sie in einer verlustfreien, adaptiven Weise codiert.
  • 3 ist ein Blockdiagramm eines Decodierers, der die codierten, von dem Codierer in 2 produzierten Koeffizienten decodiert und zurück ordnet.
  • 4 ist ein Blockdiagramm der zurückgeordneten, von dem Codierer in 2 produzierten Wavelet-Koeffizienten.
  • 5 ist ein Flussdiagramm, das den Betrieb des Koeffizienten-Codierers von 2, der die Koeffizienten in Bitebenen trennt, auf hoher Stufe zeigt.
  • 6 ist ein Flussdiagramm, das weitere Einzelheiten des Betriebs des adaptiven Lauflängen-Codierers von 2 zeigt.
  • 7 ist ein Flussdiagramm, das das Schreiben einer Matrix von Koeffizienten in einer umgeordneten Weise zeigt, konsistent mit dem in 4 gezeigten Blockdiagramm.
  • 8 ist ein Flussdiagramm, das die Verwendung des Codierers von 2 und des Decodierers von 3 in einem Software-Anwendungspaket zeigt, welches Bilddaten handhabt.
  • Detaillierte Beschreibung
  • In der folgenden detaillierten Beschreibung beispielhafter Ausführungsformen der Erfindung wird Bezug genommen auf die begleitenden Zeichnungen, die einen Teil davon bilden, und in denen zum Zweck der Veranschaulichung beispielhafte Ausführungsformen gezeigt werden, in denen die Erfindung praktiziert werden kann. Diese Ausführungsformen werden in ausreichendem Detail beschrieben, um in der Technik bewanderten Personen zu ermöglichen, die Erfindung zu praktizieren, und es ist zu verstehen, dass andere Ausführungsformen verwendet werden können, und dass logische, mechanische, elektrische und andere Veränderungen gemacht werden können, ohne dass von dem Umfang der vorliegenden Erfindung abgewichen wird. Die folgende detaillierte Beschreibung ist deshalb nicht in einem begrenzenden Sinn zu verstehen, und der Umfang der vorliegenden Erfindung wird nur durch die angefügten Ansprüche definiert.
  • Die detaillierte Beschreibung ist aufgeteilt in vielfache Abschnitte. Ein erster Abschnitt beschreibt den Betrieb eines Computer-Systems, auf dem die vorliegende Erfindung implementiert werden kann. Diesem folgt eine Beschreibung einer festgelegten Umordnung der quantisierten Wavelet-Koeffizienten und ihrer adaptiven Lauflängencodierung auf hoher Stufe. Ein Decodierer für solche codierten Daten wird ebenfalls beschrieben. Weiteres Detail ausgewählter Blöcke der Beschreibung auf hoher Stufe wird dann unter Verwendung von Flussdiagrammen beschrieben. Diesem folgt eine allgemeine Beschreibung der Verwendung solcher Codierer und Decodierer in einem Büroanwendungspaket von Software-Anwendungen. Eine Zusammenfassung beschreibt einige potentielle Vorteile und beschreibt weitere alternative Ausführungsformen.
  • Hardware und Betriebsumgebung
  • 1 bietet eine kurze, allgemeine Beschreibung einer geeigneten Computer-Umgebung, in der die Erfindung implementiert werden kann. Die Erfindung wird im Folgenden in dem generellen Kontext von Computer-ausführbaren Programmmodulen beschrieben, die Instruktionen enthalten, welche von einem PC ausgeführt werden können. Programmmodule umfassen Routinen, Objekte, Komponenten, Datenstrukturen u.s.w., welche bestimmte Aufgaben erfüllen oder bestimmte abstrakte Datentypen implementieren. Die in der Technik bewanderten Personen werden erkennen, dass die Erfindung mit anderen Computer-System-Konfigurationen praktiziert werden können, einschließlich in der Hand gehaltene Vorrichtungen, Multiprozessorsysteme, Mikroprozessor-basierte, programmierbare Verbraucher-Elektroniken, Netzwerk-PC, Minicomputer, Großrechner und Ähnliches, welche Multimedia-Fähigkeiten haben. Die Erfindung kann ebenfalls praktiziert werden durch verteilte Computer-Umgebungen, in denen Aufgaben durch entfernte Verarbeitungsvorrichtungen durchgeführt werden, welche über ein Kommunikationsnetzwerk miteinander verbunden sind. In einer verteilten Computer-Umgebung können Programmmodule sowohl in lokalen wie auch in entfernten Speichervorrichtungen liegen.
  • 1 zeigt eine Allzweck-Computer-Vorrichtung in der Form eines konventionellen PC 20, welches eine Verarbeitungseinheit (CPU) 21, einen Systemspeicher 22 und einen Systembus 23 umfasst, der den Systemspeicher und andere Systemkomponenten mit der Verar beitungseinheit 21 verbindet. Der Systembus kann ein Typ von mehreren Typen sein, einschließlich einem Speicherbus oder einer Speichersteuerung, einem Peripheriebus und einem lokalen Bus, und kann eine aus einer Menge von Busstrukturen verwenden. Der Systemspeicher 22 umfasst Nur-Lese-Speicher (ROM) 24 und Speicher mit wahlfreiem Zugriff (RAM) 25. Ein BIOS (basic input/output system) 26, das im ROM 24 abgelegt ist, enthält die Basisroutinen, welche Information zwischen den Komponenten des PC 20 übertragen. Das BIOS 26 enthält auch Hochlaufroutinen für das System. Der PC 20 umfasst ferner ein Festplattenlaufwerk 27 für das Lesen von und das Schreiben auf eine Festplatte (nicht gezeigt), ein Magnetplattenlaufwerk 28 für das Lesen von und das Schreiben auf eine entnehmbare Magnetplatte 29 und ein optisches Plattenlaufwerk 30 für das Lesen von und das Schreiben auf eine entfernbare optische Platte 31 wie einen CD-ROM oder ein anderes optisches Medium. Das Festplattenlaufwerk 27, das Magnetplattenlaufwerk 28 und das optische Plattenlaufwerk 30 sind mit dem Systembus 23 über eine Festplattenlaufwerksschnittstelle 32, eine Magnetplattenlaufwerksschnittstelle 33 bzw. eine optische Plattenlaufwerksschnittstelle 34 verbunden. Die Laufwerke und ihre zugeordneten, Computer-lesbaren Medien erlauben nicht flüchtige Speicherung von Computer-lesbaren Instruktionen, Datenstrukturen, Programmmodulen und anderen Daten für den PC 20. Obgleich die hier beschriebene, beispielhafte Umgebung eine Festplatte, eine entnehmbare Magnetplatte 29 und eine entnehmbare optische Platte 32 anwendet, werden die in der Technik bewanderten Personen erkennen, dass andere Typen von Computer-lesbaren Medien, auf denen für den Computer zugängliche Daten gespeichert sind, ebenfalls in der beispielhaften Betriebsumgebung verwendet werden können. Solche Medien können umfassen: Magnetkassetten, FLASH-Speicherkarten, DVD (digital versatile disk), Bernoulli-Kassetten, RAM, ROM und Ähnliches.
  • Die Programmmodule können auf der Festplatte, der Magnetplatte 29, der optischen Platte 31, im ROM 24 und im RAM 25 gespeichert sein. Die Programmmodule können ein Betriebssystem 35, ein oder mehrere Anwendungsprogramme 36, andere Programmmodule 37 und Programmdaten 38 umfassen. Ein Benutzer kann Kommandos und Information in den PC über Eingabevorrichtungen wie eine Tastatur 40 und eine Zeigevorrichtung 42 eingeben. Andere Eingabevorrichtungen (nicht gezeigt) können umfassen: ein Mikrofon, einen Steuerknüppel, ein Spielbrett, eine Satellitenschüssel, einen Scanner oder Ähnliches. Diese und andere Eingabevorrichtungen werden oft über eine an den Systembus 23 angeschlossene serielle Schnittstelle 46 mit der Verarbeitungseinheit 21 verbunden; aber sie können über andere, in 1 nicht gezeigte Schnittstellen angeschlossen werden, wie etwa eine parallele Schnittstelle, eine Spieleschnittstelle oder eine USB-(universal serial bus)-Schnittstelle. Ein Monitor 47 oder eine andere Anzeigevorrichtung ist ebenfalls über eine Schnittstelle wie ein Videoadapter 48 mit dem Systembus 23 verbunden. Zusätzlich zu dem Monitorumfassen PC typisch andere Peripherievorrichtungen (nicht gezeigt), wie Lautsprecher und Drucker.
  • Der PC 20 kann in einer Netzwerkumgebung arbeiten unter Verwendung logischer Verbindungen zu einem oder mehreren entfernten Computern, wie dem entfernten Computer 49. Der entfernte Computer 49 kann ein anderer PC, ein Server, ein Router, ein Netzwerk-PC, ein gleichartiger PC oder ein gewöhnlicher Netzwerkknoten sein. Er umfasst typisch viele oder alle der oben in Verbindung mit dem PC 20 beschriebenen Komponenten: jedoch ist in 1 nur eine Speichervorrichtung 50 veranschaulicht. Die in 1 angezeigten logischen Verbindungen umfassen ein LAN (local-area network) 51 und ein WAN (wide-area network) 52. Solche Netzwerkumgebungen sind allgemein in Büros, Firmen-weiten Computer-Netzwerken, Intranetzen und dem Internet anzutreffen.
  • Bei einer Plazierung in einer LAN-Netzwerkumgebung ist der PC 20 über eine Netzwerkschnittstelle oder einen Netzwerkadapter 53 mit dem lokalen Netzwerk 51 verbunden. Bei Anwendung in einer WAN-Netzwerkumgebung wie dem Internet umfasst der PC 20 typisch einen Modem 54 oder eine andere Einrichtung für die Bereitstellung von Kommunikationen über das Netzwerk 52. Der Modem 54 kann ein internes Modem in dem PC 20 oder ein externes Modem sein, und verbindet über die serielle Schnittstelle 46 mit dem Systembus 23. In einer Netzwerkumgebung können Programmmodule wie jene, die Mikrosoft®-Word umfassen, welche als innerhalb des PC 20 residierend gezeigt ist, oder Teile davon in der entfernten Speichervorrichtung 50 gespeichert sein. Natürlich sind die gezeigten Netzwerkverbindungen nur zur Veranschaulichung gegeben, und andere Einrichtungen zur Einrichtung von Kommunikationsverbindungen zwischen den Computern können sie ersetzen.
  • Software kann unter Verwendung unterschiedlicher Verfahren entworfen werden, einschließlich objektorientierter Programmierverfahren. C++ und Java sind zwei Beispiele üblicher objektorientierter Computerprogrammiersprachen, welche die mit objektorientierter Programmierung einhergehende Funktionalität bieten. Objektorientierte Programmiervertah ren bieten ein Mittel, Datenstücke (Variablen) und auf sie arbeitende Funktionen (Methoden) in einer einzigen, Klasse genannten Größe einzukapseln. Objektorientierte Programmierverfahren bieten auch eine Möglichkeit zur Erzeugung neuer Klassen auf der Basis existierender Klassen.
  • Ein Objekt ist eine Instantüerung einer Klasse. Die Datenstücke eines Objektes sind Attribute, die innerhalb des Computerspeichers gespeichert werden, und die Methoden sind ausführbarer Computercode, der auf diesen Daten arbeitet, zusammen mit dem möglicherweise Anbieten anderer Dienste. Dieser Begriff eines Objekts wird in der vorliegenden Erfindung dadurch ausgenutzt, dass bestimmte Aspekte der Erfindung als Objekte in einer Ausführungsform implementiert werden.
  • Eine Schnittstelle ist eine Gruppe von verwandten Funktionen, die in einer benannten Einheit organisiert sind. Jede Schnittstelle kann durch einen eindeutigen Identifizierer identifiziert werden. Schnittstellen haben keine Instantüerung, d.h., eine Schnittstelle ist nur eine Definition ohne den ausführbaren Code, der für die Implementierung der Verfahren benötigt wird, die durch die Schnittstelle definiert sind. Ein Objekt kann eine Schnittstelle durch Anbieten eines ausführbaren Codes für das durch die Schnittstelle spezifizierte Verfahren anbieten. Der durch das Objekt bereitgestellte, ausführbare Code muss mit den durch die Schnittstelle spezifizierten Definitionen übereinstimmen. Das Objekt kann auch zusätzliche Methoden bereitstellen. Die in der Technik bewanderten Personen werden erkennen, dass Schnittstellen nicht darauf begrenzt sind, eine objektorientierte Programmierumgebung zu verwenden oder in ihr verwendet zu werden.
  • Codierer- und Decodierer-Beschreibung auf hoher Stufe
  • Ein vereinfachtes Blockdiagramm eines Codierers auf der Basis einer Wavelet-Tranformation ist in 2 gezeigt, und eines korrespondierenden Decodierer ist in 3 gezeigt. Während der Codierer und der Decodierer beschrieben werden hinsichtlich Bildpunktdaten als Eingabe bzw. Ausgabe, können andere Daten auf Wunsch ebenfalls transformiert werden. In der gezeigten Ausführungsform werden Bildpunktdaten für einen Wavelet-Transformationsblock 210 bereitgestellt, welcher auf bekannte Weise arbeitet, um Wavelet- Koeffizienten einem Quantisierer 220 zu übergeben. Die Wavelet-Koeffizienten sind in einem Großblockformat wie in dem Abschnitt zum technischen Hintergrund beschrieben. Quantisierung wird durchgeführt mittels eines gleichförmigen Quantisierers, der gesteuert wird durch einen die Quantisierungsstufe definierenden Schwellwert T. Dies führt dazu, dass jeder Koeffizient, der zwischen die Stufen fällt, durch den Mittelwert der Stufe repräsentiert wird. Je kleiner T ist, desto weniger Verlust wird durch die Quantisierung verursacht. Somit ist die Ausgabe von Block 220 eine Folge ganzer Zahlen, die quantisierte Wavelet-Koeffizienten sind. Wie in vielen anderen Anwendungen kann der Quantisierer auf der Basis normalen Rundens arbeiten, oder von Runden zu Null hin (auch bekannt als ein Quantisierer mit einer "Totzone").
  • Eine Umordnungs- und Blockbildungsfunktion oder -block 230 gruppiert Wavelet-Koeffizienten in Haufen gleicher Werte. Das ergibt eine Häufung oder Gruppierung der Blöcke von Frequenzkoeffizienten, die höchstwahrscheinlich Null sind. Die Umordnung vergrößert die Wahrscheinlichkeit der Gruppierung ähnlicher Daten in dem Sinn, dass die Daten dazu neigen, monoton abfallende Verteilung der Amplituden zu haben. Der erste Block neigt dazu, Daten der größeren Amplitude zu haben, wohingegen in den nachfolgenden Blöcken die Amplituden der Wavelet-Koeffizienten dazu neigen, abzufallen. Die Gruppierung wird durchgeführt durch Festlegen einer Abtastreihenfolge, die Daten-unabhängig ist. Ein Satz solcher Gruppenbildung ist in 4 gezeigt, z.B. mit 64 Blöcken von Wavelet-Koeffizienten. In 4 werden niederfrequente Komponenten zur oberen linken Ecke der Gruppierung hin plaziert, mit einem Abwechseln der Koeffizienten von Tief-Hoch-Unterbändern und Hoch-Tief-Unterbändern auf jeder Stufe. Der Umordnungs- und Blockbildungsblock 230 ergibt eine Folge von Makroblöcken in der angezeigten Abtastreihenfolge. Der erste Block, Block 0, enthält alle Koeffizienten der Stufe 0 des Wavelet-Baums. Dies korrespondiert mit der gröbsten Auflösung. Die Blöcke 0 bis 3 umfassen alle Koeffizienten der Stufe 1. Die Blöcke 0 bis 15 umfassen alle Koeffizienten der Stufe 2, während die Stufe 3 die Blöcke 0 bis 63 umfasst. Es wird bemerkt, dass die Blöcke auf jeder Stufe zwischen Tief-Hoch-Unterbändern und Hoch-Tief-Unterbändern abwechseln, wobei Tief-Hoch ganz oben in der Folge ist. In dem Mathematischen Beschreibungsabschnitt im Folgenden wird der Vorteil dieser bestimmten Reihenfolgebildung diskutiert. Andere Reihenfolgebildungen sind möglich, wie von einer in der Technik bewanderten Person zu erkennen ist, aber die obige Reihenfolgebil dung scheint besser zu funktionieren als andere. Die Bits werden dann sequentiell codiert, wobei mit dem höchstwertigen Bit begonnen wird.
  • Ein adaptiver Codierungsblock 240 nimmt die Makroblöcke auf und codiert sie auf verlustfreie Weise. Die Häufung der Blöcke ergibt zu komprimierende Daten, die große Haufen von Nullen haben. Ein weiteres Umordnen der Daten durch Codierung auf Basis einer Bitebene vergrößert die Wahrscheinlichkeit des Antreffens großer Ketten von Nullen. Ein Beginn mit dem höchstwertigen Bit für die erste Bitebene führt zu einer größeren Wahrscheinlichkeit langer Ketten von Null. Ferner stellt dies auch sicher, dass die relevantesten Daten zuerst codiert werden. Zu dem Zeitpunkt der Codierung der dritten oder der vierten Bitebene sind Null und Eins etwa gleich wahrscheinlich, und eine geradlinige Binärcodierung kann effektiv verwendet werden.
  • Der Codierer ist ein Anpassung eines Golomb-Rice-Codierers mit adaptiven Lauflängenmodifikationen. Vereinfacht dargestellt wird eine Kette von 2k Nullen repräsentiert durch das Codewort, das aus einem einzigen Bit gleich Null besteht. Die Länge der Kette von Nullen, die durch das Codewort von Null repräsentiert wird, wird durch den Parameter k gesteuert, der beim Eintreffen von Daten verändert wird, basierend auf der beobachteten Frequenz von Nullen. Wenn ein Wert Null codiert wird, wird angenommen, dass Nullen am wahrscheinlichsten sind, und so wird der Wert des Parameters k vergrößert. Wenn ein nicht Null betragender Wert angetroffen wird, wird k verkleinert. Durch geeignete Steuerung des Betrags solcher Vergrößerungen und Verkleinerungen kann der Codierer gut einer Kette von Bits mit einer sich verändernden Wahrscheinlichkeit von Null folgen, ohne den Aufwand der tatsächlichen Abschätzung dieser Wahrscheinlichkeit. Eine Rückwirkungsschleife 245 wird verwendet, um die rückwärts gerichtete, adaptive Natur des Codierers 240 zu repräsentieren. Diese Codierung leistet effiziente Kompression und schnelle Anpassung an Veränderungen in den Statistiken der ankommenden Daten. Der Codierer 240 liefert einen Bitstrom ab, der effektiv progressiv dadurch ist, dass die relevanteste Information am Anfang des Bitstroms vorgesehen ist. Da die geringstwertigen Bit in der letzten Bitebene codiert werden, können sie für Bitströme geringerer Auflösung effektiv weggeworfen werden oder brauchen nicht codiert zu werden, wie in einem Auflösungstreueblock 250 repräsentiert. Die ist nützlich für Datenübertragungen mit geringerer Bandbreite.
  • Die Decodierung entsprechend der Darstellung in 3 ist im Wesentlichen das Umgekehrte der Codierung und Datentransformationen. Der Bitstrom codierter Daten, wie durch den Codierer von 2 produziert, wird empfangen an einem verlustfreien adaptiven Decodierungsblock 310. Der Bitstrom kann empfangen werden direkt von dem Codierer, aus einem lokalen Speicher oder von einem entfernten Codierer oder Speicher über eines von vielen funktionstüchtigen Übertragungsmedien wie durch Satellitenübertragung, Kabelübertragung oder ein anderes Netzwerk. Der Decodierungsblock 310 empfängt die Regeln, die während der Codierung entwickelt wurden, über eine Vorwärtsführungsleitung 315. Der Block 310 empfängt im Wesentlichen die zu verwendende Kettenlänge und rekonstruiert die Daten entsprechend den Regeln. Wiederum arbeitet er auf einer Blockstufe, aber das ist keine Anforderung dieser Erfindung. Es macht die Dinge einfach leichter als das Arbeiten mit einer gesamten Repräsentation eines Bilds oder anderer Daten zu gleicher Zeit, was eine größere Speichermenge oder Zwischenspeicherung verlangen würde, falls solche Speichermengen nicht verfügbar sind. Eine Form der Reduktion der Abbildungstreue kann in Block 310 durchgeführt werden einfach durch Weglassen der Decodierung des letzen Bit in der Bitebene. Dies verdoppelt effektiv die Stufengröße, die durch den Parameter T gesteuert wird. Es ist ein einfacher Weg, die Wiedergabetreue der Daten zu reduzieren.
  • Die Daten von Block 310 sollten identisch sein zu den ganzzahligen Daten, die aus Block 230 herauskommen. Jedoch können Bildschichten höherer Auflösung in Block 320 an diesem Punkt beseitigt werden, wie in Block 320 angezeigt, einfach durch effektives Vermeiden der Nutzung von Wavelet-Koeffizienten höherer Frequenz. Dies wäre nützlich, falls das für die Anzeige eines Bilds oder eines Satzes von Bildern verwendete Fenster klein ist. Block 330 wird dann verwendet, um die Blöcke zurück zu ihren ursprünglichen Positionen umzuordnen oder zurückzuordnen. Die Ausgabe des Umordnungsblocks 330 sind die ganzen Zahlen, die in Block 340 unter Verwendung der Stufengröße zurück multipliziert werden müssen, die durch einen Kopf in dem empfangenen Bitstrom bereitgestellt werden. Dies produziert rekonstruierte Wavelet-Koeffizienten. Der Kopf liefert auch Information über die Größe des Bildes und andere Standardbildformatdaten. Eine inverse Wavelet-Transformation wird dann auf bekannte Weise in Block 350 durchgeführt. Es wird bemerkt, dass die einzigen Verluste außer den ausgewählten, gewünschten Reduktionen der Wiedergabetreue oder Auflösung im Quantisierungsschritt vorkommen, welcher durch Modifizieren des Parameters T steuerbar ist.
  • Der optionale Auflösungsreduktionsblock 320 kann auf einige unterschiedliche Weisen arbeiten. Ein Weg für die Beseitigung der Daten ist, die betroffenen ganzen Zahlen auf Null zu setzen. Ein weiterer Weg zur Reduktion der Auflösung ist, die Operation des Blocks 330 für rücktauschendes Umordnen zu modifizieren, welcher angewiesen werden kann, die Werte an einem gewünschten Punkt auf Null zu setzen. Bei Instruieren sowohl des Umordnungsblocks 330 als auch des inversen Wavelet-Transformationsblocks 350, wo die Nullen beginnen, können sie leicht modifiziert werden, die nicht benötigte Verarbeitung der aktuellen Daten an solch einem Punkt zu beseitigen.
  • Die adaptive Codierung und Decodierung der vorliegenden Erfindung arbeitet sehr gut mit Daten, die Haufen von Nullen mit sich verändernden Statistiken haben. Dieser Typ von Daten kann auch charakterisiert werden, dass er eine hohe Wahrscheinlichkeit von Daten mit nahezu exponentiellem Abfall der Wahrscheinlichkeit auf beiden Seiten der Nullen hat. Multimediadaten wie statische Bilddaten und Videodaten haben diese Charakteristik. Ferner hat die Transformation vieler Typen physikalischer Daten ebenfalls diesen Typ der Charakteristik. Bei der Erfassung physikalischer Daten tritt die Information normaler Weise in nur wenigen Stellen auf, was bedeutet, dass die meisten der anderen Daten Null sind. Symmetrie der Daten ist ebenfalls eine gewünschte Charakteristik, damit dieser Typ der Codierung am besten arbeitet. Mit anderen Worten: ein exponentieller Abfall sowohl der negativen als auch der positiven Werte auf beiden Seiten einer Informationsspitze ist vorteilhaft. Beispiele solcher physikalischen Daten umfassen ECG und andere biometrische Datentypen.
  • Mathematische Beschreibung der Codierung
  • Nun wird eine mathematische Beschreibung der oben angegebenen Transformationen und der Codierung und Decodierung mit Bezug auf 2 und 3 angeführt. Die folgenden Schritte definieren den Codierungsalgorithmus.
    • 1. Gegeben ein Bildfeld x(m, n), m = 1, 1,..., M–1, n = 0, 1,..., N–1, berechne seine Wavelet-Transformations-Koeffizienten X(r, s), r= 0,1,..., M–1, s = 0,1,..., N–1.
    • 2. Jeder Koeffizient X(r, s) wird quantisiert entsprechend q(r, s) = sgn(X(r, s))⌊|(X(r, s))| / T⌋ (1) wo sgn(·) die gewöhnliche Signumfunktion und T ein Quantisierungsschwellwert ist. Dieser Schritt bildet die kontinuierlichen Wavelet-Koeffizienten (X(r, s) in eine Folge von ganzen Zahlen q(r, s) ab. Dies ist der einzige Schritt, der einen Informationsverlust einbringt.
    • 3. Die quantisierten Koeffizienten werden umgeordnet und in Blöcke gruppiert nach: uk(I) = q(rk + mod(I, MB), sk + ⌊ I / MB ⌋) ) (2) für I = 0,1,..., L–1 und k = 0,1,..., K–1, wo L = MB NB die Blockgröße, K = M N / L die Gesamtzahl der Blöcke und MB und NB definiert sind durch MB = M I 2J und NB = N I 2J. Der Parameter J steuert die Größe der rechteckigen Blöcke quantisierter Koeffizienten, die in uk gruppiert sind, und damit die Blockgröße. Für jedes k sind die linken Eckindizes (rk, sk) entsprechend der zuvor beschriebenen Abtastreihenfolge definiert.
    • 4. Die Blöcke werden in Makroblöcke U; fester Größe L KB gruppiert, in der Form: Ui= {uk(I)} mit k= i KB,i KB + 1,...,i KB+KB–1. Für jeden Makroblock werden seine Bitebenen aufeinanderfolgend entsprechend dem adaptiven Lauflängen-/Rice-Codierer (RLR-Codierer) quantisiert. Die binäre Codierung der Anzahl der von dem RLR-Code für U; benötigten Bit, gefolgt von den aktuellen RLR-Ausgabebit wird an den Ausgabebitstrom angehängt.
  • Die folgenden Schritte werden dann verwendet, um den PWC-Bitstrom zu decodieren:
    • 1. Decodiere die RLR-codierten Bits in Makroblöcken U; für i = 0, 1,..., Imax– 1. Falls Imax < K ist, wird eine Version der Wavelet-Koeffizienten mit niedrigerer Auflösung wiederhergestellt. Es wird bemerkt, dass innerhalb eines jeden Makroblocks nur die ersten wenigen Bitebenen decodiert werden, bei gegebener gewünschter Wiederherstellungsgenauigkeit. Alle Bit in den Bitebenen q(r, s), die zu decodieren nicht gewünscht wird, werden auf Null gesetzt. Die Skalierbarkeit der Auflösung wird erreicht durch Wahl von Imax < K, wohingegen die Skalierbarkeit der Wiedergabetreue erreicht wird durch Decodierung nur einer Untermenge der Bitebenen für jeden Makroblock.
    • 2. Nach der Wiederherstellung von q(r, s) werden die Wavelet-Koeffizienten wiederhergestellt durch:
      Figure 00160001
      Es wird bemerkt, dass die Quantisierungsregel in (2), kombiniert mit der Wiederherstellungsregel in (3) einen gleichförmigen Quantisierer mit einer Totzone um den Ursprung umfasst, der nahezu optimal ist für skalare Quantisierung minimaler Entropie von Zufallszahien mit (doppelseitig exponentialer) Wahrscheinlichkeitsnormalverteilung.
  • Um die Wavelet-Koeffizienten umzuordnen, wie in Schritt 3 des PWC-Codierers beschrieben, wird die Reihenfolge der Indizes der oberen linken Ecke (rk, sk) definiert. Die in 4 dargestellte Abtastreihenfolge wird verwendet, wobei MB = M / 2J und NB = N / 2J die Größe eines jeden Blocks steuern. Der Parameter J sollte so gewählt werden, dass Block 0 genau alle Wavelet-Koeffizienten der gröbsten Auflösung enthält, d.h. alle Skalierungsfunktionskoeffizienten. Deshalb sollte J gleich der Anzahl der Auflösungsstufen (der Baumtiefe) sein, die in der Wavelet-Transformation verwendet wird. Es ist leicht, aus 4 die Reihenfolge aller Indizes der oberen linken Ecke (rk, sk) abzuleiten.
  • Aus 4 wird klar, dass es für die Decodierung eines vollständigen Satzes von Koeffizienten auf einer jeden gewünschten Stufe der Auflösung wünschenswert ist, alle Blöcke von Index 0 bis zu Kmax–1 zu verwenden, wo Kmax eine Potenz von 4 ist. Deshalb wird in Schritt 1 des PWC-Decodierers Imax–1 so gewählt, dass Kmax eine Potenz von 4 ist.
  • Der Grund für das abwechselnde Abtasten der Tief-Hoch- (LH) und Hoch-Tief-(HL)-Wavelet-Koeffizienten innerhalb derselben Auflösungsstufe ist einfach. Unter der Annahme, dass das Originalbild ein bestimmtes Merkmal (oder kein Merkmal) an einer räumlichen Stelle hat, ist es wahrscheinlich, dass Haufen sowohl der LH-Unterbänder als auch der HL-Unter bänder, die mit jener Stelle korrespondieren, große (oder kleine) Werte haben werden. Durch Sicherstellen, dass Paare von Blöcken von den LH-Unterbändern und HL-Unterbändern, die mit derselben räumlichen Stelle korrespondieren, in einem Makroblock zusammenhängend oder zumindest nahe zueinander oder dicht beieinander erscheinen, ist es deshalb wahrscheinlicher, Haufen von großen oder von kleinen Werten zu erzeugen. Das vergrößert die Wahrscheinlichkeit langer Läufe von Nullen in den Bitebenen der quantisierten Koeffizienten.
  • Ein Flussdiagramm in 7 beschreibt einen Algorithmus, der für das Schreiben der Blöcke von Koeffizienten in der in 4 gezeigten Reihenfolge verwendet wird. Der Algorithmus kann nach Wunsch in Computer-Programminstruktionen oder in Hardware, Firmware oder einer Kombination von allen implementiert werden. Der Algorithmus wird mit dem Startschritt 710 begonnen. Eine Eingabematrix Q, die M×N quantisierte Wavelet-Koeffizienten enthält, wird in Schritt 715 gelesen. Die Koeffizienten sind wie diejenigen, die durch den Quantisierungsblock 220 bereitgestellt werden. Eine Anzahl von Wavelet-Stufen wird in Schritt 720 in einer bekannten Weise als JW definiert. In Schritt 725 wird ein Blockgröße als NV × HV definiert, wobei NH = MI (2JW) und NV = NI (2JW) ist. Dann wird der erste Ausgabeblock in Schritt 730 geschrieben, und IH und IV werden als NH bzw. NV für die Verwendung bei der Definition der Schleifen zum Schreiben der weiteren Blöcke, die in der Größe größer sind, initialisiert. Als einfaches Beispiel wird angenommen, dass in 4 die Matrix Q 16 × 16 ist, mit 4 Stufen und einer Blockgröße von 1. Dies ergibt einen Anfangswert für IH und IV von 1. In weiteren Beispielen ist die Blockgröße größer, wie 8 × 8 oder 16 × 16 oder noch höher.
  • Ein Entscheidungsschritt 740 wird verwendet, um zu bestimmen, ob die gesamte Matrix der Koeffizienten geschrieben wurde, durch Prüfung, ob IH kleiner als M ist. Falls IH immer noch kleiner als M ist, müssen mehr Koeffizienten geschrieben werden. Wie in 4 zu sehen ist, sind die ersten Blöcke von Koeffizienten von der Dimension 1 × 1, und dann sind sie vergrößert zu 2 × 2 und 4 × 4 u.s.w. Die nächsten Sätze von Flussdiagrammschritten werden verwendet, um die nachfolgenden Blöcke zu schreiben durch Schleifenbildung von Eins zu einem Blockgrößenparameter NBLK, welcher in Schritt 745 als IH/NH eingestellt wird. Eine verschachtelte Schleife, die in Schritt 750 unter Verwendung von I und in Schritt 755 unter Verwendung von J definiert ist, wird verwendet, um die Reihenfolge des Schreibens der Ausgabeblöcke LH und HL in Schritt 760 zu steuern. J wird vergrößert in dem NEXT-Schritt 762, während I vergrößert wird in dem NEXT-Schritt 764. Dies ergibt Reihen von Blöcken, die in dieser bestimmten Implementierung zuerst geschrieben werden. Spalten können wunschgemäß ebenfalls zuerst geschrieben werden, oder es kann eine jede andere Reihenfolge des Schreibens verwendet werden. Beim ersten Durchlauf durch die Schleife bei einer gegebenen Matrix von 16 × 16 und 4 Stufen ist NBLK ebenfalls 1, und so werden nur die Blöcke 430 und 440 geschrieben.
  • Dem Schreiben der nächsten LH- und HL-Blöcke folgend wird in den Schritten 770 und 780 ein zweiter Satz verschachtelter Schleifen eingestellt, und dabei wird wieder I und J verwendet, um Positionen zu definieren, in denen ein Ausgabeblock in Schritt 780 geschrieben wird. Dieser Ausgabeblock korrespondiert mit HH-Blöcken auf derselben Stufe, welcher beim ersten Durchlauf der Block 450 ist. NEXT-I- und NEXT-J-Schritte vervollständigen die verschachtelter Schleifen in Schritt 782 bzw. 784. Es wird bemerkt, dass der HH-Block auch zur selben Zeit wie der obige LH-Block und HL-Block geschrieben werden kann, da die verschachtelten Schleifen identisch sind. Nachdem alle Blöcke auf dieser Stufe geschrieben worden sind, werden IH und IV als Exponenten von 2 in Schritt 790 erhöht, und dann in Schritt 740 verglichen, um zu prüfen, ob IH immer noch kleiner als M ist. Falls IH nicht kleiner als M ist, wird der Algorithmus mit Schritt 795 beendet, nachdem ein vollständiger, umgeordneter Satz von Wavelet-Koeffizienten entsprechend der vorliegenden Erfindung bereitgestellt worden ist.
  • Beim zweiten Durchlauf durch die verschachtelten Schleifen werden die Blöcke 455, 460 und 470 geschrieben, gefolgt von den Blöcken 480, 475 und 490 beim dritten Durchlauf durch die verschachtelten Schleifen. Größere Matrixgrößen mit höheren Stufen werden ebenfalls betrachtet.
  • Um zu Decodierungszwecken die Originalreihenfolge wiederherzustellen, kann man einfach die Ausgabe des Umordnungsalgorithmus auf gleiche Weise lesen, in der sie geschrieben wurde. Alles, was benötigt wird, ist die Kenntnis der Größe der Originalmatrix und die Anzahl der Stufen, die geschrieben wurden. Dann wird die Schreibreihenfolge einfach umgekehrt, um die Koeffizienten in der Originalreihenfolge bereitzustellen. Eine direkte Abbildung kann ebenfalls verwendet werden, würde aber signifikant zusätzliche Bandbreite für die Bereitstellung verlangen.
  • Details der Bitebenencodierung
  • Der durch den Codierungsblock 240 durchgeführte Prozess kann mit Hilfe des Diagramms in Tabelle 1 leicht verstanden werden. Die Bitebenen sind nur die Folgen der Bit eines bestimmten Index in der binären Repräsentation (Größe und Vorzeichen) der ankommenden, quantisierten Wavelet-Koeffizienten oder anderer Daten. Tabelle 1 zeigt z.B. die Bitebenen für die Folge der Werte {9, –6, 1, 0, –2, 3, –4, –1, 2}. In der Tabelle ist die Bitebene 4 die Folge {100000000}, die Bitebene 3 die Folge {010000100}, die Bitebene 2 die Folge {010011001} und die Bitebene 1 die Folge {101001010}.
  • Tabelle 1 – Bitebenenzerlegung ganzzahliger Daten
    Figure 00190001
  • In den Eingabedaten in Tabelle 1 scheinen Werte mit kleinerer Größe wahrscheinlicher vorzukommen, was typisch auch für quantisierte Wavelet-Daten und begrenzte Alphabet-Daten ist. Aus den obigen Mustern ist zu erkennen, dass die höheren Bitebenen dazu neigen, eine größere Häufigkeit von Nullen zu haben, weil Eingabewerte größerer Größen weniger wahrscheinlich sind. Bitebene 1 (das geringstwertige Bit) und die Vorzeichenbitebene haben typisch Eins und Null mit angenähert gleicher Häufigkeit.
  • Das Flussdiagramm in 5 beschreibt den Algorithmus für die effiziente Codierung der ankommenden Daten über Bitebenen, beginnend mit Schritt 505. Die Bitebenen werden zuerst in Schritt 510 von einem Eingabepuffer x gelesen, der N Zahlen enthält. Die Zahl der Bitebenen bmax wird in Schritt 515 berechnet, und ein Signifikanzmerkervektor sflg wird in Schritt 520 vollständig auf Nullen gesetzt.
  • In Schritt 525 wird die Indexvariable bit für die Bitebene gleich bmax gesetzt, so dass die Codierung mit der signifikantesten Bitebene beginnt. Die Werte der Bit, auf die durch den Index "bit" verwiesen wird, bilden den Bitebenenvektor bp in Schritt 530. Für jede Ebene bp werden die Bit unterteilt in zwei Untermengen, wie in den Schritten 535 und 540 angezeigt. x1 korrespondiert mit Positionen, für die ein Eintrag "1" noch nicht in den höheren Ebenen angetroffen worden ist, – jene werden Signifikanzbit genannt. x2 korrespondiert mit Positionen, für die ein Eintrag "1" in höheren Ebenen bereits angetroffen worden ist,- jene werden Verfeinerungsbit genannt.
  • In Schritt 545 wird x1 mit dem adaptiven Lauflängen-/Golomb-Rice-(ARLGR)-Codierer codiert, der einen Vorteil von der größeren Häufigkeit von Null in x1 hat. Für jedes Bit gleich 1 in x1 wird das Vorzeichenbit ebenfalls codiert und am Ende des Ausgabecodes angehängt.
  • In Schritt 550 wird x2 mit direkter Binärcodierung codiert. Dies wird erreicht durch Anhängen der x2-Bit an den Ausgabestrom. Ein nur minimaler Verlust in Codierungseffizienz wird angetroffen, weil Eins und Null in x2 gewöhnlich gleich wahrscheinlich sind.
  • Es wird bemerkt, dass die Vorzeichenbit nicht als Bitebene bezeichnet werden, weil sie nicht als Bitebene verarbeitet werden. Die Vorzeichenbit werden in den Prozess der Codierung des x1-Vektors einer jeden Bitebene gesendet. Somit können wird den Vektor x1 auch ansehen als abgeleitet aus dem Alphabet {0, +1, –1}, d.h. Bit plus Vorzeichen.
  • Eine wichtige Eigenschaft des Flussdiagramms in 5 ist, dass die Information, welche die Bit sind, die zu x1 gehören, und welche die Bit sind, die zu x2 gehören, nicht explizit codiert zu werden braucht. Der Vektor sflg steuert die Zuweisung von Bit zu x1, und sflg wird anfangs vollständig auf Nullen initialisiert, und dann in Schritt 555 aktualisiert, nachdem jede Bitebene codiert ist. Deshalb kann der Decodierer leicht die Veränderungen an sflg nachvollziehen. Um zur nächsten Bitebene überzugehen, wird bit in Schritt 560 vermindert, und es wird in Schritt 565 geprüft, ob die letzte Bitebene codiert worden ist. Falls nicht, geht die Steuerung zu Schritt 530 für die Codierung der nächsten Bitebene. Falls bit gleich 0 oder größer ist, falls eine Codierung niedrigerer Auflösung gewünscht ist, wird in Schritt 570 ein Ausgabepuffer geschrieben, der die Ausgaben aller x1- und x2-Codierungen enthält, und der Prozess wird in Schritt 575 beendet.
  • Der adaptive Lauflängen-/Golomb-Rice-(ARLGR)-Codierer ist derjenige, in dem die Codierungsgewinne liegen. Er bildet lange x1-Vektoren mit vielen Nullen in einen kompakteren Code mit weniger Nullen ab. Der ARLGR-Codierer kann verwendet werden, um Binärfolgen mit oder ohne zugeordnete Vorzeichenbit zu codieren, wie im Folgenden gezeigt. Um den ARLGR-Codierer zu verstehen, werden zuerst die Grundlagen der Lauflängen-Codierung und der Golomb-Rice-Codierung betrachtet.
  • In seiner allgemeinen Form ist die Grundidee hinter der Lauflängen-(RL)-Codierung, lange Ketten desselben Werts in einem Eingabedatenvektor durch einen Code zu ersetzen, der den zu wiederholenden Wert und wie oft der Wert wiederholt werden sollte spezifiziert. Falls solche wiederkehrende Ketten lang genug und häufig genug sind, führt RL-Codierung zu einer signifikanten Reduktion in der Anzahl der Bit, die für die Repräsentation des Datenvektors benötigt werden.
  • RL-Codierung kann angewendet werden, auf die Codierung binärer Daten, in denen entweder 0 oder 1 signifikant häufiger vorkommen. Ein Beispiel sind Graphikdateien z.B. eine digitalisierte schwarze Zeichnung auf einem weißen Hintergrund. Wenn weiße Bildelemente (Pixel) durch ein Bit gleich 0 und schwarze Punkte durch ein Bit gleich 1 repräsentiert werden, ist klar, dass Nullen viel wahrscheinlicher vorkommen. Tatsächlich verwenden viele Standardgraphikdateiformate RL-Codierung.
  • In 1966 schlug Golomb einen einfachen Code für die Repräsentation positiver Zahlen vor. Es wurde später gezeigt, dass der Golomb-Code tatsächlich optimal ist (von minimaler erwarteten Länge), wenn die Zahlen von einer Quelle mit geometrischer Wahrscheinlichkeitsverteilung abstammen, d.h. falls Prob{x=n} = abn, wo a und b Parameter sind. Einige wenige Jahre später leitete Rice unabhängig davon eine Untermenge des Golomb-Codes ab, die in der Praxis sehr leicht zu implementieren ist. Diese Codes wurden als Golomb-Rice-Codes bekannt.
  • In der vorliegenden Erfindung werden Golomb-Rice-Codes für eine Quelle binärer Ziffern mit RL-Codes kombiniert. Der sich ergebende Lauflängen-/Golomb-Rice-Code ist in Tabelle 2 gezeigt. Der Code ist charakterisiert durch einen Parameter k, welcher die Lauflänge steuert, die zu dem Codewort 0 gehört; diese maximale Länge ist gleich 2k.
  • Tabelle 2 – Lauflängen- + Golomb-Rice-Codierung einer Quelle, die Zeichen ∈ {0, 1}
    Figure 00220001
  • Für die Codierung des x1-Vektors in dem bereits beschriebenen Bitebenen-Codierer muss das Vorzeichen an das Codewort eines jeden Nicht-Null-Bit angehängt werden. Dazu wird eine einfache Erweiterung des RLGR-Codes verwendet, wie in Tabelle 3 gezeigt.
  • Tabelle 3 – Lauflängen- + Golomb-Rice-Codierung einer Quelle, die Zeichen ∈ {0, +1, –1}
    Figure 00230001
  • Für eine gegebene Quelle von Eingabevektoren, die entweder das {0, 1}-Alphabet oder das {0, +1, –1}-Alphabet verwenden, sollte der Parameter k gewählt werden, um die erwartete Codelänge zu minimieren. Falls die Quelle keinen Speicher hat, konstante Statistiken im Zeitverlauf hat und charakterisiert ist durch P0 = Prob{Zeichen = 0), dann ist es leicht, den optimalen Wert von k als Funktion von P0 zu berechnen.
  • In der Praxis sind jedoch binäre Vektoren (oder binäre Vektoren mit Vorzeichen) nicht stationär. Typische Beispiele umfassen Daten, die aus der physikalischen Welt stammen, wie quantisierte Wavelet-Koeffizienten von Bildern oder abgetasteten Dokumenten. Deshalb ist nicht nötig, den RLGR-Parameter k im Verlauf der Zeit anzupassen, um eine beste Einstellung auf die lokale Statistik der Daten zu erreichen. Viele Strategien wurden betrachtet, die meistens die Aufteilung der Eingangsdaten in Blöcken geeigneter Länge betreffen. Für jeden Block wird P0 abgeschätzt, und dann wird der optimale Wert von k berechnet. Ein zusätzlicher Code wird dann am Anfang eines jeden Blocks gesendet, um den Wert k anzuzeigen, der von dem Decodierer verwendet werden sollte.
  • Der Codierer 240 unternimmt einen neuen Ansatz. Eine rückwärts-adaptive Strategie wird verwendet für die Veränderung des RLGR-Parameters k. Unter rückwärts-adaptiv ist gemeint, dass Veränderungen von k berechnet werden auf der Basis codierter Zeichen, nicht direkt auf der Basis ankommender Zeichen. Die Grundstrategie ist, dass der für die Codierung des nächsten Zeichens zu verwendende Wert von k nur von den zuvor codierten Daten abhängen sollte. Deshalb müssen alle Decodierer für die Wiedergewinnung der sich verändernden Werte von k dieselben Anpassungsregeln wie der Codierer anwenden. Für die Vereinfachung der Decodierung ist es deshalb wichtig, dass solch eine Regel so einfach wie möglich zu berechnen ist.
  • Der neue adaptive Lauflängen+Golomb-Rice-(ARLGR)-Codierer 240 verwendet die folgenden Regeln für die Veränderung des Parameters k. Verschiedene Parameter werden zuerst in Schritt 604 definiert. Ein Skalierungsfaktor L wird zuerst definiert und wird verwendet, um kp als L*k zu definieren. kp ist ein Hilfsparameter, dessen Wert sich um einen Betrag Up bzw. Dn auf- und abbewegt, um Veränderungen von k um gebrochene Werte zu erlauben, ohne dass Fließkommaarithmetik verwendet wird. Schließlich wird Uq definiert und verwendet, um kp aufwärts zu verändern, wenn der Ausgabecode 0 war und k gleich 0 war. In Schritt 606 wird ein Eingabepuffer x gelesen, der M Zahlen enthält. In Schritt 608 wird k auf k0 gesetzt, kp auf L*k gesetzt und run auf 0 gesetzt. Der Prozess wird mit einem Wert von k gestartet, der eine gute Wahl für die langfristigen Statistiken der ankommenden Daten ist, z.B. k = 2. Beginnend in Schritt 610 mit dem ersten Zeichen, xindex = 1, wird das Zeichen auf x(xindex) gesetzt und runmax wird auf 2k gesetzt.
  • Als Überblick über den Codierungsprozess wird kp nach der Codierung eines Quellenzeichens auf der Basis des ausgegebenen Codes angepasst. Wenn der Ausgabecode 0 und k ≠ 0 war, dann wird kp um einen vordefinierten Vergrößerungsschritt Up vergrößert, d.h. kp = kp + Up. Falls der Ausgabecode 0 und k = 0 war, wird kp um einen vordefinierten Vergrößerungsschritt Uq vergrößert, d.h. kp = kp + Uq. Falls der Ausgabecode mit einer 1 begann (was mit einer Eingabe ungleich 0 korrespondiert), dann wird kp um einen vordefinierten Vergrößerungsschritt Dn vermindert, d.h. kp = kp – Dn. Der Wert von k für die Codierung des nächsten Eingabezeichens wird auf k = ⌊ kp / L ⌋ gesetzt(, d.h. auf die nächstkleinere ganze Zahl verkürzt).
  • Der Algorithmus basiert auf einer einfachen Strategie. Falls eine Folge von Nullen angetroffen wird, dann wird k vergrößert, um lange Sequenzen von Nullen durch ein einziges Ausgabebit = 0 aufzufangen. Falls ein Zeichen ungleich Null angetroffen wird, dann wird k reduziert, um übermäßig lange Ausgabecodes zu vermeiden. Die obige Verwendung des Hilfsparameters kp und des Skalierungsfaktors L ermöglicht die Anpassung von k um gebrochene Werte, ohne dass Fließkommaarithmetik verwendet wird, wie oben angegeben wurde.
  • Für die meisten der in dem ARLGR-Codierer geprüften Daten war die Leistung ziemlich gut (die codierten Raten lagen sehr dicht bei den Quellenentropien), für die folgenden typischen Wahlparameter: L = 4, Up = 4, Dn = 5 und Uq = 2. In einigen Fällen kann eine Anpassung dieser Parameter zu einer geringfügig besseren Leistung führen.
  • Zu der Beschreibung des Flussdiagramms 6 zurückkehrend wird nachfolgend zur Initialisierung und Definition der Parameter mit Bezug auf die Schritte 602, 604, 606, 608, 610 und 612 entsprechend der obigen Beschreibung zuerst k in Schritt 614 geprüft, um festzustellen, ob k gleich Null ist. Falls k gleich Null ist, und falls das Zeichen 0 ist, wird in Schritt 618 Uq zu kp hinzuaddiert. Eine Null wird in Schritt 620 an den Ausgabepuffer angehängt und falls kp in Schritt 622 außerhalb des Bereichs – oberhalb kpmax -ist, wird kp begrenzt. In Schritt 624 wird k auf die größte ganze Zahl kleiner als kp/L eingestellt, wo L der Skalierungsfaktor ist. Dann wird in Schritt 626 xindex erhöht, und falls in Schritt 628 xindex kleiner als M ist, wird das nächste Zeichen in Schritt 612 ausgewählt. Falls xindex größer als M ist, wird der Ausgabebitpuffer in Schritt 630 geschrieben und der Prozess mit Schritt 640 beendet.
  • Falls mit erneutem Bezug auf Schritt 616 das Zeichen nicht gleich Null war, wird in Schritt 642 an den Ausgabebitpuffer eine 1 angehängt, und in Schritt 644 wird ein Vorzeichenbit des Zeichens an den Ausgabebitpuffer angehängt, falls das Datum ein Vorzeichenbit hat, und die Verarbeitung wird mit Schritt 622 fortgesetzt, um zu prüfen, ob kp innerhalb seines Bereichs ist.
  • Falls in Schritt 614 k nicht gleich Null ist, wird eine weitere Prüfung des Zeichens in Schritt 650 durchgeführt. Falls das Zeichen nicht gleich Null ist, wird in Schritt 652 eine 1 an den Ausgabebitpuffer angehängt und ein k-bit-Wert von run wird in Schritt 654 an den Ausgabe bitpuffer angehängt. In Schritt 656 wird Dn von kp subtrahiert, und die Verarbeitung wird mit Schritt 644 fortgesetzt, in dem ein optionales Vorzeichenbit angehängt wird.
  • Falls in Schritt 650 das Zeichen als Null erkannt wird, wird in Schritt 660 run erhöht und in Schritt 662 geprüft, ob run = runmax ist. Falls in Schritt 662 run nicht gleich runmax ist, wird kp in Schritt 622 begrenzt, so dass es kpmax nicht übersteigt. Falls in Schritt 662 run gleich runmax ist, wird in Schritt 664 eine Null an den Ausgabebitpuffer angehängt, und in Schritt 666 wird run auf Null gesetzt. Schließlich wird in Schritt 670 Up zu kp hinzuaddiert, und die Verarbeitung kehrt wieder zurück zum Begrenzen von kp in Schritt 622, Einstellen von k in Schritt 624, Erhöhen von xindex in Schritt 626 und Prüfen in Schritt 628, ob das letze Zeichen verarbeitet worden ist. Falls das letzte Zeichen verarbeitet worden ist, wird in Schritt 630 die Information in den Ausgabebitpuffer geschrieben, und der Prozess mit Schritt 640 beendet.
  • In Tabelle 4 sind Ergebnisse der Verwendung des Bitebenencodierers auf quantisierte Wavelet-Koeffizienten gezeigt. Es wird bemerkt, dass der einfache Bitebenencodierer eine bessere Leistung bringt als die adaptiven arithmetischen Codierer (die als Codierer nach dem Stand der Technik angesehen werden), obwohl er im Rechengang einfacher ist.
  • Tabelle 4 – Ausgabecodelänge in Byte für quantisierte und umgeordnete Wavelet-Koeffizienten als Eingabe
    Figure 00260001
  • Ein größerer Vorteil des Codierers, der nicht von den arithmetischen Codierern geteilt wird, ist Skalierbarkeit. Mit der beschriebenen Bitebenencodierung kann eine Version des Signals niedriger Wiedergabetreue leicht durch Anhalten des Decodierungsprozesses auf einer Bitebene höher als Ebene 1 erreicht werden. Das ermöglicht progressive Übertragung und Rekonstruktion der Information, ein wichtiges Merkmal für Kommunikationskanäle wie das Internet. Eine andere Anwendung der Skalierbarkeit ist z.B. in Digitalkameras. Falls der Benutzer mehr Bilder aufzunehmen wünscht und gewillt ist, dafür die Qualität der bereits gespeicherten Bilder zu opfern, können niedrigere Bitebenen existierender Bilder verworfen werden, um Speicher für neue Bilder freizugeben.
  • Obgleich der ARLGR-Codierer in Verbindung mit seiner Verwendung in einem Bitebenencodierer beschrieben wurde, kann er ziemlich nützlich sein als ein Allzweckcodierer für binäre Daten, in denen der Wert 0 viel wahrscheinlicher ist als der Wert 1. Die ist besonders dort wahr, wo die Wahrscheinlichkeitsverteilung sich ständig ändert. Betrachtet wird z.B. das Problem der Codierung einer Schwarz-Weiß-Zeichnung, die mit einer Auflösung von 480 × 640 Bildpunkten gescannt wurde. Unter der Annahme einer Abbildung von weiß auf 0 und von schwarz auf 1 kann der ARLGR-Codierer direkt auf die Daten angesetzt werden. Jedoch handhabt der Codierer 240 Ketten von 1 nicht sehr gut, und so wird zuerst ein Differenzoperator über alle Reihen von Bildpunkten angesetzt. Beginnend mit der zweiten Reihe und mit einer Abwärtsbewegung wird jeder Bildpunktwert ersetzt durch eine 0, falls er dieselbe Farbe hat wie derselbe Bildpunkt in der Reihe darüber, oder wird durch eine 1 ersetzt, falls er eine unterschiedliche Farbe hat. Dies wird über alle Spalten fortgesetzt. Die sich ergebenden Bit werden mit dem ARLGR-Codierer 240 codiert.
  • Dies liefert eine Abbildung von Ketten von entweder weißen oder schwarzen Bildpunkten in Läufe von Nullen ohne Verlust von Information. Dies macht die Daten geeignet für ARLGR-Codierung. Tabelle 5 zeigt einen Vergleich der Leistung eines solchen einfachen Codierers mit anderen Ansätzen.
  • Tabelle 5 – Ausgabecodelänge in Byte für die Codierung typischer Schwarz-Weiß-Bilddaten
    Figure 00270001
  • Der Algorithmus des ARLGR-Codierers 240 hat gegenüber dem CCITT-Faxstandardcodierungsalgorithmus eine um einen Faktor von fast 2 bessere Leistung. Er verwendet nur 55% der Bytes, die durch den Faxalgorithmus verwendet werden. Tatsächlich überholt der neue ARLGR-basierte Codierer selbst den adaptiven arithmetischen Codierer nach dem Stand der Technik für genau dieses Bild um einen kleinen Betrag. Zusätzlich hat er die niedrigste Komplexität des Rechnungsgangs. Es wird bemerkt, dass dies nur ein Beispiel ist, und dass die Ergebnisse sich abhängig von dem verwendeten Bild und der Einstellung der Parameter verändern können.
  • In 8 ist ein Blockdiagramm eines Pakets von Büroanwendungen allgemein bei 810 gezeigt. Ein besonderes Büroanwendungspaket umfasst eine Vielzahl von Anwendungen auf hoher Ebene, die mit 812 bezeichnet sind, einschließlich solcher Anwendungen wie Textverarbeitung, eMail, Tabellenkalkulation, Präsentationswerkzeugen, Fotobearbeitungsprogrammen und Browsern. Diese Anwendungen werden unterstützt von mindestens zwei Ebenen von Software niedrigerer Ebenen, von Hardware oder einer Kombination davon bei 826 und 818. Diese gezeigten Funktionen umfassen eine Video-Ein-/-Ausgabefunktion 826 und eine Fax-/Scannertunktion 818. Viele andere Funktionen können ebenfalls auf dieser Stufe liegen.
  • Insbesondere bietet die Videofunktion die Fähigkeit, sowohl ein Video anzuzeigen als auch Video- und Bilddaten von externen Quellen zu empfangen. Die Videofunktion und die Fax/Scannertunktion machen Gebrauch von dem hier beschriebenen und bei Block 832 angezeigten Codierer und Decodierer, um Codierungs- und Decodierungsfunktionen vorzusehen, wie oben beschrieben. Falls Rohdaten eines Bilds oder andere geeignete Daten in Form von Bildelementen oder anderer Form erfasst sind, wird der Codierer 832 verwendet, um sie zu codieren. Falls die codierten Daten von einer Quelle empfangen wurden, welche den hier beschriebenen Typ der Codierung anwendet, wird der Decodierer bei 832 durch die Anwendung aufgerufen, welche die Daten empfängt, um sie zu transformieren oder zu decodieren zu einem anzeigbaren oder verwendbaren Format.
  • Es wird bemerkt, dass viele Anwendungen, die in solch einem integrierten Büroanwendungspaket enthalten sind wie Microsoff Office oder Nachfolgeprodukten, welche noch mehr Anwendungen integrieren und mit höherer Wahrscheinlichkeit Daten handhaben, die komprimiert oder dekomprimiert werden müssen. Die vorliegende Erfindung bietet eine Alternative zu anderen Formen der Codierung, welche die Blockbildungsartefakte beseitigen, die in JPEG vorkommen, und ist auf Wunsch weniger komplex zu implementieren sowohl in Soft ware, Hardware oder in hybriden Formen. Der Codierer/Decodierer bei 832 ist auch leicht in solche Büroanwendungspakete zu integrieren.

Claims (25)

  1. Codierverfahren, das umfasst: Umordnen (230) von Wavelet-Koeffizienten in Blöcke in einer Matrix (410); und Durchführen von arithmetischem Codieren (240) der umgeordneten Koeffizienten, um einen codierten Bitstrom zu erzeugen, wobei: sich niederfrequente Koeffizienten in einer Ecke (420, 430, 440, 450) der Matrix befinden, die Blöcke von Wavelet-Koeffizienten so zusammengefasst werden, dass die Wavelet-Koeffizienten in jedem Block ähnliche Werte haben, und das Zusammenfassen bewerkstelligt wird, indem eine datenunabhängige Abtastreihenfolge festgelegt wird, die alternierendes Abtasten von Tief-Hoch- und Hoch-Tief-Wavelet-Koeffizienten innerhalb der gleichen Auflösungsstufe einschließt.
  2. Verfahren nach Anspruch 1, wobei das Umordnen (230) der Koeffizienten des Weiteren das Alternieren von Tief-Hoch- und Hoch-Tief-Teilbändern in zunehmend größeren Blöcken in der Matrix (410) umfasst.
  3. Verfahren nach Anspruch 1 oder 2, wobei das Bild eine Größe von M mal N mit einer entsprechenden Anzahl von Wavelet-Koeffizienten hat.
  4. Verfahren nach Anspruch 3, wobei die Blockgröße M/2J mal N/2J beträgt und J so ausgewählt wird, dass ein Block der Stufe Null alle Wavelet-Koeffizienten in der gröbsten Auflösung enthält.
  5. Verfahren nach einem der Ansprüche 1 bis 4, das ein Verfahren zum Codieren der Wavelet-Koeffizienten ist.
  6. Verfahren nach einem der Ansprüche 1 bis 5, wobei das Durchführen von arithmetischem Codieren umfasst: Codieren (240) der umgeordneten Koeffizienten mit einem adaptiven Lauflängencodierer (832).
  7. Verfahren nach Anspruch 6, wobei die Lauflängencodierung (240) der umgeordneten Koeffizienten mit einem adaptiven Lauflängencodierer (832) nach Golomb-Rice (545) geschieht, der von einem Parameter k gesteuert wird, der die maximalen Lauflängen bestimmt.
  8. Verfahren nach Anspruch 7, wobei der Parameter k zum Codieren (240) immer dann zunimmt, wenn das häufigste Zeichen auftritt (670).
  9. Verfahren nach Anspruch 7, wobei der Parameter k zum Codieren (240) immer dann abnimmt, wenn das häufigste Zeichen nicht auftritt (656).
  10. Verfahren nach einem der Ansprüche 1 bis 9, das ein Verfahren zum Codieren (240) von Bilddaten ist und des Weiteren umfasst: Erzeugen der Koeffizienten über eine Wavelet-Transformation (210).
  11. Verfahren nach einem der Ansprüche 1 bis 10, wobei das Umordnen (230) so ausgewählt wird, dass große und kleine Wavelet-Koeffizienten zu separaten Gruppen (410) gruppiert werden, ohne dass der Einsatz von datenabhängigen Datenstrukturen erforderlich ist.
  12. Verfahren nach einem der Ansprüche 1 bis 11, das des Weiteren umfasst: Initialisieren einer maximalen String-Länge für einen adaptiven Lauflängencodierer (832); Modifizieren der maximalen String-Länge auf Basis eines Steuer-Parameters; und Lauflängencodieren (240) der Symbole, um einen komprimierten Ausgangs-Bitstrom zu erzeugen.
  13. Verfahren nach einem der Ansprüche 1 bis 12, das des Weiteren umfasst: Initialisieren einer maximalen String-Länge für einen adaptiven Lauflängencodierer (832); Modifizieren der maximalen String-Länge auf Basis des Auftretens des häufigsten Symbols; und Lauflängencodieren (240) der Symbole, um einen komprimierten Ausgangs-Bitstrom zu erzeugen.
  14. Verfahren nach Anspruch 13, wobei die Symbole auf einer Bit-Ebenen-Basis codiert werden.
  15. Verfahren nach Anspruch 13 oder 14, wobei die niedrigstwertigen Bit-Ebenen unter Verwendung von Binärcodierung (550) kodiert werden.
  16. Verfahren nach einem der Ansprüche 1 bis 13, das des Weiteren umfasst: Initialisieren einer String-Länge für einen adaptiven Lauflängencodierer (832); Modifizieren der String-Länge um eine Potenz k, wobei k auf dem Auftreten des häufigsten Symbols basiert; Erhöhen von k immer dann, wenn das häufigste Symbol codiert wird; und Verringern von k immer dann, wenn ein anderes Symbol als das häufigste Symbol codiert wird, wobei die Symbole auf einer Bit-Ebenen-Basis codiert werden.
  17. Verfahren nach Anspruch 16, wobei k eine ganze Zahl ist und wobei ein Skalierungsfaktor (L) verwendet wird, um k jeweils um einen Bruchteil zu inkrementieren (624).
  18. Verfahren nach einem der Ansprüche 1 bis 17, das ein Verfahren zum Codieren (240) von Daten eines finiten Alphabets ist.
  19. Verfahren nach einem der Ansprüche 1 bis 18, wobei die Blöcke so zusammengefasst werden, dass Paare von Blöcken aus einem Tief-Hoch- und einem Hoch-Tief-Teilband, die einer gleichen räumlichen Position entsprechen, einander nahe sind.
  20. Verfahren zum Decodieren komprimierter Pixel-Bilddaten, das umfasst: Empfangen eines unter Verwendung eines adaptiven Lauflängen-Codierverfahrens nach Golomb-Rice- (240) komprimierten Bit-Stroms; Decodieren des empfangenen Bit-Stroms; und Ändern der Ordnung der Koeffizienten in eine ursprüngliche Ordnung, die aus der Wavelet-Transformation von Pixel-Daten resultiert, wobei: das Decodieren des empfangenen Bit-Stroms das Erzeugen von Wavelet-Transformationskoeftizienten umfasst, die umgeordnet worden sind, um die Blöcke von Wavelet-Koeffizienten so zusammenzufassen, dass die Wavelet-Koeffizienten in jedem Block ähnliche Werte haben, indem eine datenunabhängige Abtastordnung festgelegt wird, die alternierendes Abtasten von Tief-Hoch- und Hoch-Tief-Wavelet-Koeffizienten innerhalb der gleichen Auflösungsstufe einschließt.
  21. Verfahren nach Anspruch 20, das des Weiteren umfasst: inverses Transformieren der Wavelet-Koeffizienten.
  22. Verfahren nach Anspruch 20 oder 21, wobei das Decodieren umfasst: Decodieren ausgewählter Teile des empfangenen Bit-Stroms um eine Gruppe von höchstwertigen Wavelet-Transformationskoeftizienten zu erzeugen, die umgeordnet worden sind, und die Wahrscheinlichkeit von Zusammenfassungen ähnlicher Daten auf datenunabhängige Weise zu erhöhen.
  23. Computerlesbares Medium, auf dem Befehle gespeichert sind, die einen Computer veranlassen, das Verfahren nach einem der Ansprüche 1 bis 22 auszuführen.
  24. Codierer, der zum Ausführen des Verfahrens nach einem der Ansprüche 1 bis 19 eingerichtet ist.
  25. Decodierer, der zum Ausführen des Verfahrens nach einem der Ansprüche 20 bis 22 oder zum Decodieren eines mit dem Verfahren nach einem der Ansprüche 1 bis 19 erzeugten Bit-Stroms eingerichtet ist.
DE2000612717 1999-03-26 2000-03-24 Bildcodierung unter verwendung einer umordnung von wavelet-koeffizienten Expired - Lifetime DE60012717T2 (de)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US276954 1994-07-19
US277255 1994-07-19
US09/280,135 US6678419B1 (en) 1999-03-26 1999-03-26 Reordering wavelet coefficients for improved encoding
US280135 1999-03-26
US09/277,255 US6477280B1 (en) 1999-03-26 1999-03-26 Lossless adaptive encoding of finite alphabet data
US09/276,954 US6850649B1 (en) 1999-03-26 1999-03-26 Image encoding using reordering and blocking of wavelet coefficients combined with adaptive encoding
PCT/US2000/007832 WO2000059232A1 (en) 1999-03-26 2000-03-24 Image encoding using reordering wavelet coefficients

Publications (2)

Publication Number Publication Date
DE60012717D1 DE60012717D1 (de) 2004-09-09
DE60012717T2 true DE60012717T2 (de) 2005-01-13

Family

ID=27402856

Family Applications (2)

Application Number Title Priority Date Filing Date
DE60015755T Expired - Lifetime DE60015755T2 (de) 1999-03-26 2000-03-24 Verlustfreie adaptive codierung von daten eines endlichen alphabets
DE2000612717 Expired - Lifetime DE60012717T2 (de) 1999-03-26 2000-03-24 Bildcodierung unter verwendung einer umordnung von wavelet-koeffizienten

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE60015755T Expired - Lifetime DE60015755T2 (de) 1999-03-26 2000-03-24 Verlustfreie adaptive codierung von daten eines endlichen alphabets

Country Status (7)

Country Link
EP (2) EP1188244B1 (de)
JP (2) JP4426118B2 (de)
KR (1) KR100733949B1 (de)
AT (2) ATE272925T1 (de)
AU (3) AU3922200A (de)
DE (2) DE60015755T2 (de)
WO (3) WO2000059231A1 (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU770148B2 (en) * 2000-12-06 2004-02-12 Canon Kabushiki Kaisha Digital image compression and decompression
AUPR192800A0 (en) 2000-12-06 2001-01-04 Canon Kabushiki Kaisha Digital image compression and decompression
US6798364B2 (en) 2002-02-05 2004-09-28 Intel Corporation Method and apparatus for variable length coding
US20060072834A1 (en) * 2003-04-17 2006-04-06 Lynch William C Permutation procrastination
ATE449405T1 (de) 2002-09-04 2009-12-15 Microsoft Corp Entropische kodierung mittels anpassung des kodierungsmodus zwischen niveau- und lauflängenniveau-modus
US7286945B2 (en) * 2003-11-19 2007-10-23 Honeywell International Inc. Apparatus and method for identifying possible defect indicators for a valve
US7274995B2 (en) * 2003-11-19 2007-09-25 Honeywell International Inc. Apparatus and method for identifying possible defect indicators for a valve
US7689051B2 (en) * 2004-04-15 2010-03-30 Microsoft Corporation Predictive lossless coding of images and video
KR101155525B1 (ko) * 2005-06-20 2012-06-19 삼성전자주식회사 기록/재생 장치 및 방법
KR101065520B1 (ko) * 2006-12-07 2011-09-19 콸콤 인코포레이티드 라인-기반 비디오 레이트 제어 및 압축
US8179974B2 (en) 2008-05-02 2012-05-15 Microsoft Corporation Multi-level representation of reordered transform coefficients
FR2934103B1 (fr) * 2008-07-16 2010-08-27 Sagem Securite Procede et systeme de transmission securisee d'une image entre deux points distants
JP6975137B2 (ja) * 2015-09-18 2021-12-01 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 高速かつ効率的な画像圧縮及び解凍のための方法及び装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5321776A (en) * 1992-02-26 1994-06-14 General Electric Company Data compression system including successive approximation quantizer
US5717394A (en) * 1993-02-10 1998-02-10 Ricoh Company Ltd. Method and apparatus for encoding and decoding data
US5381145A (en) * 1993-02-10 1995-01-10 Ricoh Corporation Method and apparatus for parallel decoding and encoding of data
JP3943634B2 (ja) * 1995-11-02 2007-07-11 キヤノン株式会社 情報処理装置及び方法
US5818877A (en) * 1996-03-14 1998-10-06 The Regents Of The University Of California Method for reducing storage requirements for grouped data values
IL119523A0 (en) * 1996-10-30 1997-01-10 Algotec Systems Ltd Data distribution system
JP3213582B2 (ja) * 1997-05-29 2001-10-02 シャープ株式会社 画像符号化装置及び画像復号装置
EP0984692A4 (de) * 1997-05-30 2001-02-21 Merck & Co Inc Angiogenese-inhibitoren
EP0940994B1 (de) * 1998-03-06 2014-04-16 Canon Kabushiki Kaisha Bildverarbeitungsvorrichtung und -verfahren, und Speichermedium mit gespeicherten Schritten für ein solches Verfahren

Also Published As

Publication number Publication date
JP2002540740A (ja) 2002-11-26
DE60015755D1 (de) 2004-12-16
KR100733949B1 (ko) 2007-07-02
JP4540855B2 (ja) 2010-09-08
EP1188244B1 (de) 2004-11-10
AU3772300A (en) 2000-10-16
WO2000059232A1 (en) 2000-10-05
WO2000059231A1 (en) 2000-10-05
DE60015755T2 (de) 2005-04-07
JP4426118B2 (ja) 2010-03-03
EP1188244A1 (de) 2002-03-20
EP1166565B1 (de) 2004-08-04
ATE272925T1 (de) 2004-08-15
JP2002540711A (ja) 2002-11-26
WO2000059116A1 (en) 2000-10-05
DE60012717D1 (de) 2004-09-09
ATE282260T1 (de) 2004-11-15
EP1166565A1 (de) 2002-01-02
AU3922200A (en) 2000-10-16
AU3916900A (en) 2000-10-16
KR20020008133A (ko) 2002-01-29

Similar Documents

Publication Publication Date Title
DE19861377B4 (de) Ein verbessertes Kompressions- und Dekompressionssystem mit reversiblen Wavelets und verlustbehafteter Rekonstruktion
DE19626600C2 (de) Kodierer und Verfahren zum Kodieren
DE19626615C2 (de) Verfahren und Apparat zur Kompression, das bzw. der reversible Wavelet-Transformationen und einen eingebetteten Kodestrom verwendet
DE19506164C2 (de) Verfahren zum Komprimieren eingegebener Symbole in Codeworte
EP1487113B1 (de) Kodierung und Dekodierung von Transformationskoeffizienten in Bild- oder Videokodierern
DE69722601T2 (de) Datenkompression mit hybrider verlustloser entropiekodierung von run-length codes
DE69822607T2 (de) Nichtlinearer quantisierer für videokodierung
DE69637067T2 (de) System zur variablen Längendekodierung
DE69835528T2 (de) Eingebetteter dct-basierte standbildkodierungsalgorithmus
DE19534730B4 (de) Verfahren zum Codieren und Decodieren von Daten
DE19758761B4 (de) Verfahren zum Intrakodieren eines von einer Pixelmatrix gebildeten Bildes
DE69736329T2 (de) Verschachtelte verteilte kodierung von spärlich bestückten datensätzen
DE60012717T2 (de) Bildcodierung unter verwendung einer umordnung von wavelet-koeffizienten
DE69721850T2 (de) Bildkodierungsverfahren und Bildkodierer
DE602004001993T2 (de) Transformations basiertes restbewegungsrahmen kodierungsverfahren mit übervollständiger basis und zugehörige vorrichtung zur videokompression
DE102007020292A1 (de) Verfahren zur Komprimierung von Daten unter Verwendung einer Lauflängen-Kodierung insbesondere für medizinische Bilddaten
EP3624456A1 (de) Verfahren zur kompression und dekompression von bilddaten
EP1472888B1 (de) Kontextsensitive kodierung und dekodierung eines videodatenstroms
DE19819405B4 (de) Implementation eines reversiblen eingebetteten Wavelet-Systems
DE60200377T2 (de) Datenkompression
DE69936304T2 (de) Bereichsbasierte skalierbare bildkodierung
DE19944213C1 (de) Verfahren zum Komprimieren eines digitalen Bildes mit mehreren Bit-Ebenen
DE19549491C2 (de) Entropie-Codierer
DE19758760B4 (de) Verfahren zum Kodieren eines von einer Pixelmatrix gebildeten Bildes
DE10326091A1 (de) Progressives Senden und Empfangen von Bilddaten unter Verwendung einer modifizierten Hadamard-Transformation

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: NEIVERSAN NETWORKS CO. LLC (N.D.GES. D. STAATE, US