-
Die
vorliegende Erfindung betrifft ein Verfahren zum Komprimieren von
Bildern und Videosequenzen in digitale Form, wobei das Verfahren
von dem Typ ist, der sich aus dem Oberbegriff des beigefügten unabhängigen Anspruchs
1 ergibt.
-
Die
meisten uns umgebenden Informationstypen sind in zunehmendem Maß in einem
digitalen Format beschrieben. Ein wichtiger Grund dafür ist die schnelle
Entwicklung auf dem Gebiet der Computertechnologie. Bilder, insbesondere
Live-Bilder und Videos, sind mit unter den letzten Informationstypen, auf
welche Digitaltechnologie angewendet wurde. Hinsichtlich der Digitalisierung
von Videos erfolgte dieser späte
Beginn teilweise aufgrund der großen Datenmenge, die sich aus
der Digitalisierung ergibt. Beispielsweise führt das Digitalisieren von
Standard-TV-Signalen zu Datenraten von mehr als 200 Mbit pro Sekunde
(200 Mbps). Dies bedeutet beispielsweise, daß eine Datendisc mit einer
Kapazität von
4 GigaByte ungefähr
2 Minuten Digital-TV speichern kann. Dies zeigt, daß die aus
einem direkten und unveränderten
Digitalisieren von TV Signalen resultierende Datenmenge für praktische
Zwecke zu groß ist,
selbst für
heutige Speichermedien.
-
Um
eine Verbesserung dieser Situation herbeizuführen, wurden digitale Kompressionsverfahren für Video
eingeführt.
Auf diese Weise ist es möglich, unter
Verwendung einer Bitmenge, die erheblich geringer ist als die zuvor
erwähnte,
digitale Videos wiederzugeben. Es hat sich gezeigt, daß die Kompressionstechnologie
in zunehmendem Maß allgemeine Verwendung
für Standard-TV
und Videokonferenzen sowie Bildtelefonie und in letzter Zeit auch
bei der Verwendung von Videos in einem Multimedia-Kontext findet.
-
Allmählich existieren
zahlreiche Verfahren zum Komprimieren von digitalen Videos. Einige
dieser Verfahren wurden als Normen in ISO/ISC (11172 und 13818)
und ITU (H.261, H.262, H.263) veröffentlicht. Viele dieser Verfahren
sind nach einem Schema aufgebaut, das wie in der zugehörigen 1 dargestellt
charakterisiert werden kann. 1 zeigt
ein Bild 10 und das vorherige Bild 1 an der selben Stelle. Derartige
Bilder werden üblicherweise
in Blöcke 2, 20 von
8×8 oder
16×16
Pixel unterteilt. Um einen Block 20 in einem gegenwärtigen Bild
10 zu beschreiben, werden teilweise Informationen von früheren Bildern (beispielsweise
von vorhergehenden Bild 1) und teilweise Informationen verwendet,
die für
den vorliegenden Block 20 spezifisch sind.
-
Bei
der Verwendung von Informationen von früheren Bildern, beispielsweise
dem Bild 1, wird oft ein Vektor V verwendet, der angibt, wie viele
Pixel – horizontal
und vertikal – des
Inhalts aus dem vorhergehenden Bild 1 stammen. Auf diese Weise ergibt sich
im allgemeinen eine Vorhersage für
den vorliegenden Block 20 aus dem Inhalt früherer Bilder,
wobei die Vorhersage manchmal sehr einfach ist, beispielsweise einfach
ein Block 2 im vorhergehenden Bild 1.
-
Da
die Vorhersage 2 selten ausreichend gut ist, um allein
den Block 20 wiederzugeben, wird die Abweichung von der
Vorhersage 2 als Zusatzinformation mitgesendet.
-
Um
das auf diesen Hauptelementen basierende Codierverfahren zu vervollständigen,
wird schließlich
der Videoinhalt mittels ungefähr
zehn verschiedener Parameter beschrieben. Jeder dieser Parameter
kann eine Gruppe von Werten annehmen. Beispielsweise kann die Bewegung
von Pixeln in einem Block von einem Bild zum nächsten untersucht werden, und
der diese Bewegung beschreibende Parameter kann als "V" bezeichnet werden. Mögliche Werte
können
beispielsweise zwischen 30 Pixel nach links und 30 Pixel nach rechts,
oder als numerische Werte: –30
bis +30, betragen. Es existieren somit 61 mögliche Werte für V. Dieser
Parameter kann sodann beispielsweise durch 6 Bits codiert werden,
die 26 = 64 mögliche Werte umfassen.
-
Die
Werte, die V annehmen kann, d.h. von –30 bis +30, können ungleichmäßig verteilt
sein. Angenommen, der Wert β ist
wesentlich wahrscheinlicher als jeder andere Wert (Wert "0" kann angeben, daß keine Bewegung aus dem vorhergehenden
Bild erfolgte). Gleichermaßen
können
die größten numerischen
Werte eine sehr geringe Wahrscheinlichkeit haben. Wird als Hauptpunkt
angesehen, daß es wichtig
ist, den Bitverbrauch bei der Parameterwertangabe zu verringern,
wird ein bekanntes Signalverarbeitungsverfahren verwendet, bei dem,
anstatt stets 6 Bits zum Angeben von V Werten zu verwenden, zur
Verwendung von kurzen Codewörtern
zum Angeben der wahrscheinlichsten Werte von V und längeren Codewörtern für weniger
wahrscheinliche Werte übergegangen
wird. Es wird hierbei von der Verwendung eines Variable Length Codes
(VLC), anstelle eines durch das 6-Bit-Beispiel beschriebenen Fixed
Length Codes (FLC), gesprochen.
-
Es
ist angebracht, etwas auf die Bedeutung der Begriffe "Parameter", "Wert" und "Ereignis" einzugehen. Ein
Parameter kann eine Definition für
eine Menge sein, die bestimmte Werte annehmen kann. Der Bewegungsvektor
V, der durch die Bewegungsstrecke (gemessen in Pixeln) bestimmt
ist, über
welche sich Informationen in der Bildebene von einem Bild zum nächsten bewegt
haben, ist ein Beispiel für eine
Parameterdefinition. Die Werte dieses Parameters sind Zahlen, welche
die Strecke der Bewegung angeben. In einem Bild erscheinen zahlreiche
Meßwerte
Für diesen
Vektorparameter – für eine Anzahl von
Blöcken
und für
horizontale und vertikale Bewegung. Dennoch wird als Ausgangspunkt
ein einzelner Parameter genannt, jedoch mit zahlreichen Meßpunkten
oder Werten. Es ist vorstellbar, daß die Bewegungen von Bildinhalten
von einem Bild zum nächsten über große Teile
des Bildes eher ähnlich sind.
Somit sind die Bewegungswerte für
einen Block möglicherweise ähnlich den
Bewegungswerten für benachbarte
Blöcke.
Es ist vorstellbar, daß fü einen gegenwärtigen Block
ein Raten oder eine Vorhersage der Bewegung erfolgt, basierend auf
der Bewegung benachbarter Blöcke.
In einem solchen Fall kann der Vektorparameter als die Abweichung
von dieser Vorhersage und nicht die Bewegung selbst definiert werden.
Darüber
hinaus kann es von Interesse sein, mehr als einen Vektorparameter
zu verwenden, wobei beispielsweise der vertikalen und der horizontalen
Bewegung jeweilige Vektorparameter zugewiesen werden können.
-
In
anderen Fällen
kann ein Parameter als Gruppe von Mengen definiert sein. Ein Beispiel
hierfür
ist die Sammlung von Mengen (LEVEL, RUN, LAST) (siehe die Erörterung
in der nachfolgenden Beschreibung), welche die Basis für eine Parameterdefinition
bildet. Ein Wert für
diesen Parameter wird oft auch als Ereignis bezeichnet, was bedeutet,
daß es
sich um eine Gruppe von Werten für
die Mengen (LEVEL, RUN, LAST) handelt. In der nachfolgenden Beschreibung
können
die Ausdrücke "Werte" und "Ereignisse" möglicherweise
in einem Zusammenhang nicht durchgehend auseinandergehalten sein. Ereignisse/Werte
werden durch ein VLC codiert. Daher sollte die Statistik bezüglich Ereignissen/Werten an
das tatsächlich
verwendete VLC angepaßt
sein.
-
Bei
den bekanntesten Kompressionsverfahren wird oft ein spezielles VLC
für jeden
einzelnen Parameter verwendet, d.h. ein an die betreffende Statistik
für jeden
einzelnen Parameter angepaßter VLC.
Somit enthält
der Gesamtbitstrom (oder die Sammlung von Bits) für eine Videosequenz
eine komplexe Mischung aus Bits, die in Zusammenhang mit einer Anzahl
von VLC, üblicherweise
mehr als zehn derartiger VLC, stehen.
-
Es
kann gelegentlich zum Auftreten von Fehlern in einem übertragenen
Bitstrom kommen. Dies bedeutet, daß auf der Empfangsseite falsche
Codewörter
decodiert werden. Bei Verwendung bestehender Verfahren, wie zuvor
genannt, bei denen mehrere VLC für
die verschiedenen übertragenen
Parameter verwendet werden, müssen
beim Auftreten eines Fehlers zuerst bestimmte Synchronisierwörter in dem
Bitstrom lokalisiert werden, bevor es möglich ist, den Rest des Bitstroms
wieder zu verwenden.
-
Des
weiteren ist die Interpretation der Informationen zu einem Bild
unter Verwendung existierender Verfahren relativ kompliziert, da
mehrere VLC verwendet werden und nur die Interpretation früherer Codewörter in
dem Bitstrom bestimmen kann, welcher VLC das nächste Mal verwendet werden
soll.
-
Das
Verfahren zur Feststellung, ob ein Codewort in einem Bitstrom gefunden
wurde, ist bei den bekannten Verfahren ebenfalls kompliziert, da
bis zu mehrere Operationen hierzu ausgeführt werden müssen.
-
Es
besteht daher der Bedarf an einer Vereinfachung der Codierung eines
Bitstroms, derart daß es
möglich
ist, die korrekten Codewörter
in einem Bitstrom nach dem Auftreten eines Fehlers in dem Strom
schneller wiederzufinden. Es ist ebenfalls erwünscht, weitere Vereinfachungen
in den zuvor erwähnten
Punkten zu erreichen. Die vorliegende Erfindung zielt auf eine Erfüllung dieses
Bedarfs ab.
-
Die
Erfindung schafft daher ein Verfahren zum Komprimieren von Bildern
und Videosequenzen im digitalen Format, wobei
- – jedes
zu codierende Bild in eine Anzahl von Blöcken von vorgegebener Größe geteilt
wird,
- – für jeden
Block eine Voraussage getroffen wird, wobei Blöcke in einem oder mehreren,
vorher Codierten Bildern und Werte für mindestens einen Vektorparameter
unter Angabe einer Stelle in vorherigen Bildern zum Abrufen von
Daten für
die Voraussage verwendet werden,
- – für jeden
Block eine Abweichung von der Voraussage festgestellt wird, wobei
die Abweichung einer geeigneten mathematischen Transformierung unterworfen
wird, was dazu führt,
daß Transformierungskoeffizienten
in eine Definition eines Parameters für eine vollständige Beschreibung der
Abweichung aufgenommen werden,
- – weitere
Parameter zur Beschreibung von ergänzenden Informationen für das Bild
aufgestellt werden, auch dazu, welche Blöcke in dem Bild sich von einem
entsprechenden Block in dem vorherigen Bild unterscheiden, und welche
Blöcke
Informationen zusätzlich
zu der Voraussage aufweisen, und
- – unter
den Parametern Werte des Vektorparameters, des Abweichungsparameters
und gegebenenfalls mindestens einer von den weiteren Parametern
dann mit Hilfe der Codierung variabler Längen (VLC-Codierung) verschlüsselt werden, wobei der Vektorparameter,
der Abweichungsparameter und der mögliche mindestens eine Parameter
eine Gruppe mit einer Anzahl N an Parametern bilden.
-
Das
erfindungsgemäße Verfahren
ist dadurch gekennzeichnet, daß
- – jeder
einzelne von den N Parametern bei Bedarf zuerst für ein Codierungsregime
mit nur einem einzigen Code variabler Länge (VLC) angepaßt wird,
und
- – die
Werte, jeder dieser N Parameter annehmen kann, mit Hilfe dieses
einzigen VLC codiert werden.
-
Die
vorgenannte Erfindung ist ebenfalls im beigefügten unabhängigen Anspruch 1 angegeben. Bevorzugte
Ausführungsbeispiele
der Erfindung ergeben sich aus den beigefügten abhängigen Ansprüchen.
-
Die
Erfindung wird im folgenden unter Erörterung von Ausführungsbeispielen
und unter Bezugnahme auf die zugehörigen Zeichnungen näher beschrieben,
welche zeigen:
-
1 eine
vereinfachte und verallgemeinerte Darstellung der Verwendung eines
Voraussageblocks und eines Bewegungsvektors von einem vorhergehenden
zu einem gegenwärtigen
Bild in einer Videosequenz, wie bereits in der Einleitung erwähnt,
-
2 einfache
Beispiele der Codierung von Ereignissen oder Parameterwerten unter
Verwendung von Codewörtern,
-
3 ein
Beispiel eines relevanten Codes mit variabler Länge (VLC), und
-
4 ein
alternatives Beispiel für
einen relevanten VLC.
-
Das
erfindungsgemäße Verfahren
ist in vielerlei Hinsicht ähnlich
der zuvor beschriebenen Gruppe von Kompressionsverfahren. Er Hauptunterschied ist,
daß die
Parameterbeschreibung modifiziert oder angepaßt ist, so daß sämtliche
relevanten Parameter den selben VLC verwenden können. Dies bedeutet, daß die Parameter
derart beschrieben sind, daß die Statistiken
für zugehörige Werte
für sämtliche
relevanten Parameter ungefähr
die selben sind. Bei den meisten der definierten Standardverfahren
muß die Größe der quantisierten
transformierten Koeffizienten codiert werden. Viele dieser Koeffizienten
sind gleich null. Es wurde eine feste Laufordnung durch diese Koeffizienten
festgelegt, so daß statistisch
die größten Koeffizienten
als erste durchlaufen werden, während
viele der letzten Koeffizienten gleich null sind. Eine Aufgabe ist
die Angabe der Größe der Koeffizienten,
die ungleich null sind. Dies kann erfolgen, indem für jeden
von null verschiedenen Koeffizienten ein "Ereignis" codiert wird, das sowohl die Größe des Koeffizienten
(LEVEL), als auch die Zahl der Null-Koeffizienten, die seit dem Auftreten
des letzten von null verschiedenen Koeffizienten aufgetreten sind
(RUN), angibt. Darüber
hinaus muß angegeben
werden, welcher der letzte von Null verschiedene Koeffizient in dem
Lauf ist, um das Codieren einer Vielzahl von Nullen am Ende des
Blocks zu vermeiden. Zu diesem Zweck wird eine Parameterdefinition
mit einer dritten Variablen (LAST) im Standard H.263 verwendet,
welche angibt, ob der letzte Koeffizient im Lauf ein von Null verschiedener
Koeffizient ist oder nicht. Diese letzte Variable kann daher nur
zwei Werte annehmen (letzter oder nicht letzter). Ein Ereignis wird
daher in diesem Fall eine Sammlung von Werten: (LEVEL, RUN, LAST).
Es zeigt sich, daß selbst
das wahrscheinlichste dieser Ereignisse nur mit einer Wahrscheinlichkeit
von ungefähr
10–20%
auftritt. Andere Parameter unter den zu codierenden haben ein höchstwahrscheinliches
Ereignis mit einer Wahrscheinlichkeit von 50%. Daher ist das die
Codierung der Parameter (LEVEL, RUN, LAST) verwendende Modell für den Fall
schlecht geeignet, in dem der Wunsch besteht, nur einen einzigen
VLC zu verwenden.
-
Bei
dem durch die Erfindung vorgeschlagenen Verfahren ist ein Parameter
durch (LEVEL, RUN) definiert. Darüber hinaus existiert ein separates
Ereignis, das das "Ende
des Blocks" (EOB)
anzeigt. Dies ist aus den Standards H.61, H.262 und MPEG2 bekannt.
Bei diesen Standards tritt EOB als das höchstwahrscheinliche Ereignis
mit einer Wahrscheinlichkeit von üblicherweise 15–30% auf.
Bei der Verwendung des vorgeschlagenen Verfahrens werden üblicherweise
kleinere Blockgrößen – beispielsweise
4×4 Pixel – verwendet
oder gar die Blöcke
zu Codierzwecken geteilt. Es existieren dann weniger zu codierende
Koeffizienten in jedem Block und das Ereignis EOB tritt daher häufiger auf – üblicherweise mit
einer Wahrscheinlichkeit von 50% und manchmal sogar mehr. Es zeigt
sich, daß ein
derartiges Modell zu einer Ereignisstatistik führt, die der entsprechenden
Statistik für
Bewegungsvektordaten (V, zuvor beschrieben) sehr ähnlich ist.
Diese beiden Parameter sind daher zum Codieren mit dem selben VLC
gut geeignet.
-
Zur
beispielhaften Einleitung wurde in 2 eine Tabelle
erstellt, die verschiedene Arten der Erstellung von Codeworttabellen
zeigt. Ein Parameter E kann verschiedene Werte E0,
E1, E2, E3 aufweisen, denen verschiedene Wahrscheinlichkeiten
zugewiesen sind. Das Ereignis mit der höchsten Wahrscheinlichkeit ist
in diesem Fall E0 und E1,
E2, E3 haben nacheinander
geringere Wahrscheinlichkeiten des Auftretens. Eine einfache Codewarttabelle,
nämlich die
Tabelle 2, gibt jedes einzelne der möglichen Ereignisse in zwei
Bits an. Diese Codeworttabelle 2 ist besonders an die Tatsache angepaßt, daß vier mögliche Ereignisse
existieren. Wenn weitere mögliche Ereignisse
existieren, wären
mehr Bits erforderlich, und die Codeworttabelle 3 verwendet acht
Bits, weshalb diese Codeworttabelle geeignet ist viel mehr Werte
von E zu beschreiben.
-
Die
Tabelle 1 wurde jedoch erstellt, um die Wahrscheinlichkeit der verschiedenen
Werte mit einzubeziehen. Dies ist ein Code mit variabler Länge (VLC),
der als erstes die Eigenschaft hat, daß insgesamt "Platz gespart" wird, da das Ereignis
mit der höchsten
Wahrscheinlichkeit und daher dem häufigsten Auftreten nur ein
einziges Bit braucht. Dieser besondere VLC ist an eine Gruppe von Ereignissen
angepaßt,
die mit der Wahrscheinlichkeit von 20%, 25%, 12,5 % etc. auftreten.
Darüber
hinaus hat ein derartiger Code die Eigenschaft, daß er einfach
zu herauszufinden ist, wenn ein Codewort vollständig gelesen wurde, da es einfach
ist, eine "1" in dem Bitstrom
zu suchen, und wenn eine "1" gefunden wird, wurde
ein Codewort vollständig
gelesen.
-
Die
Codeworttabelle 1 in 2 wurde daher speziell an eine
Wahrscheinlichkeitsverteilung oder -statistik für den Parameter E angepaßt. Anderen
Parametern kann ein anderer Typ von Statistik zugeordnet sein, und
diesen wird vorteilhafterweise eine Codeworttabelle mit einem anderen
Aussehen als die Tabelle 1 in 2 zugeordnet
sein, die jedoch noch immer vom VCL-Typ ist. (Beispiele für andere
VLC Codes ergeben sich aus 3 und 4).
Wie zuvor erwähnt,
besteht ein Bitstrom dann aus Abschnitten, in denen ein Wechsel
von einer Art der Codierung zu einer anderen entlang des Stroms
erfolgt. Es ist die Interpretation früherer Codewörter in dem Bitstrom erforderlich,
um zu wissen, welcher VLC beim nächsten
Mal verwendet werden soll. Beispielsweise kann ein MODE Parameter
(der mit einem separaten VLC Code zu codieren ist) vorgesehen sein,
wobei der Wert von MODE angibt, daß in dem Bitstrom vier Vektoren
(V) zu erwarten sind, gefolgt von Koeffizientendaten, während ein
anderer Wert von MODE angibt, daß Koeffizientendaten direkt
zu erwarten sind. Wenn ferner ein Koeffizient-Ereignis angibt, daß mehr Koeffizientendaten
vorhanden sind, wird dem Rechnung getragen, während bei Empfang der Anzeige,
daß die
der letzte von Null verschiedene Koeffizient ist (beispielsweise
mittels LAST angezeigt), möglicherweise
nach MODE Informationen im nächsten
Code gesucht werden sollte.
-
Die
Idee hinter der vorliegenden Erfindung ist daher die Vereinfachung
eines VLC-Schemas derart, daß nur
ein Codetyp für
sämtliche
Parameter einer Anzahl relevanter Parameter existiert. Dies bedeutet, daß eine bestimmte
Umdefinierung von Parametern erfolgen muß, d.h. die Vereinfachung der
Kanalcodierung kann Folgen (beispielsweise eine Veränderung)
für die
Quellcodierung haben.
-
Ein
Beispiel für
das Aussehen eines geeigneten VLC findet sich in der 3.
Die Codetabelle ist in der Zeichnung links in allgemeiner Form wiedergegeben
und in einer direkter geschriebenen Form weiter rechts ausgeführt. Jedes
Xn kann den Wert 0 oder 1 annehmen. Das
heißt,
daß bei
dem vorliegenden Code ein Codewort mit 1 Bit, zwei Codewörter mit
3 Bits, vier Codewörter
mit 5 Bits etc. existieren, wie aus der geschriebenen Tabelle ersichtlich.
(Üblicherweise
wird dann ein Parameterwert mit einer hohen Wahrscheinlichkeit dem
kürzesten
Codewort zugewiesen). Ein Bitstrom ist eine Ansammlung von Codewörtern aus
dieser Tabelle. Beispielsweise kann (1 1 001 01001 011 1 00001)
Teil eines derartigen Bitstroms sein. Für jedes Codewort existiert
eine Übersetzung
in einen Parameterwert En (in einem vorhergehenden
Beispiel wurde der Vektorparameter V als Beispiel verwendet. Das
Codewort 1 entspricht dann V=0, das Codewort 001 entspricht V=+1,
das Codewort 011 entspricht V=–1,
etc.).
-
Es
ist ferner wichtig, daß die
vorbereitete Codetabelle eine einfache Regel zum Auffinden eines Codeworts
im Bitstrom liefert. Bei dem hier angegebenen Beispiel existiert
eine derartige einfache Regel. Es sei angenommen, daß das Codewort
Nr. n in dem Bitstrom gefunden wurde und das Codewort Nr. (n+1)
gefunden werden soll:
- – wenn das erste Bit 1 ist,
ist dies einfach das nächste
Codewort, nämlich
einfach 1.
- – wenn
das nächste
gelesene Bit 0 ist, werden Paare aus zwei Bits gelesen, bis das
letzte gelesene Bit 1 ist. Dann ist das vollständige Codewort (n+1) gefunden.
-
Dies
schafft einen sogenannten "selbstsynchronisierenden" Code, da der Code
nunmehr die Eigenschaft hat, daß das
Lesen des Bitstroms schnell wieder den richtigen "Rhythmus" einnimmt, nachdem ein
Fehler in den Bitstrom gelangt ist. Wenn der genannte Bitstrom als
Beispiel verwendet wird, kann ein Fehler durch das Verändern des
Bits 3 von 0 zu 1 eingebracht werden. Der Bitstrom mit dem Fehler
lautet dann (1 1 101 01001 011 1 00001). Unter Verwendung der genannten
Decodierregel in diesem Bitstrom werden die folgenden Codewörter gefunden: (1
1 1 0101001 011 1 00001). Es ist ersichtlich, daß die Codewörter 3 und 4 aufgrund des Übertragungsfehlers
falsch sind (d.h. (1 und 0101001 anstatt 001 und 01001). Danach
sind die Codewörter
jedoch wieder korrekt. Eine derartige schnelle Reparatur rechtfertigt
den Begriff "selbstsynchronisierend".
-
4 zeigt
eine alternative Codetabelle mit einer ähnlichen Struktur wie die Codetabelle
in 3, jedoch etwas "durcheinander" hinsichtlich des Auftretens von Nullen
und Einsen. Diese Tabelle hat zahlreiche günstige Eigenschaften, ähnlich der
Tabelle in 3, unter anderem, weist sie
eine gewisse Symmetrie auf, die in bestimmten Fällen verwendet werden kann.
Jedoch ist der VLC in 4 ein Beispiel für einen
nicht selbstsynchronisierenden VLC.
-
Die
Verwendung nur eines einzigen VLC führt zu den folgenden klaren
Vorteilen:
- – das Codieren und Decodieren
von Bitströmen
ist einfacher als bei der Verwendung mehrerer VLC, da nur eine einzige
Regel bezüglich
der Erstellung und der Decodierung von Bitströmen erforderlich ist (im Gegensatz
zu zahlreichen Regelgruppen, je nachdem, welcher Parameter codiert/decodiert werden
soll),
- – wenn
der verwendete einzige VLC wie in dem vorhergehenden Beispiel gut
strukturiert ist, ist die Codier-/Decodierregel besonders einfach.
(wie bereits erwähnt
müssen
bei bekannten Verfahren mehrere Operationen ausgeführt werden,
um festzustellen, ob ein Codewort gefunden wurde.)
- – da
nur ein VLC vorhanden ist, kann der Decodierer zuerst eine Anzahl
von Codewörtern
aus dem Bitstrom decodieren (b.w. für ein vollständiges Bild),
um anschließend
die Interpretation sämtlicher
Codewörter
für das
gesamte Bild zu durchlaufen. Dies ist bei den bisher bekannten Verfahren
nicht möglich,
da zahlreiche VLC vorhanden sind und nur eine Interpretation früherer Code wörter gegeben
ist, welche entscheiden kann, welcher VLC das nächste Mal zu verwenden ist,
- – wenn
Fehler im Bitstrom auftreten sollten, ermöglicht die Verwendung eines
selbstsynchronisierenden VLC das Wiederfinden des korrekten Codeworts
unmittelbar nach der Stelle des Auftretens des Fehlers. Wenn der
Rest des Codierverfahrens auf besondere Weise aufgebaut ist, bedeutet
dies, daß die
Möglichkeit
bestehet, gültige Informationen
unmittelbar nach der Fehlerstelle zu "retten". Wie zuvor erwähnt, ist dies bei den bekannten
Verfahren nicht ganz so einfach, bei denen zuerst bestimmte Synchronisierungswärter im
Bitstrom aufgefunden werden müssen,
bevor ein Neubeginn unter Verwendung des restlichen Bitstroms möglich ist.
-
Die
zuvor beschriebene Klasse von Codierern wird oft als Hybridcodierer
bezeichnet, da sie teilweise einen Prädiktor bilden und teilweise
die Abweichung von der Voraussage codieren. Bei dieser Bildcodierung
wird jedes zu codierende Bild in eine Anzahl von Blöcken einer
bestimmten Größe unterteilt,
wie zuvor erwähnt.
Für jeden
Block wird unter Verwendung von Blöcken in einem oder mehreren zuvor
codierten Bildern und Vektorwerten, die angeben, an welcher Stelle
in vorherigen Bildern Daten für die
Voraussage gefunden werden, eine Voraussage getroffen. Im einfachsten
Fall wird ein einzelner Block eines vorhergehenden Bildes als Voraussageblock für den gegenwärtigen Block
verwendet. Der Vektorwert ist dann einfach eine Zahl, welche die
Bewegung im Bild vom Voraussageblock im vorhergehenden Bild zum
gegenwärtigen
Block im gegenwärtigen Bild
angibt. (Darüber
hinaus ist es möglich,
mehr als einen Vektorparameter zu verwenden, beispielsweise kann
die horizontale und die vertikale Bewegung unter Verwendung jeweiliger
Vektorparameter beschrieben werden.)
-
Da
der gegenwärtige
Block nicht notwendigerweise der getroffenen Voraussage (Voraussageblock)
sehr ähnlich
ist, wird sodann die Differenz oder die Abweichung zwischen der
Voraussage und dem gegenwärtigen
Block berechnet. Diese Abweichung wird sodann einer geeigneten mathematischen Transforma tion
unterzogen und Transformierungskoeffizienten werden erhalten, die
eine Basis für
die Definition eines günstigen
Parameters zum Beschreiben der betreffenden Abweichung bilden.
-
Anschließend werden
die Informationen durch Erstellen weiterer Parameter vervollständigt, welche
verschiedene zusätzliche
Informationen für das
gegenwärtige
Bild beschreiben, beispielsweise welche Blöcke überhaupt vom entsprechenden
Block im vorhergehenden Bild verschieden sind, und welche Blöcke Informationen
zusätzlich
zur Voraussage enthalten.
-
Infolgedessen
wird das digitale Bild oder die Videosequenz mittels einer Anzahl
verschiedener Parameter beschrieben.
-
Die
Werte, die jeder der Parameter annehmen kann, werden sodann unter
Verwendung ein und desselben VLC codiert. Anders ausgedrückt, existiert nur
eine Gruppe von Codewörtern
bei dem erfindungsgemäßen Verfahren.
Damit jedoch nur ein VLC verwendet wird, muß die Beschreibung jedes einzelnen
Parameters notwendigerweise angepaßt/modifiziert werden, insbesondere
in bezug auf die Wahrscheinlichkeit des Auftretens der Werte, so
daß die Werte
oder Ereignisse des Parameters für
das Codieren durch den einzelnen VLC geeignet sind. Im Zusammenhang
mit einer "Anpassung/Modifizierung" muß selbstverständlich der
Fall einbezogen werden, daß eine
Anpassung nicht erforderlich ist, da es wichtig ist, daß zumindest
eine der relevanten Parameterbeschreibungen die Basis für das Bilden
des betreffenden VLC bildet und daher in Wirklichkeit keine "Anpassung" benötigt.
-
Ferner
bedeutet "Anpassung" beispielsweise,
daß ein
Parameterwert mit einer Wahrscheinlichkeit von ungefähr 50% und
andere Werte mit einer abnehmenden Wahrscheinlichkeit von üblicherweise 10–20% oder
weniger auftreten, ein Modell gilt auch als ausreichend gut angepaßt, wenn
die Parameter, welche dir größte Kapazität im Bitstrom
erfordern, wie beispielsweise Vektorparameter und Koeffizientenparameter,
an den selben VLC angepaßt
sind. Es ist von geringer Bedeutung, wenn ein Parameter, dem nur
ein Wert und eine geringe Häufigkeit
in einem Bild zugewiesen ist, eine Statistik aufweist, die nicht
glei chermaßen
gut an den VLC angepaßt
ist. Ein Beispiel für
einen Parameter, dem ein Wert nur einmal in einem Bild zugewiesen
wird, ist das Bildformat, das einmal in den Bild-Kopfinformationen
auftritt.
-
Es
muß eine
unzweideutige Übersetzung
eines Codeworts in einen Parameterwert oder ein Ereignis für jeden
zu beschreibenden Parameter.
-
Im übrigen ist
eine Modifizierung oder Generalisierung der Erfordernis bezüglich "ein und des selben
VLC" dahingehend
vorstellbar, daß beispielsweise
ein aus einer vorbestimmten Gruppe von Codes gewählter bestimmter Code verwendet
wird.
-
An
bestimmten Stellen in einer Bildfolge wird ein unverkennbares Codewort
eingefügt.
Dies kann am Start einer Bildfolge oder am Beginn eines Bildes sein
oder die Bilder können
sogar derart geteilt werden, daß mehrere
derartige unverkennbare Codewörter
pro Bild vorhanden sind. Der Zweck ist, daß diese unverkennbaren Codewörter "Eingangspunkte" sind, so daß es möglich ist,
ein Decodieren neu zu beginnen, selbst wenn die vorhergehenden Bits
verpaßt
wurden – beispielsweise
weil Bitfehler auftraten und es angebracht war, zu einem neuen "Eingangspunkt" vorwärts zu springen.
Dieses unverkennbare Codewort wird als Synchronisationswort bezeichnet und
bildet den Start einer "Kopfinformation", die beim weiteren
Decodieren zu verwendende übergeordnete
enthält – beispielsweise,
aus wie vielen Pixeln ein Bild in der Horizontalen und der Vertikalen
besteht, und wie dieses Bild zeitlich zum vorherigen Bild steht.
-
Die "Kopfinformation" kann üblicherweise unter
Verwendung des selben einzelnen VLC codiert werden, wie der Rest
der Bildparameter. Andererseits befinden sich der Codierer und der
Decodierer in einem besonderen Zustand, wenn sie ein Synchronisationswort
Verarbeiten. Möglicherweise
können dann
die zuvor erwähnten
Vorteile in der Praxis bewahrt werden, wie
- – das einfachere
Decodieren unter Verwendung eines VLC,
- – ein
gut strukturierter VLC,
- – Decodieren
des gesamten Bildes vor dem Interpretieren der Codes und
- – schneller
Eintritt in den korrekten Rhythmus nach einem Fehlerbit,
selbst
wenn einige Parameter in Verbindung mit Synchronisationswörtern unter
Verwendung anderer VLC oder FLC als dem vorerwähnten einzelnen VLC codiert
sind. Es kann beispielsweise interessant sein, einen Parameter zu
codieren, der eine Zeitreferenz für das Bild enthält und der
beispielsweise Werte von 0 bis 255 annehmen kann, wobei sämtliche
Werte die selbe Wahrscheinlichkeit haben. Dieser Parameter kann
unter Verwendung eines 8 Bit FLC in der Bild-Kopfinformation codiert
sein. Der Decodierer würde
sodann sämtliche
Informationen in den Kopfinformationen vor dem Fortsetzen des Decodierens des
Hauptteils der Bildinformationen empfangen und interpretieren.