-
SACHGEBIET
DER ERFINDUNG
-
Die
Erfindung bezieht sich auf das Video-Kodieren und, insbesondere,
auf ein verbessertes Verfahren zum Durchführen einer Bewegungsschätzung in
Video-Kodieranwendungen.
-
HINTERGRUND
-
Voll-Bewegungs-Video-Anzeigen,
basierend auf analogen Video-Signalen, sind seit langer Zeit in der
Form des Fernsehens verfügbar
gewesen. Mit den neueren Fortschritten in Computer-Verarbeitungsfähigkeiten
und der Erschwinglichkeit davon sind Voll-Bewegungs-Video-Anzeigen,
basierend auf digitalen Video-Signalen, weit verbreitet verfügbar geworden.
Digitale Video-Systeme können
wesentliche Verbesserungen gegenüber
herkömmlichen, analogen
Video-Systemen beim Erzeugen, Modifizieren, Senden, Speichern und
Abspielen von Voll-Bewegungs-Video-Sequenzen liefern.
-
Digitale
Video-Anzeigen umfassen große Anzahlen
von Einzelbildern, die aufeinander folgend unter Frequenzen von
zwischen 30 und 75 Hz abgespielt und gestaltet werden. Jedes Einzelbild
ist ein Standbild, gebildet aus einem Feld von Pixeln, basierend
auf der Auflösung
der Anzeige eines bestimmten Systems. Als Beispiele haben auf VHS
basierende Systeme Auflösungen
von 320×480
Pixeln gezeigt, auf NTSC-basierende
Systeme haben Anzeige-Auflösungen
720×486
Pixeln gezeigt, und High-Definition-Television-(HDTV)-Systeme,
die sich noch in der Entwicklung befinden, haben Auflösungen von
1360×1024
Pixeln gezeigt.
-
Die
Mengen von digitalen Ausgangs-Informationen, umfasst in Video-Sequenzen,
sind umfangreich. Eine Speicherung und ein Senden dieser Mengen
von Video-Informationen
ist mit der herkömmlichen
Gerätschaft
eines Personal Computers nicht durchführbar. Es wird zum Beispiel
eine digitalisierte Form eines VHS-Bildformats mit relativ niedriger
Auflösung,
das eine Auflösung
von 320×480
Pixel besitzt, betrachtet. Ein Bewegungsbild mit voller Länge, mit
einer Dauer von zwei Stunden, bei dieser Auflösung entspricht digitalen Video-Informationen von
100 Gigabyte. Als Vergleich besitzen herkömmliche, optische Kompakt-Disks
Kapazitäten
von ungefähr
0,6 Gigabyte, magnetische Festplatten besitzen Kapazitäten von
1–2 Gigabyte,
und optische Kompakt-Disks,
die sich noch in der Entwicklung befinden, besitzen Kapazitäten von
bis zu 8 Gigabyte.
-
Um
sich den Beschränkungen
beim Speichern oder Übertragen
solcher umfangreicher Mengen von digitalen Video-Informationen zuzuwenden, sind
verschiedene Video-Kompressions-Standards oder -Prozesse eingerichtet
worden, einschließlich MPEG-1,
MPEG-2 und H.26X. Diese Video-Kompressionstechniken verwenden Ähnlichkeiten
zwischen aufeinander folgenden Bild-Frames, bezeichnet als temporäre oder
Interframe-Korrelation, um eine Interframe-Kompression zu erreichen,
bei der Bewegungsdaten und Fehlersignale verwendet werden, um Änderungen
zwischen Frames beziehungsweise Einzelbildern zu codieren.
-
Zusätzlich verwenden
die herkömmlichen
Video-Kompressionstechniken Ähnlichkeiten
innerhalb von Einzelbildern, bezeichnet als eine räumliche
oder Intraframe-Korrelation,
um eine Intraframe-Kompression zu erreichen, bei der die Bildabtastungen
innerhalb eines Bild-Frames komprimiert werden. Eine Intraframe-Kompression
basiert auf herkömmlichen Prozessen,
um stehende Bilder zu komprimieren, wie beispielsweise ein Kodieren
mittels diskreter Kosinustransformation (DCT). Dieser Typ eines
Kodierens wird manchmal als "Textur-" oder "Transformations-" Kodierung bezeichnet.
Eine "Textur" bezieht sich allgemein
auf ein zweidimensionales Feld von Bild-Abtast-Werten, wie beispielsweise
ein Feld aus Chrominanz- und Luminanz-Werten oder ein Feld aus Alpha-(Opazitäts)-Werten.
Der Ausdruck "Transformation" in diesem Zusammenhang
bezieht sich darauf, wie Bild-Abtastungen in räumliche Frequenz-Komponenten
während
des Kodier-Vorgangs transformiert werden. Diese Verwendung des Ausdrucks "Transformation" sollte von einer
geometrischen Transformation unterschieden werden, die dazu verwendet
wird, Szenenänderungen
in einigen Interframe-Kompressions-Verfahren abzuschätzen.
-
Eine
Interframe-Kompression verwendet typischerweise eine Bewegungs-Abschätzung und -Kompensation,
um Szenenänderungen
zwischen Frames beziehungsweise Einzelbildern zu kodieren. Eine
Bewegungs-Abschätzung
ist ein Vorgang zum Abschätzen
der Bewegung von Bildabtastungen (z. B. Pixeln) zwischen Einzelbildern.
Unter Verwendung einer Bewegungs-Abschätzung versucht der Kodierer
Blöcke
von Pixeln in einem Einzelbild an entsprechende Pixel in einem anderen
Einzelbild an zupassen. Nachdem der ähnlichste Block in einem gegebenen
Suchbereich gefunden ist, wird die Änderung in der Position der
Pixel-Stellen der entsprechenden Pixel approximiert und als Bewegungsdaten,
wie beispielsweise ein Bewegungsvektor dargestellt. Eine Bewegungskompensation
ist ein Vorgang zum Bestimmen eines vorhergesagten Bilds und zum
Berechnen des Fehlers zwischen dem vorhergesagten Bild und dem originalen
Bild. Unter Verwendung einer Bewegungskompensation wendet der Kodierer
die Bewegungsdaten auf ein Bild an und berechnet ein vorhergesagtes
Bild. Die Differenz zwischen dem vorhergesagten Bild und dem Eingabebild
wird als Fehlersignal bezeichnet. Da das Fehlersignal nur ein Feld
von Werten ist, die die Differenz zwischen Bildabtast-Werten darstellen,
kann es unter Verwendung desselben Textur-Kodierverfahrens komprimiert
werden, wie es für
ein Intraframe-Kodieren von Bildabtastungen verwendet wird.
-
Obwohl
sich die MPEG-1, MPEG-2 und H.26X Video-Kompensations-Standards
in spezifischen Ausführungen
unterscheiden, sind sie in einer Anzahl von Aspekten ähnlich.
Die nachfolgende Beschreibung des MPEG-2 Video-Kompressions-Standards
ist allgemein bei den anderen anwendbar.
-
MPEG-2
liefert eine Interframe-Kompression und eine Intraframe-Kompression,
basierend auf quadratischen Blöcken
oder Feldern von Pixeln in Videobildern. Ein Videobild wird in Bild-Abtast-Blöcke, bezeichnet
als Makro-Blöcke,
unterteilt, die Dimensionen von 16×16 Pixeln haben. In MPEG-2
weist ein Makro-Block vier Luminanz-Blöcke
(jeder Block umfasst 8×8
Abtastungen einer Luminanz (Y)) und zwei Chrominanz-Blöcke (ein
8×8 Abtastblock
jeweils für Cb
und Cr) auf.
-
In
MPEG-2 wird ein Interframe-Kodieren in Bezug auf Makro-Blöcke durchgeführt. Ein
MPEG-2 Kodierer führt
eine Bewegungs-Abschätzung
und -Kompensation durch, um Bewegungsvektoren und Block-Fehlersignale
zu berechnen. Für
jeden Block MN in einem Bildframe N wird
eine Suche über
das Bild eines nächsten,
darauf folgenden Video-Frame N + 1 oder eines unmittelbar vorhergehenden Bild-Frame
N – 1
(d. h. bidirektional) durchgeführt, um
die ähnlichsten,
jeweiligen Blöcke
MN–1 oder
MN+1 zu identifizieren. Die Lage des ähnlichsten
Blocks, relativ zu dem Block MN, wird mit
einem Bewegungsvektor (DX, DY) kodiert. Der Bewegungsvektor wird dann
dazu verwendet, einen Block von vorhergesagten Abtastwerten zu berechnen.
Diese vorhergesagten Abtastwerte werden mit einem Block MN verglichen, um das Block-Fehlersignal zu
bestim men. Das Fehlersignal wird unter Verwendung eines Textur-Kodierverfahrens,
wie beispielsweise eines Kodierens mittels diskreter Kosinustransformation
(DCT), komprimiert.
-
Auf
einem Objekt basierende Video-Kodiertechniken sind als eine Verbesserung
in Bezug auf die herkömmlichen,
auf einem Frame bzw. Einzelbild basierenden Kodier-Standards vorgeschlagen
worden. In einem auf einem Objekt basierenden Kodieren werden wahlweise
geformte Bild-Merkmale von den Einzelbildern in der Video-Sequenz
unter Verwendung eines Verfahrens, bezeichnet als "Segmentation", separiert. Die
Video-Objekte oder "Segmente" werden unabhängig kodiert.
Eine auf einem Objekt basierende Kodierung kann die Kompressionsrate
verbessern, da sie die Interframe-Korrelation zwischen Video-Objekten
in aufeinander folgenden Frames erhöht. Sie ist auch für eine Vielfalt
von Anwendungen vorteilhaft, die einen Zugriff zu Objekten in einer
Video-Sequenz und eine Spurung davon erfordern.
-
In
den auf einem Objekt basierenden Video-Kodier-Verfahren, vorgeschlagen
für den MPEG-4
Standard, werden die Form, die Bewegung und die Textur von Video-Objekten unabhängig kodiert.
Die Form eines Objekts wird durch eine binäre oder Alpha-Maske dargestellt,
die die Grenze des wahlweise geformten Objekts in einem Videoframe definiert.
Die Bewegung eines Objekts ist ähnlich
zu den Bewegungsdaten von MPEG-2, mit der Ausnahme, dass sie ein
wahlweise geformtes Bild des Objekts anwendet, das von einem rechteckigen
Frame bzw. Einzelbild segmentiert worden ist. Eine Bewegungs-Abschätzung und
Kompensation wird in Bezug auf Blöcke einer "Video-Objekt-Ebene", im Gegensatz zu dem gesamten Frame,
durchgeführt.
Die Video-Objekt-Ebene
ist der Name für
das geformte Bild eines Objekts in einem einzelnen Frame.
-
Die
Textur eines Video-Objekts sind die Bild-Abtast-Informationen in
einer Video-Objekt-Ebene,
die innerhalb der Form des Objekts fällt. Eine Textur-Kodierung
von Bild-Abtastungen
eines Objekts und von Fehlersignalen wird unter Verwendung ähnlicher
Textur-Kodierverfahren wie bei der auf einem Frame basierenden Kodierung
durchgeführt.
Zum Beispiel kann ein segmentiertes Bild in ein begrenzendes Rechteck
hinein, gebildet aus Makro-Blöcken, angepasst
werden. Das rechteckige Bild, gebildet durch das begrenzende Rechteck,
kann ähnlich
eines rechteckigen Bilds bzw. Frames komprimiert werden, mit der
Ausnahme, dass transparente Makro-Blöcke nicht kodiert werden müssen. Teilweise transparente
Blöcke
werden nach Auffüllen
der Bereiche des Blocks, die außerhalb
der Formgrenze des Objekts fallen, mit Abtast-Werten in einer Technik,
bezeichnet als "Padding", kodiert.
-
In
sowohl einem auf einem Einzelbild basierenden als auch in einem
auf einem Objekt basierenden Video-Kodieren ist der Vorgang einer
Bewegungs-Abschätzung
ein solcher, der der wichtigste Teil des Kodiersystems im Hinblick
auf sowohl die Geschwindigkeit des Kodiervorgangs ebenso wie im Hinblick
auf die Qualität
des Videos ist. Sowohl der H 263 als auch der MPEG-4 Kodier-Standard
führen eine
Bewegungs-Abschätzung in
Bezug auf Makro-Blöcke
durch. Das Ziel des Vorgangs einer Bewegungs-Abschätzung ist
dasjenige, den Makro-Block in einem Referenzbild zu finden, der
zu dem kleinsten Fehlersignal nach einer Bewegungskompensation führt. Durch
Minimieren des Fehlersignals versucht der Kodierer die Zahl von
Bits, die benötigt
werden, um den Makro-Block zu kodieren, zu minimieren. Allerdings
muss, zusätzlich
zu einem Kodieren des Fehlersignals, der Kodierer auch den Makro-Block-Header
und Bewegungsvektoren kodieren. Während ein Minimieren des Fehlersignals
die Zahl von Bits, die benötigt
werden, um das Fehlersignal zu kodieren, minimieren kann, führt dies
nicht notwendigerweise zu der effizientesten Kodierung des gesamten
Makro-Blocks.
-
Die
Europäische
Patentanmeldung Nr. 0 535 746 A2 beschreibt ein Verfahren zum Abschätzen von
Bewegungsvektoren für
Blöcke
von Pixeln in einem Einzelbild einer digitalisierten Bewegungs-Bild-Sequenz,
wobei eine Vektorsuche basierend auf mindestens einen Ausgangsvektor
herum, abgeleitet von einem früheren,
abgeschätzten
Vektor für
einen Pixel-Block, der ein Nachbar eines gegebenen Pixel-Blocks
ist, durchgeführt
wird. "Advances Motion
Estimation for Moving Picture Experts Group Encoders" IBM Technical Disclosure
Bulletin Vol. 39, No. 4 (April 1996) beschreibt eine Bewegungs-Abschätzung, durchgeführt unter
Auswählen
eines Bewegungsvektors mit dem kleinsten, modifizierten Fehler,
wobei der modifizierte Fehler die Norm der Differenz zwischen dem
momentanen und Referenzblöcken
plus einem Positionsfehler ist.
-
Es
ist die Aufgabe der vorliegenden Erfindung, ein verbessertes Blockanpassungsverfahren für eine Bewegungs-Abschätzung, ein
verbessertes Verfahren zum Durchführen einer Bewegungs-Abschätzung ebenso
wie eine verbesserte Bewegungs-Schätzeinrichtung
zum Durchführen
einer Blockanpassungssuche zu schaffen.
-
Diese
Aufgabe wird durch den Gegenstand der unabhängigen Ansprüche 1, 7
und 11 gelöst.
-
Bevorzugte
Ausführungsformen
sind Gegenstand der abhängigen
Ansprüche.
Weitere Vorteile und Merkmale werden aus der nachfolgenden, detaillierten
Beschreibung und den beigefügten
Zeichnungen ersichtlich werden.
-
KURZE BESCHREIBUNG DER
ZEICHNUNGEN
-
1 zeigt
ein Blockdiagramm eines Video Kodierers
-
2 zeigt
ein Blockdiagramm eines Video-Dekodierers
-
3 zeigt
ein Diagramm, das ein Beispiel eines Quellen- und Soll-Einzelbilds
darstellt, um einen Bewegungs-Abschätzungs-Vorgang, verwendet für ein Video-Kodieren, darzustellen.
-
4 zeigt
ein Diagramm, dass ein Beispiel von Makro-Blöcken und den Bewegungsvektoren, zugeordnet
zu diesen Blöcken
in einem Video-Einzelbild, darstellt, um zu zeigen, wie ein Bewegungsvektor
für einen
Makro-Block voherzusagen ist.
-
5 zeigt
ein Diagramm eines erweiterten Suchbereichs in einem Ziel-Einzelbild, wie beispielsweise
das eine, das in 3 darstellt ist, um ein Spiralsuchmuster,
verwendet in eine Blockanpassung darzustellen.
-
6 zeigt
ein Diagramm, das ein Spiralsuchmuster, ausgehend von einer Startstelle,
die gegenüber
einer optimaleren Startstelle aus verschoben ist, darstellt.
-
7 zeigt
ein Flussdiagramm, das die Betriebsweise einer Ausführung eines
Kodierers darstellt, der eine kombinierte Messung eines Bewegungsvektors
und von Fehlersignaldaten als die Suchkriterien in dem Blockanpassungsprozess
verwendet.
-
8 zeigt
ein Diagramm einer Bewegungs-Schätzeinrichtung,
die eine modifizierte Summe einer Differenzberechnung als die Suchkriterien in
diesem Blockanpassungsprozess verwendet.
-
9 zeigt
ein Blockdiagramm eines Computersystems, das als eine Betriebsumgebung
für eine
Software-Umsetzung der Erfindung dient.
-
Einführung
-
Der
erste Abschnitt nachfolgend ist eine Beschreibung eines Video-Kodierers
und -Dekodierers. Darauf folgende Abschnitte beschreiben eine Ausführung der
Erfindung in einem Kodierer. Die Kodierer-Ausführung ist spezifisch für Kodierblöcke aus
Pixeln ausgelegt (z. B. Makro-Blöcke,
wie sie in Video-Kodier-Standards MPEG-4 und H263 definiert sind).
Jeder der Makro-Blöcke
für vorhergesagte
Einzelbilder umfasst Header-Parameter,
einen Bewegungsvektor und ein in Bezug auf die Textur kodiertes Fehlersi gnal.
Die Kodierer-Ausführung
verbessert eine Kodiereffektivität
unter Verwendung einer Messung der kombinierten Bewegungs- und Fehlerdaten, wenn
nach einem passenden Block in einem Blockanpassungsvorgang gesucht
wird. Da diese Maßnahme
ein vollständigeres
Bild des Kodier-Overhead, zugeordnet einem Auswählen eines bestimmten Bewegungsvektors,
berücksichtigt,
verbessert sie die Kodiereffektivität. Die Kodiererausführung ist auch
schneller, da sie ein verbessertes Suchmuster verwendet und die
Suche, benötigt
dazu, den Bewegungsvektor zu finden, verringert.
-
Die
Erfindung, ebenso wie die spezifische Kodierer-Ausführung, die
nachfolgend beschrieben ist, wenden sowohl eine auf einem Einzelbild
basierende als auch eine auf einem Objekt basierende Video-Kodierung
an. Da ein auf einem Objekt basierender Kodierer und ein Dekodierer
alle Merkmale eines auf einem Einzelbild basierenden Kodierer und
Dekodierer umfassen, bildet die nachfolgende Diskussion eine gute
Grundlage zum Ausführen
der Erfindung in entweder einer auf einem Einzelbild basierenden oder
einer auf einem Objekt basierenden Kodieranwendung.
-
Beschreibung eines beispielhaften
Kodierers und Dekodierers
-
1 zeigt
ein Blockdiagramm, das eine Ausführung
eines auf einem Objekt basierenden Video-Kodierers darstellt. Der
Eingang 30 zu dem Kodierer umfasst Bilder, die die Video-Objekte
in jedem Einzelbild, die Form jedes Video-Objekts und die begrenzenden
Rechtecke darstellen. Die Form-Informationen sind verfügbar, bevor
der Kodierer Textur- oder Bewegungsdaten kodiert. Eine auf einem
Einzelbild basierende Kodierung unterscheidet sich dahingehend,
dass das gesamte Einzelbild ohne Form-Informationen kodiert ist, und der Eingang 30 besteht
aus einer Reihe von Einzelbildern.
-
Das
Form-Kodier-Modul 32 liest die Definition eines Objekts,
umfassend sein begrenzendes Rechteck, und erweitert das begrenzende
Rechteck zu einem ganzzahligen Vielfachen von Makro-Blöcken. Die
Form-Informationen für
ein Objekt weisen eine Maske oder eine "Alpha-Ebene" auf. Das Form-Kodier-Modul 32 liest
diese Maske und komprimiert sie, unter Verwendung von, zum Beispiel,
eines herkömmlichen
Kettenkodier-Verfahrens,
um die Kontur des Objekts zu kodieren.
-
Ein
Bewegungs-Abschätzungs-Modul 34 liest
ein Objekt, einschließlich
seines begrenzenden Rechtecks und eines zuvor rekonstruierten Bilds 36, und
berechnet Bewegungs-Schätzdaten,
verwendet dazu, die Bewegung eines Objekts von einem Einzelbild
zu einem anderen vorherzusagen. Das Bewegungs-Schätz-Modul 34 sucht
nach dem ähnlichsten Makro-Block
in dem rekonstruierten Bild für
jeden Makro-Block in dem momentanen Bild, um einen Bewegungsvektor
für jeden
Makro-Block zu berechnen. Das spezifische Format des Bewegungsvektors
von dem Bewegungs-Schätz-Modul 34 kann,
in Abhängigkeit
von dem Bewegungs-Schätz-Verfahren,
das verwendet ist, variieren. In der Ausführung, die nachfolgend beschrieben
ist; ist ein Bewegungsvektor für jeden
Makro-Block vorhanden, der mit derzeitigen MPEG und H26X Formaten
konsistent ist.
-
Das
Bewegungs-Kompensations-Modul 38 liest die Bewegungsvektoren,
berechnet durch das Bewegungs-Abschätzungs-Modul und das zuvor
rekonstruierte Bild 36, und berechnet ein vorhergesagtes
Bild für
das momentane Einzelbild. Jedes Pixel in dem vorhergesagten Bild
wird unter Verwendung des Bewegungsvektors für den Makro-Block konstruiert, den er einbezieht,
um das entsprechende Pixel in dem zuvor rekonstruierten Bild 36 zu
finden. Der Kodierer findet dann den Unterschied zwischen den Bild-Abtastwerten
in dem Eingangsbildblock, wie dies in dem Eingang 30 spezifiziert
ist, und den entsprechenden Abtastwerten in dem Block des vorhergesagten
Bilds, wie dies in dem Bewegungs-Kompensations-Modul 38 berechnet
ist, um das Fehlersignal für
den Makro-Block zu bestimmen.
-
Ein
Textur-Kodier-Modul 40 komprimiert dieses Fehlersignal
für interframekodierte
Objekte und komprimiert Bild-Abtastwerte für das Objekt von der Eingangsdatenfolge 30 für intraframe-kodierte
Objekte. Der Rückführpfad 42 von
dem Textur-Kodier-Modul 40 stellt
das Fehlersignal dar. Der Kodierer verwendet die Fehlersignalblöcke zusammen
mit den Blöcken
für das
vorhergesagte Bild von dem Bewegungs-Kompensations-Modul, um das
zuvor rekonstruierte Bild 36 zu berechnen.
-
Das
Textur-Kodier-Modul 40 kodiert Intraframe- und Fehlersignaldaten
für ein
Objekt unter Verwendung irgendeiner Vielfalt von Standbild-Kompressions-Techniken.
Beispielhafte Kompressionstechniken umfassen DCT, Wavelet, ebenso
wie andere herkömmliche
Bild-Kompressions-Verfahren.
-
Die
Bit-Folge der komprimierten Video-Sequenz umfasst kodierte Informationen
Für die
Form, Bewegung und Textur von den Formkodier-, Bewegungs-Abschätzungs- und Textur-Kodier-Modulen. Ein
Multiplexer 44 kombiniert und formatiert diese Daten in
die geeignete Syntax und gibt sie zu dem Puffer 46 aus.
-
Während der
Kodierer in einer Hardware oder Software ausgeführt werden kann, wird er am wahrscheinlichsten
in einer Software ausgeführt.
In einer Software-Ausführung stellen
die Module in dem Kodierer Software-Anweisungen, gespeichert in
einem Speicher eines Computers und ausgeführt in dem Prozessor, und die
Video-Daten, gespeichert
in einem Speicher, dar. Ein Software Kodierer kann auf einer Vielfalt
von herkömmlichen,
mittels Computer lesbaren Medien gespeichert und verteilt werden.
Bei Hardware-Ausführungen
sind die Kodierer-Module in einer digitalen Logik, vorzugsweise
in einer integrierten Schaltung, ausgeführt. Einige der Kodierer-Funktionen
können
in digitalen, logischen Vorrichtungen für spezielle Zwecke in einer
Computer-Umgebung optimiert
werden, um die Verarbeitungsbelastung von einem Host-Computer wegzunehmen.
-
2 zeigt
ein Blockdiagramm, das einen Dekodierer für ein auf einem Objekt basierenden
Video-Kodier-Verfahren darstellt. Ein Demultiplexer 60 nimmt
eine Bit-Datenfolge,
die eine komprimierte Video-Sequenz darstellt, auf und separiert
Formen und in Bezug auf Bewegung und Textur kodierte Daten auf einer
Basis Objekt für
Objekt. Der Demultiplexer umfasst auch einen Bewegungsvektor-Dekodierer, der
den Bewegungsvektor für
jeden Makro-Block von einem Einzelcode variabler Länge rekonstruiert.
-
Ein
Formdekodier-Modul 64 dekodiert die Form oder die Kontur
für das
momentane Objekt, das verarbeitet werden soll. Um dies vorzunehmen,
setzt es einen Formdekodierer ein, der das inverse des Formdekodier-Verfahrens,
verwendet in dem Kodierer der 1, umsetzt.
Die sich ergebenden Formdaten sind eine Maske, wie beispielsweise
eine binäre Alpha-Ebene
oder eine Grauskalierungs-Alpha-Ebene, die die Form des Objekts
darstellt.
-
Das
Bewegungsdekodier-Modul 66 dekodiert die Bewegungsinformationen
in der Bit-Datenfolge. Die dekodierten Bewegungsinformationen umfassen
die Bewegungsvektoren für
jeden Makro-Block, die für
Entropy-Code in der ankommenden Bit-Datenfolge rekonstruiert sind. Das Bewegungsdekodier-Modul 66 führt diese
Bewegungsinformationen zu dem Bewegungs-Kompensations-Modul 68 zu
und das Bewegungs-Kompensations-Modul 68 verwendet die
Bewegungsvektoren, um Abtastungen eines vorhergesagten Bilds in
den zuvor rekonstruierten Objektdaten 70 zu finden.
-
Das
Textur-Dekodier-Modul 74 dekodiert Fehlersignale für interframe-kodierte
Textur-Daten und ein Feld von Farbwerten für Intraframe-Textur-Daten und
führt diese
Informationen zu einem Modul 72 zum Berechnen und akkumulieren
des rekonstruierten Bilds weiter. Für intraframe-kodierte Objekte
dekodiert das Textur-Dekodier-Modul 74 die Bildabtastwerte
für das
Objekt und platziert das rekonstruierte Objekt in das Modul 72 für das rekonstruierte
Objekt. Zuvor rekonstruierte Objekte werden temporär in dem
Objektspeicher 70 gespeichert und werden dazu verwendet,
das Objekt für
andere Frames zu konstruieren.
-
Ähnlich zu
dem Kodierer kann der Dekodierer in einer Hardware, einer Software
oder in einer Kombination von beiden umgesetzt werden. In Software-Ausführungen
sind die Module in dem Dekodierer Software-Instruktionen, gespeichert
in einem Speicher eines Computers und ausgeführt durch den Prozessor, und
Video-Daten, gespeichert in einem Speicher. Ein Software-Dekodierer
kann auf einer Vielzahl von herkömmlichen,
mittels Computer lesbaren Medien gespeichert und darauf verteilt
sein. In Hardware-Ausführungen
werden die Dekodierer-Module in einer digitalen Logik, vorzugsweise
in einer integrierten Schaltung, ausgeführt. Einige der Dekodierer-Funktionen
können
in digitalen logischen Vorrichtungen für spezielle Zwecke in der Umgebung
eines Computers optimiert werden, um die Verarbeitungsbelastung
von dem Host-Computer wegzunehmen.
-
Verbesserte
Bewegungs-Abschätzung
und Block-Anpassungs-Muster
-
Bevor
die Ausführung
des Kodierers im Detail beschrieben wird, ist es hilfreich, mit
einem Beispiel des Bewegungs-Schätzvorgangs
zu beginnen. 3 zeigt ein Beispiel eines Quellen-
und Ziel-Einzelbilds 300, 302 in einer einfachen
Video-Sequenz. Jedes Einzelbild umfasst ein Vordergrundobjekt (sich bewegender
Kopf 304) und Hintergrundobjekte 306 (z. B. ein
stehendes Haus und ein Baum in dem Hintergrund). Der Vorgang einer
Bewegungs-Abschätzung
approximiert die Bewegung von Pixeln in dem Quellen-Einzelbild relativ
zu dem Ziel-Einzelbild. Um dies vorzunehmen, wählt die Bewegungs-Schätzeinrichtung
in dem Kodierer einen Quellenblock von Pixeln 308 in einem
Quellen-Einzelbild und einen Suchbereich 310 in einem Ziel-Einzelbild
aus. Unter Folgen einem Suchpfad in dem Ziel-Bild passt die Bewegungs-Schätzeinrichtung
die Pixel-Werte in dem Quellenblock an Pixel-Werte an entsprechenden Stellen
eines Bereichs in dem Suchbereich 310 an. An jeder Stufe
entlang des Suchpfads berechnet die Bewegungs-Schätzeinrichtung
ein Fehlersignal, was eine Messung der Differenz zwischen den Pixel-Werten
in dem Quellenblock und den Pixel-Werten an entsprechenden Stellen
in dem Suchbereich ist. Dieses Fehlersignal wird typischerweise
als die Summe von absoluten Differenzen (SAD) berechnet, kann allerdings
auch als die Summe von quadratischen Differenzen berechnet werden.
Dieser Vorgang wird oftmals als Blockanpassung bezeichnet, da die
Suche nach einem Block von Pixeln sieht, der am nächsten den
Quellenblock anpasst.
-
Nach
Identifizieren von Anpassungsblöcken approximiert
die Bewegungs-Schätzeinrichtung
die Bewegung von Pixeln in dem Quellen-Einzelbild mit Bewegungsparametern,
die die Bewegung zwischen jedem Quellen Pixel und einer entsprechenden
Pixelstelle in dem Ziel-Einzelbild definieren. Die Bewegungs-Parameter
können
für jedes
Pixel oder für
jeden Block von Pixeln kodiert sein. In einigen Fällen sind
die Bewegungs-Parameter
die Koeffizienten einer geometrischen Transformation (z. B. eine
affine oder perspektivische Transformation), die die Bewegung eines
Pixels oder Blocks von Pixeln für
die Quelle des Ziel-Einzelbilds beschreibt. Diese Koeffizienten
können
als eine Reihe von Bewegungsvektoren kodiert sein, die die Bewegung
von Grenzpunkten für
einen Block von Pixeln beschreiben. Der Dekodierer leitet dann die
Bewegungs-Koeffizienten von den Referenzpunkten ab. Eine alternative
Maßnahme
ist diejenige, einen einzelnen Bewegungsvektor pro Block aus Pixeln
in dem Quellen-Einzelbild auszuwählen,
das die Translationsbewegung aller Pixel in dem Quellenblock beschreibt.
-
Sowohl
der Kodierer als auch der Dekodierer verwenden die Bewegungs-Parameter in derselben Art
und Weise, um vorhergesagte Pixel für jedes Pixel in dem Quellen-Bild
zu berechnen. Da die vorbeschriebenen Pixel nicht perfekt die Quellen-Pixel anpassen, berechnet
die Bewegungs-Kompensations-Komponente des Kodierers ein Fehlersignal
als die Differenz zwischen den vorhergesagten Pixeln und den entsprechenden
Quellen-Pixeln. Im Gegensatz dazu, den tatsächlichen Pixel-Wert für jedes
Pixel in den Quellen-Einzelbildern zu kodieren, kodiert der Kodierer
die Bewegungs-Parameter,
die Pixel in dem Ziel-Einzelbild, und ein Fehlersignal, wie es in der
Bewegungs-Kompensations-Komponente berechnet ist.
-
Die
Kodiererausführung
verbessert die Kodier-Effektivität
und die Qualität
der inter-kodierten Videobilder unter Verwendung von modifizierten
Kriterien zum Ausbilden eines passenden Blocks von Pixeln in dem
Zielbereich. Diese modifizierten Kriterien sind eine kombinierte
Messung der Bewegungs- und Fehlersignaldaten für Interframe-Blöcke. Die
Kodierer-Ausführungsform
verwendet dieselbe Blockgröße und dasselbe
Blockformat wie die MPEG-4 und H263 Kodier-Standards, so dass diese
Blöcke als
Makro-Blöcke
bezeichnet werden.
-
Unter
einem hohen Niveau beziehungsweise Pegel können die kombinierte Messung
der Bewegung und des Fehlersignals ausgedrückt werden als:
COMBINED_MEASURE
= A·Bits(Bewegungsvektor) +
SD;
wobei A ein Parameter zum Einstellen der Messung der Bits,
benötigt
dazu, den Bewegungsvektor (Bits) zu kodieren, ist, und SD eine Summe
der Differenzen ist. In der Kodierer-Ausführungsform ist SD die Summe
von absoluten Differenzen. Der Parameter A wendet sich zwei Punkten
zu. Erstens umfasst er eine Gewichtungskomponente, die von dem Quantisierungsschritt
abhängig
ist, verwendet für
das Bild, das kodiert werden soll. Da der Bewegungsvektor und das
Fehlersignal in unterschiedlichen Einheiten ausgedrückt werden,
nimmt diese Gewichtungskomponente eine Einstellung der Differenz
in Einheiten als eine Funktion des Quantisierungsschritts vor. Als Zweites
umfasst der Parameter A eine Konstante, die berechnet wird, um die
Zahl von Bits für
das Video-Clip,
das kodiert werden soll, zu verringern. Die Konstante wird durch
Experimentieren mit dem Video-Clip ausgewählt, um einen Wert für die Konstante
zu finden, die die Bits, benötigt
dazu, Interframe-Makro-Blöcke
zu kodieren, minimiert.
-
Mit
den Ausführungsdetails,
die vorstehend angegeben sind, können
die kombinierte Messung der Bewegung und die Fehlersignaldaten als
eine modifizierte Summe von absoluten Differenzen ausgedrückt werden.
Modifizierte
SAD = K·Qs·Bits(Bewegungsvektor)
+ SAD,
wobei K die Konstante ist, optimiert so, um die Interframe-Bits
für den
Video-Clip zu verringern, Qs ein Parameter pro Frame ist, der den
Quantisierungsschritt einstellt, „Bits" eine Messung der Anzahl von Bits ist,
benötigt
dazu, den Bewegungsvektor für
den Block aus Pixeln in dem Quellen-Bild-Einzelbild, das kodiert
werden soll, zu kodieren, und SAD eine Summe von absoluten Differenzen
zwischen Bit-Abtastungen des Quellenblocks und Bild-Abtastwerten
an entsprechenden Stellen in einem Ziel-Block ist. Der Bewegungsvektor
definiert die Stelle des Ziel-Blocks relativ zu dem Quellenblock.
-
Experimente
zeigen, dass der vorstehende Ausdruck für die modifizierten SAD das
Kodier-Overhead für
Interframe-Makro-Blöcke
relativ zu einer Blockanpassung, ba sierend nur auf SAD, verringert. Insbesondere
erreicht die modifizierte SAD eine bessere Funktionsweise für Video-Szenen
mit geringer Bewegung (d. h., wo SAD dazu tendiert, relativ klein zu
werden).
-
Die
neuen Kriterien zum Durchführen
einer Block-Anpassung werden dazu verwendet; einen passenden Block
in dem Zielbereich zu suchen: Die Suche beginnt an einer Startstelle
in dem Suchbereich des Ziel-Einzelbilds und schreitet dann entlang eines
Suchpfads fort. An jedem Schritt entlang des Suchpfands evaluiert
das Bewegungs-Abschätzungs-Modul
die kombinierte Messung von Bewegungs- und Fehlersignaldaten. Zur
Vereinfachung wird diese Menge als die kombinierten Suchkriterien (Combined
Search Criteria – CSC)
bezeichnet. Die Aufgabe der Suche ist diejenige, den Wert von CSC für Ziel-Blöcke von
Pixeln, angeordnet in dem Suchbereich, zu minimieren.
-
Bevor
die Suche beginnt, wählt
der Kodierer eine Such-Start-Stelle aus. Vorzugsweise wird die Starstelle,
basierend auf dem Bewegungsvektor, berechnet für benachbarte Blöcke, ausgewählt. Da
die Bewegung von benachbarten Blöcken
dazu tendiert, ähnlich
zu dem Block zu sein, der von Interesse ist, ist es wahrscheinlich,
dass ein Startpunkt, basierend auf den benachbarten Bewegungsvektoren,
die nächste
Suche nahe dem passenden Block in dem Suchbereich beginnt. 4 zeigt
ein Diagramm, das den momentanen Makro-Block 400, umgeben
durch benachbarte Makro-Blöcke 404–410,
und deren Bewegungsvektoren 414–420 darstellt. Das
Bewegungs-Abschätzungs-Modul berechnet eine
Startstelle durch Berechnen eines Prädiktors für den momentanen Block. Der
Prädiktor
wird als der Median der X und Y Bewegungsvektor-Komponenten des
linken Blocks 410, des oberen Blocks 406 und des
oberen rechten Blocks 408 berechnet. Der Median der X-Komponenten
dieser Kandidaten-Blöcke
ist der Prädiktor
für die
X-Komponente, und der Median der Y-Komponente dieser Blöcke ist
der Prädiktor
für die Y-Komponente.
-
Nach
Berechnen der Startstelle schreitet das Bewegungs-Schätz-Modul
entlang eines Suchpfads fort und evaluiert die CSC für Ziel-Blöcke, angeordnet unter
Schritten entlang des Pfads. Insbesondere verwendet die Kodierer-Ausführungsform
einen spiralförmigen
Suchpfad, wo sich jeder Suchschritt weiter von der Startstelle bewegt. 5 stellt
ein Beispiel eines spiralförmigen
Suchpfads in einer erweiterten Version des Suchbereichs 500,
dargestellt in 3, dar. Der erste Ziel-Block 502 ist
ungefähr
an der Startstelle zentriert, die durch den Prädiktor-Bewegungsvektor 504 definiert
ist. Die Punkte (z. B. 506, 508) sind Beispiele
der Schritte entlang des spiralförmigen
Suchpfads.
-
6 stellt
ein weiteres, detailliertes Beispiel der Schritte in dem spiralförmigen Suchpfad
in der Kodierer-Ausführungsform
dar. Jede Zahl entspricht einem Schritt in dem Suchpfad. Der Startpunkt
des Suchpfads ist; in den meisten Fällen; die Stelle, die durch
den Bewegungsvektor-Prädiktor
vorhergesagt ist.
-
Vorzugsweise
sollten die Schritte in der spiralförmigen Suche in zunehmenden
Abständen
von der Startstelle aus geordnet sein. Wie weiter nachfolgend erläutert ist,
kann diese Ordnung die Suche optimieren, indem dem Block-Anpassungs-Prozess
ermöglicht
wird, einen passenden Block zu identifizieren, ohne eine vollständige Suche
in dem Suchbereich vorzunehmen. Die Kodierer-Ausführungsform ist
so ausgelegt, dass sie mit dem MPEG-4 Kodier-Standard kompatibel
ist. Aufgrund der Einschränkungen,
die der Größe der Bewegungsvektoren
in MPEG-4 auferlegt sind, kann der Bewegungsvektor-Prädiktor nicht
immer einen guten Startpunkt für
die spiralförmige
Suche darstellen. Um dieses Problem darzustellen, wird das Beispiel,
dargestellt in 6, betrachtet, wo der unterbrochene
Bewegungsvektor 600 die erwünschte Startstelle für eine Suche
darstellt und der durchgezogene Bewegungsvektor 602 der
Bewegungsvektor ist, der sich aufgrund der Begrenzung der Bewegungsvektorgröße in dem
MPEG-4-Standard ergibt. Im Gegensatz zu einem Starten der Suche
an dem Punkt, angezeigt durch den Bewegungsvektor-Prädiktor 600,
wird die Suche dazu gebracht, an dem Punkt zu starten, der durch
den begrenzten Bewegungsvektor 602 angegeben ist.
-
Eine
Art und Weise, um diese Einschränkung zu überwinden,
ist diejenige, die Suchreihenfolge von Stellen in dem Zielbereich
durch eine Stelle von dem erwünschten
Startpunkt aus (z. B. der Punkt des Bewegungsvektor-Prädiktors)
zu sortieren. Diese Maßnahme
erhöht
allerdings das Verarbeitungs-Overhead für eine Bewegungs-Abschätzung.
-
Eine
andere Maßnahme,
verwendet in der Kodierer-Ausführungsform,
ist diejenige, die Suchreihenfolge so zu mischen und zu sortieren,
dass die Blöcke,
die dahingehend wahrscheinlich sind, dass sie die nächste Anpassung
sind, zuerst gesucht werden. Insbesondere mischt der Kodierer die
Suchreihenfolge so, dass die Ziel-Blöcke, die näher zu dem Prädiktor-Punkt
liegen, zuerst gesucht werden.
-
Diese
Maßnahme
kann besser unter Betrachtung des Beispiels, dargestellt in 6,
gesehen werden. Die ursprüngliche
Suchreihenfolge für den
Blockanpassungs-Vorgang
ist {1, 2, 3, ...48}.
-
Die
gemischte Suchreihenfolge ist {15, 16, 17, 18, ...48, 14, 13, 12,
...,1}.
-
Diese
Ausführungsform
berechnet die verschobene Suchreihenfolge in zwei Stufen beziehungsweise
Schritten: Zuerst berechnet sie den Abstand zwischen der gewünschten
Spiralsuchmitte (d. h. dem erwünschten
Startpunkt) und dem vorhergesagten Punkt, der an einer unterschiedlichen
Stelle gegenüber
dem erwünschten
Startpunkt aufgrund der Beschränkungen
in Bezug auf die Bewegungsvektorgröße liegt. Als Nächstes sucht
sie einen neuen, vorberechneten Startpunkt für diesen Abstand. Dieser Durchsichtsvorgang
führt zu
einem neuen Startindex in der Suchreihenfolge (z. B. 15 in dem vorstehenden
Beispiel).
-
Diese
Einstellung der Suchreihenfolge ist ein spezieller Fall, wo der
erwünschte
Startpunkt der spiralförmigen
Suche unterschiedlich zu dem vorhergesagten Punkt ist. Der erwünschte Startpunkt
wird durch Auffinden des Medians der X- und Y-Komponenten der benachbarten Bewegungsvektoren
berechnet, wie dies vorstehend erläutert ist, ohne irgendeine
Einschränkung
in Bezug auf die Bewegungsvektorgröße. Der vorhergesagte Punkt
wird in derselben Art und Weise berechnet, mit der Ausnahme, dass
er durch die Kodier-Standard-Begrenzung begrenzt ist, die die Größe des Bewegungsvektors begrenzt.
Als eine Folge sind der erwünschte
Suchstartpunkt und der vorhergesagte Punkt dann unterschiedlich,
wenn die Begrenzung in Bezug auf die Bewegungsvektorgröße eine
Verringerung in der Größe eines
Bewegungsvektors verursacht, verwendet dazu, den vorhergesagten
Punkt zu berechnen.
-
In
der Ausführungsform
werden die vorberechneten Startpunkte in einer Tabelle gespeichert, die,
unter Vorgabe des Abstands, berechnet in dem ersten Schritt, einen
Startindex für
den ersten Block in der verschobenen Suchreihenfolge liefert. In
dem Beispiel, das vorstehend dargestellt ist, ist der Startindex
eine Zahl, ausgewählt
von 1 bis 48, wobei jeder Index einem Suchpunkt in einer spiralförmigen Suchreihenfolge
entspricht.
-
Die
Definition der Tabelle in der Ausführung kann ausgedrückt werden
als:
Neuer Start-Index = F(d);
wobei d der Abstand ist,
der in Schritt 1 berechnet ist.
-
Unter
Vorgabe eines Abstands d führt
die Funktion F(d) einen Index y zurück, so dass für jeden Index
i, wo i > y gilt,
der Abstand zwischen der spiralförmigen
Suchmitte P0 und den Koordinaten Pi der Suchstelle für den Index i immer größer als
oder gleich zu (d – 1)
ist; und für
jeden Index i, wo i < y
gilt, ist der Abstand zwischen Pi und P0 immer kleiner als oder gleich zu (d – 1).
-
Auf
andere Art und Weise ausgedrückt,
ist die Tabelle definiert als:
F(d) = y; für i > y, Abstand (P0,
Pi ≥ (d – 1); und
für i < y, Abstand (P0, Pi) < (d – 1).
-
Diese
neue Suchreihenfolge wird die Punkte suchen, die am nächsten zu
dem erwünschten
Startpunkt, früher
als die ursprüngliche
Reihenfolge, liegt. Diese alternative Maßnahme vermeidet den zusätzlichen
Verarbeitungs-Overhead eines Sortierens der Suchreihenfolge mit
einem Abstand von dem erwünschten
Startpunkt aus, wenn dieser Punkt gegenüber dem vorhergesagten Punkt
unterschiedlich ist.
-
Die
Kodierer-Ausführungsform
verwendet die kombinierten Suchkriterien (z. B. die modifizierten SAD)
in Verbindung mit einer spiralförmigen
Suche, um die Geschwindigkeit des Bewegungs-Abschätzungs-Vorgangs
zu erhöhen.
Ein Attribut der CSC ist dasjenige, dass sie ermöglicht, dass der Blockanpassungsvorgang
die Suche ohne Erreichen des Endes des Suchpfads beendet. Dieses
Attribut resultiert aus den folgenden Merkmalen des Suchvorgangs:
- 1) die CSC setzen die Größe des Bewegungsvektors ein;
und
- 2) der spiralförmige
Suchpfad erhöht
die Größe des Bewegungsvektors
mit jedem Schritt.
-
Um
dieses Merkmal darzustellen, wird der folgende Ausdruck für die CSC
betrachtet:
COMBINED_MEASURE = A·Bits(Bewegungsvektor) + SD
-
Da
sich die Zahl von Schritten immer von der spiralförmigen Mitte
aus erhöht,
erhöht
sich auch die Zahl von Bits, verwendet dazu, den Bewegungsvektor
zu kodieren.
-
Der
minimale Wert für
die CSC an jedem Schritt ist:
CSCmin = A·Bits(Bewegungsvektor).
-
Dies
ergibt sich dort, wo der Wert von SD Null ist. Aufgrund der Tatsache,
dass sich die Bits, benötigt
dazu, den Bewegungsvektor zu kodieren, mit jedem Schritt in dem spiralförmigen Suchpfad
erhöhen,
erhöht
sich auch der minimale Wert für
CSC an jedem Schritt:
CSCmin(i + 1) ≥ CSC(i), wobei i der Schritt
in dem spiralförmigen
Suchpfad ist.
-
Im
Hinblick auf die Attribute der spiralförmigen Suche, die vorstehend
angegeben ist, kann der Blockanpassungs-Vorang die Suche an dem
Punkt beenden, wo das momentane CSCmin größer als oder gleich zu dem
minimalen CSC ist, gefunden bis zu diesem Punkt (CSCgespeichert).
Insbesondere ergibt sich, falls das CSCmin für einen Punkt s existiert,
so dass gilt:
CSCmin(s) ≥ CSCgespeichert,
dann
für alle
i größer als
s in dem Suchpfad:
CSC(i) ≥ CSCmin(s) ≥ CSCgespeichert
für alle
i > s.
-
Die
variable „CSCgespeichert" ist der minimale
Wert für
CSC für
irgendeinen der Suchpunkte, der bis hier in dem spiralförmigen Suchpfad
besucht ist. Um von diesem Merkmal vorteilhaft Gebrauch zu machen,
protokolliert die Kodierer-Ausführungsform den
minimalen Wert für
CSC, der bis hier gefunden ist, und vergleicht ihn mit CSCmin für den momentanen
Schritt. Falls CSCmin für
den momentanen Suchpunkt größer als
oder gleich zu CSCgespeichert ist, dann beendet sie die Suche und
verwendet den Suchpunkt, der zu dem minimalen CSC-Wert resultierte.
-
7 zeigt
ein Flussdiagramm, das die Betriebsweise der Kodierer-Ausführungsform
darstellt. Dieses Diagramm setzt die Merkmale ein, die vorstehend
zum Verbessern der Kodiereffektivität und der Kodiergeschwindigkeit
beschrieben sind. Wie in 7 dargestellt ist, beginnt der
Kodierer durch Berechnen des Such-Start-Punkts (Schritt 700). In diesem
Schritt berechnet der Kodierer den Bewegungsvektor-Prädiktor von
den Bewegungsvektoren von benachbarten Blöcken, wie dies vorstehend erläutert ist.
Falls der vorhergesagte Bewegungsvektor aufgrund der Begrenzungen
in Bezug auf die Bewegungsvektorgröße in dem MPEG-4 Kodier-Standard begrenzt
ist (Entscheidungsschritt 702), dann verschiebt der Kodierer
die Suchreihenfolge. Genauer gesagt, verschiebt der Kodierer die
Suchreihenfolge so, dass die Ziel-Blöcke, die näher zu dem tatsächlichen,
vorhergesagten Punkt liegen, eher evaluiert werden (Schritt 704)
als Blöcke,
die nahe der Stelle des vorhergesagten Punkts angeordnet sind, der sich
aus der Beschränkung
in Bezug auf die Bewegungsvektorgröße ergibt.
-
Als
Nächstes
beginnt der Kodierer den Blockanpassungsvorgang, der Suchreihenfolge
folgend, die im Schritt 704 bestimmt ist. Für jeden
Ziel-Block entlang des Suchpfads berechnet der Kodierer die Summe
von absoluten Differenzen (SAD) zwischen den Abtastwerten in dem
Quellenblock und dem Ziel-Block (Schritt 706). Er berechnet
dann eine Messung der kombinierten Bewegungsvektor- und Fehlersignaldaten,
bezeichnet als die modifizierten SAD (Schritt 708). In
dieser Ausführungsform
wird diese Menge als die modifizierten SAD bezeichnet und ist eine
Kombination von minimalen, modifizierten SAD und den SAD für den momentanen
Block, wobei die minimalen, modifizierten SAD für einen Block berechnet werden
als:
modifizierte SADmin = K·Qs·Bits(Bewegungsvektor), so
dass
modifizierte SAD = modifizierte SADmin + SAD.
-
Die
Berechnung der modifizierten SAD ist in weiterem Detail in 8 dargestellt.
-
In
Anwendungen, wo die SAD klein sind (z. B. Szenen mit geringer Bewegung),
kann die Suche beendet werden, falls die minimalen, modifizierten SAD
für den
momentanen Block größer als
oder gleich zu dem gespeicherten Wert der modifizierten SAD sind.
Um zu bestimmen, ob die Suche fortzuführen ist, vergleicht der Kodierer
die momentanen, minimalen, modifizierten SAD für den momentanen Ziel-Block
mit einem gespeicherten Wert der modifizierten SAD (Schritt 710).
Falls die momentanen, modifizierten SADmin geringer als die minimalen
SAD sind, die bis hier gefunden sind, aktualisiert der Kodierer
den gespeicherten Wert der modifizierten SAD (Schritt 712)
und schreitet zu dem nächsten
Punkt in dem Suchpfad fort (Schritt 714). Zu Anfang wird
der gespeicherte Wert der modifizierten SAD auf die modifizierten
SAD des ersten Blocks in der Suche eingestellt. An darauf folgenden
Ziel-Blöcken
in dem Suchpfad wird der gespeicherte Wert der modifizierten SAD
auf die momentanen, modifizierten SAD eingestellt, falls die momentanen,
modifizierten SAD geringer als der zuvor gespeicherte Wert sind.
Wie in 7 dargestellt ist, hält die Suche an, falls die
minimalen, modifizierten SAD für
den momentanen Block größer als
oder gleich zu dem niedrigsten Wert der modifizierten SAD, die bis
hier gefunden sind, sind.
-
8 zeigt
ein Blockdiagramm einer Ausführungsform
einer Bewegungs-Schätzeinrichtung 800,
die das Verfahren, dargestellt in 7, einsetzt. Der
Bewegungsvektor-Prädiktor 802 stellt
die Berechnung des vorhergesagten Bewegungsvektors dar. Er nimmt
die Bewegungsvektoren von benachbarten Blöcken und berechnet einen vorhergesagten Bewegungsvektor
für den
momentanen Block. Die Suchpfad-Steuerung 804 verwendet
den vorhergesagten Bewegungsvektor, um den Startpunkt der Suche
für einen
passenden Block in einem Suchbereich des Ziel-Einzelbilds zu bestimmen.
Die Eingaben zu der Suchpfad-Steuerung, TARGET und SOURCE, sind
die Ziel- und Quellenbilder. Für
jeden Quellenblock in dem Quellenbild berechnet die Suchpfad-Steuerung
die Suchstartstelle in dem Ziel-Bild und die Suchreihenfolge und
die Stelle der Ziel-Blöcke in dem
Ziel-Bild. Die Suchreihenfolge folgt einem spiralförmigen Pfad
von dem Punkt, identifiziert durch den vorhergesagten Bewegungsvektor.
Falls die Größe des vorhergesagten
Bewegungsvektors aufgrund der Begrenzung der Größe der Bewegungsvektoren begrenzt
ist, wählt
die Suchpfad-Steuerung eine verschobene Suchreihenfolge so aus,
wie dies vorstehend beschrieben ist.
-
Der
Subtrahierer 806 berechnet die Differenzen zwischen den
Pixel-Werten in dem Quellenblock und dem momentanen Ziel-Block,
wie dies durch den Suchpfad vorgegeben ist. Der SAD-Akkumulator 808 summiert
die Differenzen auf und akkumuliert die Summe für den momentanen Block.
-
Die
Bewegungs-Schätzeinrichtung
evaluiert das Overhead, das den Bewegungsvektor-Bits zuschreibbar
ist, basierend auf dem Bewegungsvektor für die momentane Position in
dem Suchpfad. Jeder Schritt in der Suche besitzt einen Bewegungsvektor, der
dazu zugeordnet ist. Unter Kenntnis der Größe dieses Bewegungsvektors
kann die Bewegungs-Schätzeinrichtung
dann die Zahl von Bits, die dem Bewegungsvektor für den momentanen
Schritt zugeschrieben sind, berechnen. Sie stellt dann das Bewegungsvektor-Overhead
(z. B. die Bits, die benötigt
werden um den Bewegungsvektor zu kodieren) mit einer Konstanten
K und dem Quantisierungsschritt Qs ein. Der Multiplizierer 810 berechnet
die minimalen, modifizierten SAD für den momentanen Schritt als
Bits(Bewegungsvektor)·K·Qs.
-
Der
minimale Wert der modifizierten SAD für den momentanen Block (modifizierte
SADmin) kann dann dazu verwendet werden, zu bestimmen, ob die Suche
weiter fortzuführen
ist, wie dies vorstehend erläutert
ist. Insbesondere vergleicht ein Komparator 812 die modifizierten
SADmin für
den momentanen Block mit dem gespeicherten Wert der modifizierten SAD.
Falls das modifizierte SADmin größer als
oder gleich zu dem gespeicherten Wert ist, dann kann die Bewegungs-Schätzeinrichtung
die Suche anhalten und den Ziel-Block mit dem minimalen SAD verwenden,
um den Bewegungsvektor für den
momentanen Makro-Block zu berechnen. Falls dies nicht der Fall ist,
dann schreitet die Suche fort zu dem nächsten Suchpunkt in der Suchreihenfolge.
-
Die
Bewegungs-Schätzeinrichtung
berechnet die modifizierten SAD für jeden Ziel-Block als die Summe
des minimalen, modifizierten SAD (K·Qs Bits(Bewegungsvektor))
und die SAD für
den momentanen Block. Die Bewegungs-Schätzeinrichtung vollzieht
dann die niedrigsten modifizierten SAD, die bisher gefunden sind
(modifizierte SADgespeichert), zusammen mit dem Bewegungsvektor
für den Ziel-Block, der diesen
niedrigsten Wert ergab, nach. Der zweite Komparator 816,
dargestellt in 8, stellt den Vorgang eines
Aktualisierens des niedrigsten, modifizierten SAD-Werts, gefunden in
der Suche, nachdem jeder Ziel-Block evaluiert ist, dar. Wenn die
Suche endet, wird der Bewegungsvektor, der dem Ziel-Block zugeordnet
ist, der den niedrigsten, modifizierten SAD-Wert besitzt, für den Makro-Block
kodiert.
-
Kurze Übersicht
eines Computersystems
-
9 und
die nachfolgende Diskussion sind dazu vorgesehen, eine kurze, allgemeine
Beschreibung einer geeigneten Berechnungsumgebung anzugeben, in
der die Erfindung ausgeführt
werden kann. Obwohl die Erfindung oder Aspekte davon in einer Hardware-Vorrichtung
ausgeführt
werden können,
werden der Kodierer und der Dekodierer, die vorstehend beschrieben
sind, in durch einen Computer ausführbare Instruktionen, organisiert
in Programm-Modulen, ausgeführt.
Die Programm-Module umfassen die Routines, Programme, Objekte, Komponenten
und Daten-Strukturen, die die Aufgaben durchführen und die Daten-Typen, die
vorstehend beschrieben sind, umsetzen.
-
Während 9 einen
typischen Aufbau eines Desktop-Computers darstellt, kann die Erfindung in
anderen Konfigurationen eines Computersystems ausgeführt werden,
einschließlich
von in der Hand haltbaren Vorrichtungen, Multiprozessor-Systemen, auf
einem Mikroprozessor basierende oder programmierbare Verbraucher-Elektroniken,
Minicomputern, Main-Frame-Computern und dergleichen. Die Erfindung
kann auch in verteilten Berechnungsumgebungen verwendet werden,
wo Aufgaben durch Fernverarbeitungs-Vorrichtungen durchgeführt werden,
die über
ein Kommunikationsnetzwerk miteinander vernetzt sind. In einer verteilten
Berechnungsumgebung können
Programm-Module
in sowohl lokalen als auch entfernten Speicher-Vorrichtungen angeordnet sein.
-
9 stellt
ein Beispiel eines Computersystems dar, das als eine Arbeitsumgebung
für die
Erfindung dient. Das Computersystem umfasst einen Personal-Computer 920,
umfassend eine Verarbeitungseinheit 921, einen Systemspeicher 922 und
einen System-Bus 923, der verschiedene Systemkomponenten,
einschließlich
des Systemspeichers, mit der Verarbeitungseinheit 921,
verbindet. Der System-Bus kann irgendeinen von verschiedenen Typen von
Bus-Strukturen, einschließlich
eines Speicher-Busses
oder einer Speicher Steuereinrichtung, eines peripheren Busses und
eines lokalen Busses, unter Verwendung einer Bus-Architektur, wie
beispielsweise PCI, VESA, Microchannel (MCA), ISA und EISA, um nur
einige zu nennen, aufweisen. Der Systemspeicher umfasst einen Read
Only Memory (ROM) 924 und einen Random Access Memory (RAM) 925.
Ein Basis-Eingangs/Ausgangs-System 926 (BIOS), das die
Basis-Routines enthält, die
dabei helfen, Informationen zwischen Elementen innerhalb des Personal-Computers 920 zu übertragen,
wie beispielsweise während
eines Start-up, ist in dem ROM 924 gespeichert. Der Personal-Computer 920 umfasst
weiterhin ein Festplattenlaufwerk 927, ein Magnetplattenlaufwerk 928,
z. B. um von einer entnehmbaren Platte 929 zu lesen und
darauf zu schreiben, und ein optisches Plattenlaufwerk 930,
z. B. zum Lesen einer CD-ROM-Disk 931 oder um von einem
anderen optischen Medium zu lesen oder darauf zu schreiben. Das
Festplattenlaufwerk 927, das Magnetplattenlaufwerk 928 und
das optische Plattenlaufwerk 930 sind mit dem System-Bus 923 durch
eine Festplattenlaufwerk-Schnittstelle 932, eine Magnetplattenlaufwerk-Schnittstelle 933 und
eine Schnittstelle 934 für ein optisches Laufwerk, jeweils,
verbunden. Die Laufwerke und deren zugeordnete, mittels Computer
lesbare Medien bilden einen nicht flüchtigen Speicher für Daten,
Daten-Strukturen, durch einen Computer ausführbare Instruktionen (Programm-Code,
wie beispielsweise dynamisches Verknüpfungs-Libraries und ausführbare Dateien),
usw., für
den Personal-Computer 920. Obwohl sich die Beschreibung
von computer-lesbaren Medien vorstehend auf ein Festplattenlaufwerk,
eine entnehmbare, magnetische Platte und eine CD bezieht, kann sie auch
andere Typen von Medien umfassen, die durch einen Computer lesbar
sind, wie beispielsweise magnetische Kassetten, Flash-Memory-Cards,
Digital-Video-Disks, Bernoulli-Cartridges, und dergleichen.
-
Eine
Anzahl von Programm-Modulen kann in den Laufwerken und dem RAM 925 gespeichert
sein, einschließlich
eines Betriebssystems 935, von einem oder mehren Anwendungsprogrammen) 936,
anderen Programm-Modulen 937 und Programm-Daten 938.
Ein Benutzer kann Befehle und Informationen in den Personal-Computer 920 über ein
Tastenfeld 940 und eine Hinweisvorrichtung, wie beispielsweise
eine Maus 942, eingeben. Andere Eingabevorrichtungen (nicht
dargestellt) können
ein Mikrofon, einen Joy-Stick, ein Game-Pad, eine Satelliten-Schüssel, einen
Scanner oder dergleichen umfassen. Diese und andere Eingabevorrichtungen
sind oftmals mit der Verarbeitungseinheit 921 über eine
serielle Anschluss-Schnittstelle 946 verbunden, die mit
dem System-Bus gekoppelt ist, können
allerdings auch durch andere Schnittstellen verbunden sein, wie
beispielsweise einem parallelen Port, einem Game-Port oder einem
universellen, seriellen Bus (USB). Ein Monitor 947 oder
ein anderer Typ einer Anzeigevorrichtung ist auch mit dem System-Bus 923 über eine Schnittstelle,
wie beispielsweise eine Anzeigesteuereinheit oder ein Video-Adapter 948,
verbunden. Zusätzlich
zu dem Monitor umfassen Personal-Computer typischerweise andere
periphere Ausgabevorrichtungen (nicht dargestellt), wie beispielsweise
Lautsprecher und Drucker.
-
Der
Personal-Computer 920 kann in einer vernetzten Umgebung
arbeiten, die logische Verbindungen zu einer oder zu mehreren entfernten
Computern verwendet, wie beispielsweise einem entfernten Computer 949.
Der entfernte Computer 949 kann ein Server, ein Router,
eine Peer-Vorrichtung oder ein anderer Netzwerkknoten sein und umfasst
typischerweise viele oder alle der Elemente, die relativ zu dem Personal-Computer 920 beschrieben
sind, obwohl nur eine Speichervorrichtung 950 in 9 dargestellt worden
ist. Die logischen Verbindungen, die in 9 dargestellt
sind, umfassen ein Local-Area-Network (LAN) 951 und ein
Wide-Area-Network (WAN) 952. Solche vernetzten Umgebungen
sind in Büros,
in weltweiten Computer-Netzwerken, in Intranets und dem Internet üblich.
-
Der
Personal-Computer 920 ist, wenn er in einer LAN-Netzwerkumgebung
verwendet wird, mit dem lokalen Netzwerk 951 über eine
Netzwerkschnittstelle oder einen Adapter 953 verbunden. Wenn
er in einer WAN-Netzwerkumgebung verwendet ist, umfasst der Personal-Computer 920 typischerweise
ein Modem 954 oder eine andere Einrichtung zum Einrichten
von Kommunikationen über
das Wide-Area-Network 952, wie beispielsweise das Internet.
Das Modem 954, das intern oder extern vorliegen kann, ist
mit dem System-Bus 923 über
die serielle Anschluss-Schnittstelle 946 verbunden. In
einer vernetzen Umgebung können
Programm-Module, die relativ zu dem Personal-Computer 920 gezeigt sind,
oder Bereiche davon, in der Fernspeicher-Vorrichtung gespeichert
sein. Die Netzwerk-Verbindungen, die dargestellt sind, sind nur
Beispiele, und andere Einrichtungen, um eine Kommunikationsverbindung
zwischen den Computern einzurichten, können verwendet werden.
-
Schlussfolgerung
-
Während die
Erfindung unter Verwendung einer spezifischen Ausführungsform
als ein Beispiel dargestellt worden ist, ist der Schutzumfang der
Erfindung nicht auf die spezifische Ausführungsform, die vorstehend
beschrieben ist, beschränkt.
Zum Beispiel berechnet die Ausführungsform,
die vorstehend beschrieben ist, ein Maß der kombinierten Bewegungsvektor-
und Fehlersignale für
einen Makro-Block unter Verwendung einer spezifischen Formel, die
die Bits, verwendet dazu, den Bewegungsvektor zu kodieren, gewichtet.
Allerdings kann die Art und Weise, in der das Overhead des Bewegungsvektors
und das Fehlersignal gemessen werden, mit der Ausführungsform
variieren.
-
Während der
spiralförmige
Suchpfad, der vorstehend beschrieben ist, Vorteile in Bezug auf eine
Erhöhung
der Geschwindigkeit des Kodierers besitzt, ist es nicht notwendig,
diese Maßnahme
in allen Ausführungsformen
der Erfindung zu verwenden. Ähnlich
kann die Maßnahme
eines Verschiebens der Suchreihenfolge nur in Fällen angewandt werden, bei denen
die Einschränkungen
in Bezug auf eine Bewegungsvektorgröße zu einer Startstelle für die Block-Anpassungs-Suche
führt,
die nicht ganz optimal ist. Allerdings sind dabei Vorteile vorhanden,
einen Suchpfad auszuwählen
und/oder die Suchreihenfolge zu Suchblöcken hin zu verschieben, die wahrscheinlicher
dahingehend sind, dass sie ein niedrigeres, kombiniertes Bewegungsvektor-
und Fehlersignal-Overhead
haben.