-
Die
Erfindung betrifft Verfahren zum Intrakodieren eines Bildes nach
dem Oberbegriff des Anspruchs 1.
-
Viele
Arten von Videokodierern komprimieren Videobilder, um die Menge
an Daten zu reduzieren, die über
digitale Kanäle übertragen
oder in Speichern oder sonstigen Medien gespeichert werden. Typischerweise
empfängt
ein Videokodierer ein digitales Video-Einzelbild als Pixeltabellen,
die eine Serie von Einzelbildern repräsentieren, die nacheinander
wiedergegeben werden, um ein bewegliches Bild zu ergeben. Der Videokörper setzt
die Pixeltabellen in kodierte Videodaten um, welche weniger Bits
für ihren
Ausdruck benötigen.
Ein ideales Kodierverfahren für
einen Videokodierer hat geringen Rechenaufwand, um schnelle Kodierung
mit minimalem Prozessorschaltkreisaufwand zu ermöglichen, hohe Kompression,
um die für
die Übertragung
oder Speicherung der Videodaten benötigte Bandbreite zu reduzieren,
und erhält
gleichwohl eine hohe Bildqualität nach
dem Kodieren aufrecht. Solche idealen Kodierverfahren sind schwierig
zu erzielen. Üblicherweise muß der Rechenaufwand
erhöht
und/oder die Bildqualität
abgesenkt werden, um die Kompression zu verbessern. Kodierverfahren,
welche die Kompression ohne entsprechende Zunahme des Rechenaufwandes
verbessern oder die den Rechenaufwand verringern, ohne einen entsprechenden
Verlust an Kompression oder Bildqualität mit sich zu bringen, werden
benötigt.
-
Ein
ideales Kodierverfahren existiert nicht. Für bestimmte Anwendungsfälle geeignete
Kodierverfahren werden typischerweise entsprechend der Kompression
ausgewählt,
die für
die verfügbare Bandbreite
benötigt
und von der verfügbaren
Rechenleistung zur Verfügung
gestellt werden kann. Ein Anwendungsfall, bei dem Video über einen
Kanal mit sehr begrenzter Bandbreite übertragen wird, verwendet oft
eine komplizierte Kodierung, um die Menge an Daten erheblich zu
reduzieren, die benötigt
wird, um akkurat ein Videobild zu übertragen. Dies erfordert Rechenressourcen
hinreichender Leistung, um komplizierte Kodierungen bei der Bildrate
des Videobildes auszuführen.
Komplizierte Kodierungen können ungeeignet
für Anwendungsfälle mit
begrenzten oder von mehreren benutzten Rechenleistungsressourcen und
einem Kanal mit relativ großer Übertragungsbandbreite
sein.
-
Das
Auswählen
eines geeigneten Videokodierverfahrens für einen Software-Kodierer,
der auf einer Mehrzahl von Plattformen mit unterschiedlichen Niveaus
der verfügbaren
Rechenleistung läuft,
wirft zusätzliche
Probleme auf. Wenn ein Kodierverfahren minimaler Schwierigkeit für eine Plattform
niedriger Leistung geeignet ausgewählt wird, leidet die Videokompression
oft, so daß die Übertragungskanalbandbreite überlastet
werden kann (sie ist dann nicht in der Lage, die gewünschte Bildfrequenz
einzuhalten), während
die Rechenleistung von Plattformen höherer Leistung verschwendet
wird. Wenn im Gegensatz dazu ein hochkomplexes Kodierverfahren verwendet wird,
können
Plattformen niedriger Leistung möglicherweise
nicht in der Lage sein, Video mit der gewünschten Bildrate zu kodieren,
und Übertragungskanalbandbreite
kann verschwendet werden auf Kosten der Rechenleistung, die für andere
Zwecke verwendet werden könnte.
-
Aus
der IEEE Transactions an Image Processing, Vol. 3, Nr. 2, 1994,
Seiten 207 bis 215 ist bekannt, eine ein Graustufenbild repräsentierende
Pixelmatrix in eine Quadverzweigungsstruktur aufzuteilen und diese
Struktur zu kodieren, wobei die Information über einen Pixel in dem Graustufenbild
aus einer Komponente besteht.
-
Die
IEEE Transactions an Image Processing, Vol. 5, Nr. 1, 1996, Seiten
4 bis 15, offenbart eine Baumstruktur im Zusammenhang mit Schwarz-Weiß-Bildern,
wobei die Baumstruktur zur Strukturierung und Lokalisierung der
Bildinformation in unterschiedliche Levels verwendet wird. Die Levels
unterscheiden sich in ihrer Wichtigkeit bezüglich einer Bildrekonstruktion,
wobei niedrigeren Levels bei der Bildrekonstruktion eine höhere Bedeutung
zukommt.
-
Die
Fernseh- und Kinotechnik, Nr. 5, 1994, Seiten 227 bis 237, offenbart
eine Übersicht über den MPEG-2-Video-Standard,
wobei im wesentlichen Algorithmen der Videokodierung vorgestellt
werden.
-
DE 195 01 551 A1 offenbart
eine Bewegungsvektor-Ermittlungseinrichtung. Bei einem farbigen
Bild weist die Pixelmatrix aus mehreren Komponenten bestehende Einträge für jeweils
einen Pixel auf, wobei die Komponenten in Kombination die Farbe
des entsprechenden Pixels angeben. Eine Kodierung dieses farbigen
Bildes ist mittels des Verfahrens nicht möglich, da die Kodierung mehrkomponentiger Einträge nicht
vorgesehen ist.
-
Aus
US 5 446 806 ist die Verwendung
einer Quadtree-Verzweigung bei der Codierung eines Bildes in Form
einer Pixelmatrix bekannt.
-
Unter
anderem in Maragos, P. et al. "Two-Dimensional
Linear Prediction and Its Application to Adaptive Predictive Coding
of Images", in:
IEEE TRANSACTIONS an ACOUSTICS, SPEECH and SIGNAL PROCESSING; Band
ASSP-32, Heft 6, 1984, S. 1213–1229
wird eine ADPCM beschrieben, bei der ein Einzelbild dem "INTRAFRAME ADPCM" unterzogen wird,
unter Berücksichtigung
einer Prädiktion, sowie
einer adaptiven Quantisierung. Es wird dort beschrieben, dass dabei
die adaptive Prädiktion
verwendet wird, um aus den bereits codierten Pixeln eines Bildes
einen Schätzwert für das neu
zu kodierende Pixel zu erhalten, so dass nur die Differenz zu diesem Schätzwert quantisiert
und kodiert werden muss.
-
Aufgabe
der Erfindung ist es daher, ein Verfahren nach dem Oberbegriff des
Anspruchs 1 zu schaffen, das effizient ein farbiges Bild unter Verwendung
der Quadverzweigungsstruktur kodiert.
-
Diese
Aufgabe wird entsprechend den Merkmalen des Anspruchs 1 gelöst. Dadurch
ist es möglich,
ein farbiges Bild zu kodieren, dessen Information pro Pixel mehrere
Komponenten aufweist, wobei die ersten Komponenten der Pixel in
einer ersten Quadverzweigungsstruktur kodiert werden und eine weitere Komponente
in einer weiteren Quadverzweigungsstruktur, die ein Unterbaum der
ersten Quadverzweigungsstruktur ist, aufgeteilt und kodiert wird. Eine
verbesserte Kompression ist möglich,
da eine die weitere Komponente repräsentierende Kodierung Stämme der
ersten Quadverzweigungsstruktur schafft, und nur die zusätzlichen
Zweige in der ersten Quadverzweigungsstruktur kodiert werden müssen.
-
Vorteilhafte
Weiterbildungen sind den Unteransprüchen zu entnehmen. Die Erfindung
wird anhand der in den beigefügten
Abbildungen dargestellten Ausführungsbeispiele
näher beschrieben.
-
1A bzw. 1B illustrieren
eine Quadverzweigungsaufteilung eines Blocks und die zugeordnete
Quadverzweigungsstruktur.
-
2 illustriert
Beziehungen zwischen Quadverzwiegungsaufteilungen und Quadverzweigungsstrukturen
von drei Farbkomponenten in einem Kodierverfahren gemäß einer
Ausführungsform.
-
3 ist
ein Flußdiagramm
eines Intrakodierprozesses gemäß einer
Ausführungsform.
-
4 ist
ein Flußdiagramm
eines bekannten Interkodierprozesses.
-
5A und 5B illustrieren
einen Video-Kodierprozeß und
einen Kodierer gemäß einer Ausführungsform.
-
6A und 6B illustrieren
einen Video-Kodierprozeß und
einen Kodierer gemäß einer anderen
Ausführungsform.
-
7 zeigt
Graphiken, die Prozentsätze
von Interkodierlängen,
die geringer sind als eine Schwelle sind, verwendete Intracodes
und eine Reduktion in der Bitrate als Funktionen einer bei dem Kodierverfahren
nach der 6A verwendeten Schwelle illustrieren.
-
8 ist
ein Flußdiagramm
eines Prozesses, welcher die Kodierkomplexität gemäß der Anwendung eines Prozessors
oder eines Kommunikationskanals ändert.
-
9 illustriert
die Beziehungen zwischen Kodierkomplexität, Bits-Bild (Kompression)
und kodierter Bildqualität
für einen
Kodierprozeß gemäß einer
Ausführungsform.
-
Ein
Videobild besteht konventionellerweise aus einer Sequenz von Einzelbildern,
welche Zeitpunkte in dem Videobild repräsentieren und die sequentiell
wiedergegeben werden, um die Illusion der Bewegung zu bewirken.
Jedes Einzelbild eines Videobildes kann digital durch Pixeltabellen
repräsentiert werden,
die eine oder mehrere zweidimensionale Matrizen von Pixelwerten
umfassen, wobei jeder Pixelwert ein Charakteristikum einer Fläche (Bildelement
oder Pixel) in dem Videobild zu einem Zeitpunkt entsprechend dem
Einzelbild identifiziert. Beispielsweise hat in einer Wiedergabe
eines Videoeinzelbildes, gewöhnlich
als YUV-Farbwiedergabe bezeichnet, jedes Einzelbild drei entsprechende
zweidimensionale Matrizen von Pixelwerten, wobei eine Matrix die
Y-Komponenten (d. h. Luminanzen) der Pixel in dem Einzelbild repräsentiert
und zwei Matrizen U- und V-Komponenten (d. h. Chrominanzen) von
Pixeln in dem Einzelbild repräsentieren.
-
Das
Kodieren setzt die Pixelmatrizenwerte in Codes um, welche weniger
Bits benötigen
als die Originalmatrizen, um diese auszudrücken. Das Videobild kann dann
gespeichert oder übertragen
werden, wobei weniger Speicherraum oder Bandbreite benötigt wird.
Bei einer Art von Kodierprozeß,
wie durch das Protokoll H.263 für
Videophone definiert, ist jedes Einzelbild eines Videobildes entweder
ein Intra-Einzelbild, das intrakodiert ist, oder ein Inter-Einzelbild,
das interkodiert ist. Intrakodierung kodiert ein Einzelbild unter
Verwendung nur der Pixelwerte für das
Einzelbild und ist auf Standbilder und Einzelbilder oder Blöcke innerhalb
eines beweglichen Bildes anwendbar. Interkodierung kombiniert Pixelwerte
eines laufenden Einzelbildes mit Information von vorherigen Einzelbildern
und ist generell auf bewegliche Bildkodierung anwendbar.
-
Während des
Kodierens wird ein Einzelbild typischerweise in Wurzelblöcke aufgeteilt,
die typischerweise 16 mal 16 oder 32 mal 32 Pixel umfassen, um die
Berechnungsschwierigkeiten zu vermeiden, die von der Manipulation
größerer Matrizen
von Pixelwerten stammen können.
Die Wurzelblöcke werden
dann kodiert.
US 5 446 806 beschreibt
einen quadverzweigungsstrukturierten Kodierprozeß, der eine festgelegte Anzahl
von Walsh-Transformationskoeffizienten
anwendet, um den Inhalt der Blöcke (oder
Unterblöcke)
zu repräsentieren.
Auf den Inhalt dieser Druckschrift wird ausdrücklich Bezug genommen. Gemäß einem
Quadverzweigungsstrukturkodierprozeß werden Unterblöcke von
einer vorbestimmten anfänglichen
Aufteilung eines Wurzelblocks zusammengeführt, um einen größeren Unterblock
zu bilden, wenn der Inhalt des größeren Unterblocks adäquat durch
einige wenige Codewerte beschrieben werden kann.
-
1A bzw.
1B zeigen
eine beispielhafte Quad- oder Vierfachverzweigungsaufteilung
100 eines
Blocks von Pixelwerten und die resultierende Quadverzweigungsstruktur
150 für den Block.
Die Quadverzweigungsaufteilung
100 enthält Unterblöcke a bis s von Pixelwerten,
die aus dem ursprünglichen
Block durch einen Zusammenführungsprozeß ausgewählt werden.
US 5 446 806 beschreibt
einen Zusammenführungsprozeß, bei dem
eine festgelegte Anzahl von Walsh-Transformationskoeffizienten den Inhalt
jedes Unterblocks a bis s beschreibt und Blöcke zusammengeführt wurden
zur Bildung von Unterblöcken
a bis s, wenn die festgelegte Anzahl von Walsh-Transformationskoeffizienten für den zusammengeführten Block
den Fehler pro Pixel um weniger als einen Schwellenwert erhöhte. Die
Quadverzweigungsstruktur
150 besteht aus Zweigen, welche
Knoten auf vier Niveaus 0 bis 3 verbinden, wobei jedes Niveau n
einer vorgewählten
Aufteilung des Blocks
100 in 4
n Unterblöcke entspricht.
Das Niveau 0 entspricht einer Aufteilung mit einem einzigen Unterblock,
d. h. dem ursprünglichen
Block, und das Aufteilen jedes Blocks in eine vorgewählte Aufteilung entsprechend
einem Niveau (n-1) in vier kleinere Blöcke bildet die vorgewählte Aufteilung
entsprechend jedes Niveau n. Die Aufteilung auf höchstem Niveau kann
einen Pixelwert pro Block enthalten oder so viele Pixelwerte, wie
es Koeffizienten gibt, um einen Block entsprechend einem Blattknoten
der Quadverzweigungsstruktur
150 zu beschreiben.
-
Jeder
Knoten in der Quadverzweigungsstruktur 150 identifiziert
einen Block in einer vorgewählten
Aufteilung entsprechend dem Niveau des Knotens. Knoten mit Zweigen
zu einem nächsthöheren Niveau
identifizieren Blöcke,
die nicht in der Quadverzweigungsaufteilung 100 sind. Blattknoten der
Quadverzweigungsstruktur 150 (d. h. Knoten ohne Zweige,
die sich zu höheren
Niveaus erstrecken) zeigen Blöcke
a bis s an, die sich in der Quadverzweigungsaufteilung 100 befinden.
Ein für
den Wurzelblock erzeugter Quadverzweigungscode indiziert die Quadverzweigungsstruktur 150 und
umfaßt Werte,
welche den Inhalt der Blöcke
beschreiben, zugeordnet den Blattknoten der Quadverzweigungsstruktur 150 (d.
h. dem Inhalt der Blöcke
a bis s).
-
Bei
YUV-Farbvideo werden drei Komponenten Y (Luminanz), U und V (Chrominanzen)
eines Wurzelbloks durch drei Matrizen von Pixelwerten repräsentiert.
Matrizen für
das Repräsentieren
der Komponenten U und V enthalten oft weniger Pixelwerte als die
Matrix, welche die V-Komponente des Wurzelblocks repräsentiert
Beispielsweise hat bei einem bekannten YUV-4:1:1-Format eine Fläche in einem Einzelbild, das
durch vier Y-Werte repräsentiert wird
(normalerweise vier Pixel) nur einen U-Wert und einen V-Wert. Demgemäß wird ein
16-mal-16-Pixelwurzelblock durch eine 16-mal-16-Matrix von Y-Werten,
eine 8-mal-8-Matrix von U-Werten und eine 8-mal-8-Matrix von V-Werten
repräsentiert.
Die Matrizen der Y-Werte, der U-Werte und der V-Werte haben zugeordnete
Quadverzweigungsstrukturen, die hier als der Y-Baum, der U-Baum
und der V-Baum bezeichnet
werden.
-
Gemäß einem
Aspekt der Erfindung soll der V-Baum für ein Einzelbild ein Unterbaum
des U-Baums für
das Einzelbild sein, der seinerseits ein Unterbaum des Y-Baums für das Einzelbild
sein soll. 2 illustriert ein Beispiel der
Beziehung zwischen einem V-Baum 235, einem U-Baum 225 und
einem V-Baum 215 für
ein Einzelbild und entsprechende Quadverzweigungsaufteilungen 230, 220 bzw. 210 einer
16-mal-16-Matrix von Y-Werten, einer 8-mal-8-Matrix von U-Werten und einer
8-mal-8-Matrix von V-Werten.
-
Die
Voraussetzungen bezüglich
des V-Baums 235, U-Baums 225 und V-Baums 215 vereinfachen
das Kodieren eines Wurzelblocks, weil der sich verzweigende Y-Baum 235 den
U-Baum 225 erzeugt und der sich verzweigende U-Baum 225 den V-Baum 215 erzeugt.
Im einzelnen beginnt ein Kodierverfahren mit einer vorgewählten Aufteilung
der Matrix von Y-Werten auf höchstem
Niveau (beispielsweise Niveau 3) und bestimmt, welche Sätze von
vier Blöcken
in der auf höchstem
Niveau liegenden Aufteilung zusammengeführt werden sollten. Das Zusammenführen bildet
eine Zwischenaufteilung, die Blöcke
von der vorgewählten
Aufteilung höchsten
Niveaus (beispielsweise Niveau 3) und Blöcke von einem nächstniedrigeren
Niveau (beispielsweise Niveau 2) der vorgewählten Aufteilung enthält. Das
Zusammenführen
setzt sich fort unter Prüfen
und Zusammenführen
von Blöcken
auf zunehmend niedrigeren Niveaus, bis keine weitere Zusammenführung mehr
erforderlich ist und die Quadverzweigungsaufteilung 230 erreicht
ist. Die Quadverzweigungsaufteilung 230 definiert die Struktur
des V-Baums 235.
-
Der
Y-Baum 235 seinerseits definiert eine beginnende Aufteilung 221,
aus der die Aufteilung 220 und der U-Baum 225 bestimmt
werden. Die Aufteilung 221 enthält Blöcke von U-Werten, zugeordnet dem
Y-Baum 235. Wenn beispielsweise Block U vorbestimmte Aufteilungen
entsprechend jedem Niveau des V-Baums 235 hat, identifizieren
die Blattknoten des V-Baums 235 Blöcke in der Aufteilung 221.
Wenn die Matrix von U-Werten eine geringere Zahl von Niveaus der
vorbestimmten Aufteilungen hat, weil die U-Matrix kleiner ist, werden
die Zweige des höchsten Niveaus 235 verzweigt,
wenn der U-Baum 221 gebildet wird. Wenn beispielsweise
die Quadverzweigungsaufteilung 230 eine 16-mal16-Matrix
von V-Werten ist,
enthält
jeder Block g, h, i, j, o, p, q und r in der Aufteilung des Niveaus
3 der Y-Matrix ein Pixel. Die Aufteilung 220, die eine
8-mal-8-Pixelwertmatrix ist, hat keine Niveau-3-Aufteilung, da das
Niveau 2 der vorbestimmten Aufteilung nur einen U-Wert pro Block
hat. Das Verzweigen des dritten Niveaus vom Y-Baum 235 liefert
eine Quadverzweigungsstruktur mit drei Niveaus, die der beginnenden Aufteilung 221 entspricht.
Blockzusammenführungstests
setzen vier Blöcke
von demselben Niveau, um zu bestimmen, ob irgendein Satz von vier
Blöcken
in der Aufteilung 221 verbunden werden sollten. In 2 verbinden
sich die Blöcke
m, n, o' und s zur
Bildung des Blockes m'.
-
Der
V-Baum 215 wird aus einer beginnenden Verzweigung, die
durch den U-Baum 225 definiert ist, bestimmt. Das Verbinden
von Blöcken
in der beginnenden Verzweigung erzeugt die Quadverzweigungsaufteilung 210,
die der Quadverzweigungsstruktur des V-Baums 215 zugeordnet
ist. In 2 verbinden sich Blöcke von
V-Werten, zugeordnet den Blöcken
a, b, c und d, zur Bildung des Blocks a'. In einer alternativen Ausführungsform
der Erfindung soll der V-Baum 215 ein Unterbaum des Y-Baums 235 sein,
und irgendein U-Baum 225 soll ein Unterbaum des V-Baums 215 sein.
In noch einer anderen alternativen Ausführungsform sollen der V-Baum 215 und der
U-Baum 225 Unterbäume
vom Y-Baum 235 sein, nicht jedoch untereinander Unterbäume bilden.
-
Für natürliche Videos
erzeugen die Unterbaumbeschränkungen
wenig Verzerrung in dem dekodierten Video, weil die drei Farbkomponenten
miteinander in Beziehung stehen. Wenn ein Block von Y-Werten ähnlich ist,
sind die Chancen gut, daß U-Werte
und V-Werte in dem Block hinreichend ähnlich sind, so daß das Kombinieren
der Werte in einen einzigen Block keine große Verzerrung in dem kodierten
Bild hervorruft. Die erforderliche Kodierschwierigkeit wird verringert,
weil die Bestimmung von U-Bäumen
und V-Bäumen
aus einer entwickelten Quadverzweigung mit weniger möglichen
zu überprüfenden Verbindungen
beginnt. Die Kompression tendiert dahin, besser zu werden, weil
ein den V-Baum repräsentierender
Code Stämme
vom U-Baum schafft und nur die zusätzlichen Zweige in dem U-Baum
kodiert werden, um den U-Baum zu repräsentieren. In ähnlicher
Weise liefert der U-Baum Stämme
des Y-Baumes, und nur die zusätzlichen Zweige
im Y-Baum werden kodiert. Bei der Alternative wird die Beziehung
zwischen der ersten kodierten Quadverzweigungsstruktur und einer
zweiten kodierten Quadverzweigungsstruktur durch Zweige indiziert,
die von der ersten Quadverzweigungsstruktur entnommen oder dieser
zugefügt
werden, um die zweite Quadverzweigungsstruktur zu bilden.
-
Ein
Vorteil der Unterbaumbeschränkungen besteht
in verringerter Schwierigkeit der Dekodierungsberechnung. Da ein
für Y-Werte
zusammengefügter
Block immer einen Satz von U- und V-Werten hat, kann, wenn eine
Farbkonversion zur RGB-Domäne
benötigt
wird, die gesamte Fläche
des Blocks mit einem einzigen RGB-Vektor gefüllt werden, und keine weitere
Bedienungsüberprüfung oder
Aufteilung ist erforderlich. Die Beschränkungen hinsichtlich der Quadverzweigungsstrukturen
für die
Farbkomponenten betreffen nicht nur YUV-Farbe, sondern sind auch
bei anderen Farbformaten einschließlich RGB-Farben anwenbar.
-
Die
Beschränkungen
hinsichtlich der Quadverzweigungsstrukturen, welche Y-, U- und V-Matrizen
für ein
Einzelbild eines Videos beschreiben, sind auf Intrakodierung und
Interkodierung anwendbar. Gemäß einem
anderen Aspekt der Erfindung verbessert die Intrablockdifferentialimpulscodemodulation (DPCM)
die Kompression von intrakodierten Blöcken mit oder ohne die Beschränkungen
der Quadverzweigungen für
Farbkomponentenmatrizen. Für
Intra-Block-DPCM-Kodierung
wird eine Differenz zwischen einem Basisvektor und Codevektor, welcher den
Inhalt eines Blocks oder Unterblocks innerhalb eines Einzelbildes
beschreibt, bestimmt, bevor der Codevektor quantisiert wird und
die Entropie oder die Lauflänge
kodiert werden. Wenn der Basisvektor richtig ausgewählt ist,
ist die Differenz klein und die Kompression wird verbessert.
-
Ein
Anwendungsbeispiel von Intra-Block-DPCM-Kodierung wird für die Quadverzweigung
beschrieben, wo die strukturierte Walsh-Transformationskodierung auf den Block
gemäß 1 angewandt wird, obwohl auch die Intra-Block-DPCM auf
Intrakodierung angewandt wird mit oder ohne aufgeteilte Blöcke gemäß einer
Quadverzweigungsstruktur oder Codevektoren, die Walsh-Transformationskoeffizienten
sind. Quadverzweigungsstrukturierte Walsh-Transformationskodierung
speichert eine feste Zahl von Walsh-Transformationskoeffizienten pro Blattknoten
in einer Quadverzweigungsstruktur unabhängig von der Größe des Unterblocks,
der durch den Blattknoten repräsentiert
wird. Wenn beispielsweise die Unterblöcke a und g durch 4-mal-4- bzw. 2-mal-2-Matrizen
von Pixelwerten repräsentiert werden,
sind die Walsh-Transformationen
der Blöcke a
bzw. g 4-mal-4- bzw. 2-mal-2-Matrizen von Walsh-Transformationskoeffizienten. Ein einzelner Koeffizient
w00 oder vier Koeffizienten w00, w01, w10 und w11 aus den Walsh-Transformationen
können
pro Blattknoten kodiert werden. Die kodierten Koeffizienten werden
hier mit einem Codevektor W bezeichnet, und für das beispielhaft gewählte Kodierverfahren
ist der Codevektor W gleich {w00} oder {w00, w01, w10, w11}. Der
Codevektor W für
einen Knoten a wird als Wa bezeichnet und ähnlich für die anderen Knoten. Ein beispielweiser
Quadverzweigungscode stellt die Codevektoren in einer eindimensionalen
Reihenfolge Wa, Wb, Wc, Wd, ...., Wr, Ws bereit, die einem Zickzackmuster
durch die Unterblöcke
in der Quadverzweigungsaufteilung 100 folgt, so daß die in
dem Quadverzweigungscode aufeinanderfolgenden Codevektoren typischerweise
nahe beieinander in dem Wurzelblock sind.
-
Eine
beispielsweise Ausführung
der DPCM-Intrakodierung verwendet einen Basisvektor W*, der mit
demselben bekannten Wert für
jeden Wurzelblock beginnt, seinen Wert jedoch während des Kodierens jedes Wurzelblocks ändert. Ein
hier als eindimensionales DPCM bezeichnetes, als Beispiel gewähltes DPCM-Intrakodierverfahren
umfaßt
vier Schritte für
jeden Unterblock x eines intrakodierten Blocks, (1) berechne Wx – W*, (2)
quantisierte Wx – W*
mit einem Quantisierer gleicher Schrittgröße, (3) setze W* gleich W*
plus der quantisierte Wert Wx – W*
und (4) kodiere den quantisierten Wert Wx – W* mit einem Entropie-Kodierer. Nachdem
jeder Block kodiert ist, ist der Basisvektor W* gleich dem dekodierten
Wert für
den gerade kodierten Vektor Wx. Wenn der nächste Codevektor W(x + 1) eine
Fläche nahe
dem durch Wx repräsentierten
Bereich repräsentiert,
werden die kodierten Vektoren Wx und W(x + 1) oft ähnlich sein,
und die Differenz W(x + 1) – Wx klein.
Demgemäß komprimiert
die Entropie-Kodierung effizient die quantisierten Differenzen.
-
3 illustriert
ein allgemeineres DPCM-Intrakodierverfahren, das bei 310 mit
dem Auswählen eines
Unterblocks x eines der Intrakodierung zu unterwerfenden Blocks
beginnt. Die Reihenfolge, in der die Unterblöcke ausgewählt und kodiert werden, bestimmt
die Information, die einem Dekoder verfügbar ist, um bei 320 den
Basisvektor W* für
nachfolgend kodierte Unterblöcke
auszuwählen.
In einer Ausführungsform
der Erfindung hat der ausgewählte
Basisvektor W* einen festliegenden, dem Kodierer wie auch dem Dekoder
bekannten Wert für
den ersten Unterblock jedes Wurzelblocks. Alternativ könnte der Basisvektor
W* auf den festen Wert wenige häufig zurückgesetzt
werden, beispielsweise zu Beginn jedes Einzelbildes. Einige Vorteile
des Beginnens mit einem festen Basisvektor W* bestehen darin, daß keine
Bits benötigt
werden, um einen anfänglichen Basisvektor
zu übertragen,
und das Starten jedes Wurzelblocks mit dem festen Basisvektor setzt
das Kodieren zurück
und stabilisiert es durch Verringerung der Ausbreitung von Fehlern.
-
Nach
dem anfänglich
festgelegten Wert für den
Basisvektor W* ändert
sich der Basisvektor W* entsprechend den vorher kodierten Vektoren.
Wenn beispielsweise die Codevektoren Wa bis Ws in dieser Reihenfolge übertragen
werden, kann der Basisvektor W*, der für den Unterblock b ausgewählt wird,
von dem Code des Vektors Wa abhängen.
Der Basisvektor W*, ausgewählt
für den
Unterblock c, kann von den kodierten Vektoren Wa und Wb abhängen, und der
Basisvektor für
einen ausgewählten
Unterblock kann generell abhängen
von den Codevektoren, die vor dem Codevektor für den ausgewählten Unterblock
bereitgestellt wurden. Eindimensionale DPCM-Intrakodierung verwendet
dekodiert Vektoren W(x – 1)
für den
Basisvektor W*, wenn der Vektor Wx kodiert wird. Wenn die Reihenfolge
a bis s einem Zickzackweg durch die Quadverzweigungsaufteilung 100 folgt,
wird der Basisvektor W* oft, jedoch nicht immer ein Codevektor eines
Unterblocks nahe dem gerade zu kodierenden Unterblock sein.
-
Ein
zweidimensionales DPCM-Intrakodierverfahren wählt W* als eine Funktion der
vorher kodierten Vektoren, die an den im Schritt 310 ausgewählten Unterblock
angrenzen. Beispielsweise wird W* als gleich Wa für die Unterblöcke b und
c gewählt, und
W* wird als Wb, Wc oder ein gewichtetes Mittel aus Wa, Wb und Wc
gewählt,
wenn der Unterblock d kodiert wird. Beim zweidimensionalen DPCM-Intrakodieren
wird der Basisvektor bezüglich
geometrischer Nähe
zu dem zu kodierenden Unterblock gewählt anstatt bezüglich der
Nähe in
der Codesequenz. Der Kodierer und der Dekodierer können irgendeine
gewünschte
vordefinierte Regel für
das Auswählen
des Basisvektors W* im Schritt 320 verwenden.
-
Sobald
der Basisvektor W* gewählt
ist, wird die Differenz Wx – W*
im Schritt 330 bestimmt, diese Differenz wird im Schritt 340 quantisiert
und im Schritt 350 entropiekodiert. Die Quantisierung im
Schritt 340 erfolgt unter Anwendung einer gleichförmigen Schrittgröße, welche
die Differenz Wx – W*
durch eine feste Schrittgröße teilt
und das Resultat bis auf eine festgelegte Anzahl von Bits abschneidet.
Gleiche Schrittgrößenquantisierung
liefert ein einfaches Quantisierverfahren, das in Kombination mit
Entropiekodierung die Videodaten effizient komprimiert. Die Entropiekodierung
kann beispielsweise die Huffman-Kodierung
oder arithmetische Kodierung sein. Nach der Entropiekodierung 350 wird
die DPCM-Intrakodierung des Wurzelblocks fortgesetzt, indem bei 310 ein
anderer Unterblock gewählt
wird, oder sie wird nach dem letzten Unterblock beendet.
-
Intrakodierte
Einzelbilder sind solche, bei denen alle Wurzelblöcke intrakodiert
sind. Interkodierte Einzelbilder können einige interkodierte Wurzelblöcke und
einige intrakodierte Wurzelblöcke
haben. Interkodierung eines Wurzelblocks beginnt gewöhnlich mit
der Bewegungsabschätzung,
wobei nach einem vorher dekodierten Einzelbild bezüglich eines
prädiktiven
Blocks gesucht wird, der sich eng an das laufende Einzelbild anpaßt. Wenn
einmal ein solcher prädiktiver
Block für
den Wurzelblock gefunden ist, kann ein quadverzweigungsstrukturierter
Kodierprozeß oder
irgendein anderer Kodierprozeß die
Differenz zwischen dem Wurzelblock des prädiktiven Blocks kodieren. Idealerweise
enthält
ein kodierter Differenzblock ausschließlich oder fast nur Nullen
oder eine andere Kombination von Werten, die effizient komprimiert
sind. In einigen Fällen
jedoch, wenn die Bewegungsabschätzung
keinen gut passenden prädiktiven
Block findet, resultiert geringe oder gar keine Kompression.
-
4 illustriert
ein relativ einfaches Kodierverfahren 400, das die Interkodierung 410 bei
jedem Wurzelblock eines Intereinzelbildes ausführt und bei 420 den
resultierenden Intercode speichert. Das Kodierverfahren 400 verwendet
die Intercodes und die Bewegungsvektoren, welche die prädiktiven
Blöcke identifizieren,
unabhängig
von dem resultierenden Grad der Kompression. Die Anwendungen von
Kodierverfahren 400 umfassen einen Videokodierer, der einen
Ausgang von einer Videokamera empfängt und komprimiertes Videobild
in einem Datenpuffer oder einem anderen Speicher eines Speichermediums, wie
einer Festplatte oder einer optischen Platte speichert. Die komprimierten
Videodaten können
auch über
einen Kanal übertragen
werden, beispielsweise nach Speicherung der komprimierten Daten
in einem Videodatenpuffer. In Fällen,
wo ein Videobild sich schnell ändert,
kann das Kodierverfahren 400 möglicherweise keine große Kompression
und Speicherung bewirken, oder die verfügbare Bandbreite kann ausgeschöpft sein,
bevor ein Videobild vollständig
ist.
-
5A und 5B illustrieren
ein Videokodierverfahren 500, das eine bessere Kompression liefert
als Kodierverfahren 400 bzw. einen Videokodierer 550,
der das Videokodierverfahren 500 implementiert. Das Videokodierverfahren 500 arbeitet
an Blöcken
eines Intereinzelbildes, gespeichert in einem Speicher 560.
In anfänglichen
Schritten 510 und 520 des Videokodierverfahrens 500 interkodieren
bzw. intrakodieren Kodierelemente 570 bzw. 574 im
Intercode (Schritt 510) bzw. Intracode (Schritt 520)
einen Wurzelblock. Kodierelemente 570 und 575 können getrennte
Schaltkreise sein, welche unabhängig
die jeweiligen Kodierprozesse ausführen oder Software-Prozesse,
die sequentiell von einem Prozessor ausgeführt werden, und die Kodierschritte 510 und 520 werden
entweder seriell oder parallel ausgeführt, abhängig von den Fähigkeiten
des Videokodierers 550. Da die Intrablockkodierung dieselbe
für Intereinzelbilder
ist, kann Kodierelement 575 auch Blöcke der Intraeinzelbilder kodieren.
Die Kodierelemente 570 und 575 liefern in einem
dekodierten Bild etwa gleiche Qualität. Beispielsweise halten äquivalente Quantisierungsschrittgrößen (und
Zusammenfügungsschwellen
für Quadverzweigungskodierung) ähnliche
Verzerrungspegel in dekodierten Bildern.
-
Ein
Größenkomparator 580 vergleicht
im Schritt 530 einen Intercode vom Kodierelement 570 mit
einem Intracode vom Kodierelement 575, um festzustellen,
welcher der beiden Codes kürzer
ist. Der Größenkomparator 580 erzeugt
ein Steuerbit, das einem Multiplexer 590 angelegt wird,
um auszuwählen,
ob der Intercode von Kodierelement 570 oder der Intracode
von Kodierelement 575 in einen kodierten Bitstrom vom Videokodierer 550 eingefügt wird.
Das Steuerbit wird ebenfalls in den Bitstrom eingefügt, um einem
Dekodierer anzuzeigen, ob der Block intrakodiert oder interkodiert
ist. Der Schritt 540 oder 545 speichert denjenigen
der Codes, der die wenigsten Bits enthält, und der nicht verwendete Code
wird verworfen. Das Kodierverfahren 500 kodiert jeden Wurzelblock
zweimal (Schritte 510 und 520) und benötigt demgemäß mehr Berechnungen als
das Kodierverfahren 400, das einfach einen Intercode für jeden
Wurzelblock festlegt. Das Kodierverfahren 500 verbessert
jedoch die mittlere Kompression, weil kleinere Intracodes manchmal
größere Intercodes
ersetzen.
-
6A bzw. 6B illustrieren
ein Kodierverfahren 600 bzw. einen Videokodierer 670,
mit dem das Kodierverfahren 600 ausgeführt wird. Der Videokodierer 670 enthält viele
gleiche Elemente wie der Videokodierer 550 aus 5B,
und die obige Beschreibung der Elemente des Videokodierers 550 liest
sich auch auf Elemente des Videokodierers 670, welche dasselbe
Bezugszeichen haben. Der Videokodierer 670 enthält auch
einen Schwellenkomparator 685, der im Schritt 620 eine
Schwellenlänge
tH mit der Länge
(in Bits) eines Intercode von Interkodierelement 570 vergleicht.
Wenn der Intercode länger
ist als die Schwellenlänge
tH, entsperrt der Schwellenkomparator 685 das Kodierelement 575,
das im Schritt 640 den Wurzelblock intrakodiert, und dann vergleicht
der Größenkomparator 680 im
Schritt 650 die Längen
des Intracode und des Intercode. Nach dem Vergleich im Schritt 650 wird
im Schritt 630 bzw. 660 der kürzeste von Intracode und Intercode
verwendet.
-
Wenn
der Intercode kürzer
ist als die Schwellenlänge
tH, wird das Kodierelement 575 gesperrt, und der Größenkomparator 680 erzeugt
automatisch ein Steuerbit zur Anzeige, das der Block interkodiert ist.
Multiplexer 590 wählt
den Intercode, und das Kodieren des Blocks ist beendet, ohne je
den Intracode für
den Block zu berechnen. In einer Ausführungsform, wo die Kodierelemente 570 und 575 sequentiell arbeiten,
erhöht
das Weglassen des Intradodierens für bereits intrakodierte Blöcke die
Kodiergeschwindigkeit des Videokodierers 670 relativ zum
Videokodierer 550.
-
Die
Komplexität
(d. h. die erforderlich Anzahl von Berechnungen) für das Kodierverfahren 600 hängt von
der Anzahl von Wurzelblöcken
ab, für
die sowohl Interkodierung 610 als auch Intrakodierung 640 ausgeführt werden.
Die Schwellenlänge
tH steuert die Komplexität
des Videokodierers 670 und kann in einem Software-Kodierer
eingestellt werden, um in einer Mehrzahlunterschiedlicher Plattformen
mit unterschiedlichen Größen der
verfügbaren
Rechenleistung und Übertragungsbandbreite
angewandt zu werden.
-
7 zeigt
eine Aufzeichnung 710 des Prozentsatzes von Intercodes,
die länger
sind als die Schwellenlänge
tH. In einem Extrem ist die Schwellenlänge tH null, so daß 100% der
Intercodes länger sind
als die Schwelle tH, und ein Videokodierer festlegt, daß für jeden
Wurzelblock ein Intercode und ein Intracode gebildet werden. Diese
Schwellenlänge
tH ist für
Software-Kodierer nützlich,
die auf Plattformen laufen, welche mit Hochleistungsprozessoren
bestückt
sind und mit geringen Bandbreiten aufweisenden Übertragungskanälen arbeiten,
beispielsweise ein leistungsstarker Arbeitsplatzrechner, der mit
herkömmlichen
Telefonleitungen verbunden ist und Software-Videophonanwendungen
ausführt.
Im anderen Extremfall ist die Schwelle tH sehr groß, und der
Videokodierer 670 interkodiert nur Wurzelblöcke von Zwischenbildern.
Dies ist am besten für
einen Computer geeignet, der nicht leistungsstark ist, jedoch mit einem Übertragungskanal
hoher Bandbreite, wie dem IsoEthernet, verbunden ist. In unterschiedlichen Systemen
kann die Schwellenlänge
tH voreingestellt werden, je nach den Möglichkeiten des Videokodierers,
der das Kodierverfahren 600 ausführt.
-
Die
Aufzeichnung 720 in 7 zeigt
einen Prozentsatz, der angibt, wie groß das Verhältnis der Zahl von Intracodes
vom Vidokodierer 670 zur Anzahl von Intracodes vom Videokodierer 550 ist.
Wenn die Schwellenlänge
tH null ist, bestimmt der Videokodierer 670 einen Intracode
und einen Intercode für
jeden Wurzelblock und ist in der Lage, alle kürzeren Intracodes zu finden,
die vom Videokodierer 550 gefunden werden. Wenn die Schwellenlänge tH erhöht wird,
berechnet der Videokodierer 670 keinen Intracode für jeden
Block, und der Videokodierer 670 liefert weniger Kompression
als der Videokodierer 550, weil Videokodierer 670 einige
der kürzeren
Intracodes berechnet. Die Aufzeichnung 730 zeigt den Prozentsatz
der Kompressionsverbesserung, erzielt vom Videokodierer 550,
der auch von dem Videokodierer 670 erreicht wird. Die Aufzeichnung 710 ist konkav,
während
die Aufzeichnungen 720 und 730 konvex sind. Demgemäß eliminiert
eine Schwellenlänge
tH0, die sehr wenig Verlust an Kompression bewirkt, das Intrakodieren
von vielen Blöcken.
-
Bei
den meisten Videokonferenzsystemen ändert sich die Ballance zwischen
der Rechenleistung und der verfügbaren
Bandbreite für
Videodaten, und keine Schwellenlänge
tH paßt
immer zu solchen Systemen. Gemäß einem
Aspekt der Erfindung, dargestellt in 8, überprüft ein Rückkopplungspfad 800 periodisch
im Schritt 810 den Prozessor und die verwendete Bandbreite
und regelt dann im Schritt 820 oder 830 die Schwellenlänge tH,
die beim Kodierverfahren 600 verwendet wird nach, um bei
einer optimalen Rechenleistung zu arbeiten, welche den Prozessor-
und die Bandbreitenlasten zum Ausgleich bringt. Der Rückkopplungspfad 800 kann
einmal ausgeführt
werden, bevor jeder Wurzelblock kodiert wird, wenn das Kodierverfahren 600 angewandt
wird. Alternativ wird der Rückkopplungspfad 800 in
regelmäßigen Zeitintervallen
oder in anderen Intervallen einmal pro Einzelbilddaten ausgeführt.
-
Zur Überprüfung bezüglich Bandbreitenengpässen kann
der Videokodierer die Menge an Daten überprüfen, die in einem Videodatenpuffer
gespeichert sind, um festzulegen, ob die Bandbreite des Übertragungskanals
ausreicht, um die komprimierten Daten, wie erzeugt, zu übertragen.
Wenn der Videodatenpuffer nahezu voll ist, wird die Schwellenlänge tH im
Schritt 830 abgesenkt, um die Rechenleistung und Kompression
zu steigern. Alternativ wird, wenn der Videodatenpuffer Platz für mehr Daten
hat und die Prozessorausnutzung hoch ist, die Schwellenlänge tH erhöht, um die
Rechenleistung zu verringern.
-
Einige
Prozessoren haben einen Ausnutzungsgradindex, der in einem Register
zur Anzeige des Prozessorauslastungsgrades gespeichert ist. Solche
Auslastungsindizes, wenn verfügbar,
können direkt
gelesen werden, wenn im Schritt 810 nach Engpässen gesucht
wird. Alternativ haben Betriebssysteme wie Windows NT und Windows 95 für den Benutzer
zugängliche
Register, die den Auslastungsgrad des Prozessors anzeigen.
-
Bei älteren Systemen,
wo der Prozessorauslastungsgrad schwierig zu bestimmen ist, kann
das Verfahren 800 auch nur den Sendepuffer überprüfen, um
die Kodierrate mit der Übertragungsrate
zu vergleichen. Wenn die Kodierrate höher ist (d. h. der Sendepuffer
nahezu voll ist), wird die Rechenleistung erhöht, um eine optimale Rechenleistung
für die
verfügbare Übertragungsrate
zu wählen.
Wenn die Kodierrate niedriger ist (d. h. der Sendepuffer leer ist), wird
die Rechenleistung verringert, um die Verwendung der verfügbaren Bandbreite
zu maximieren oder die mögliche
Minimalrechenleistung für
den Kodierprozeß zu
erreichen.
-
Das Ändern der
Schwellenlänge
tH ändert nicht
das Format des resultierenden Intercode oder die Qualität des durch
einen Code erreichten Bildes. Demgemäß ist die Schwellenlänge tH irrelvant
für einen
Dekodierer und braucht nicht übertragen
zu werden. Das Ändern
der Schwellenlänge
tH nimmt lediglich einen Ausgleich zwischen der Kompression (der Anzahl
von Bits in dem Code) und der Rechenleistung vor (oder der Anzahl
von für
das Kodieren benötigten
Berechnungen). Das Ändern
der Rechenleistung eines Kodierverfahrens ohne Änderung des Codeformats oder
der Bildqualität
wird auf anderem Weg als der Änderung
der Schwellenlänge
tH erreicht, die festlegt, ob Intrakodierung versucht werden sollte.
Beispielsweise bestimmt die Größe eines Suchfensters
bei der Bewegungsabschätzung
eine Beeinflussung des Kodierrechenaufwandes. Ein großes Suchfenster
enthält
mehr zu untersuchende Punkte und benötigt deshalb mehr Berechnungen. Alternativ
können
Bewegungsabschätzverfahren zwischen dem
Suchen jedes Punktes in einem Suchfenster umschalten auf eine hierarchische
Suchtechnik, die nur ausgewählte
Punkte in dem Suchfenster untersucht. Generell verbessern mehr Suchpunkte die
Chance, den besten prädiktiven
Block zu finden und die Kompression auf Kosten zusätzlicher
Berechnungen zu verbessern. Das Ändern
des Verfahrens oder des Umfangs der Suche nach einem prädiktiven
Block während
der Bewegungsabschätzung ändert nicht
das Format der Codes oder die Qualität des Bildes.
-
Wenn
eine weitere Verbesserung der Kompression benötigt wird, kann Bildqualität geopfert werden,
um dafür
die Bitrate zu reduzieren. Beispielsweise können die Quantisierungsschrittgrößen erhöht werden,
um die mittlere Anzahl von Bits pro Einzelbild zu verringern. 9 zeigt
eine dreidimensionale Graphik, welche den Rechenaufwand, die mittlere
Zahl von Bits pro Einzelbild und das Spitzensignal/Rausch-Verhältnis (PSNR)
für das
oben beschriebene Kodierverfahren 600 in Beziehung setzt. Ein
Software-Kodierer kann die Parameter des Kodierverfahrens einstellen,
um den Rechenaufwand, die Bitrate, die Bildqualität oder eine
Kombination dieser drei abhängig
von der Anwendung des Kodierers aufrechtzuerhalten.
-
Kurven 910 und 915 sind
Kurven konstanten Rechenaufwands. Kurve 910 ist der maximale
Rechenaufwand, der dann benötigt
wird, wenn die Schwelle tH bei null ist. Die Linie 915 zeigt
minimalen Rechenaufwand, der auftritt, wenn die Schwellenlänge tH hoch
ist. Eine gewünschte
Bitrate und PSNR können
durch angemessene Auswahl des Rechenaufwands erzielt werden, vorausgesetzt,
daß die
gewünschte
Bitrate und PSNR innerhalb des Bereichs der Oberflächenbegrenzung
durch die Kurven 910 und 915 liegen. Sobald einmal
die Kurve 910 maximalen Rechenaufwands erreicht ist, kann
PSNR abgesenkt werden, um die gewünschte Bitrate zu erreichen.
Der Rechenaufwand innerhalb des Bereichs, der von der Maximalkurve
und der Minimalkurve der Linien 910 bzw. 915 vorgegeben
ist, kann gewählt werden
und aufrechterhalten werden durch Einstellen der Bitrate und/oder
des PSNR. Die Kurven 920, 922, 924 und 926 zeigen,
wie der Rechenaufwand und/oder Bitrate sich für eine konstante Bildqualität (PSNR) ändern, und
die Kurven 930, 932, 934 und 936 zeigen,
wie der Rechenaufwand und/oder die Qualität sich für eine konstante Bitrate änderten.
Gemäß einem
Aspekt der Erfindung fügt
der Kodierrechenaufwand einen zusätzlichen Freiheitsgrad hinzu, der
einstellbar ist, um die Ziele der Begrenzungen eines Videokodierers
zu erreichen.