-
HINTERGRUND
-
Digitale Videostreams können Videomaterial als eine Bildfolge oder als Einzelbilder darstellen. Digitale Videos können für eine Vielzahl von Anwendungen genutzt werden, darunter beispielsweise Videokonferenzen, hochauflösende Unterhaltungsprodukte, Werbevideos oder die gemeinsame Nutzung von selbst produzierten Videos. Ein digitaler Videostream kann eine große Menge Daten enthalten und erhebliche Teile der Rechen und Kommunikationsressourcen eines Computergerätes bei der Verarbeitung, Übertragung oder Speicherung der Videodaten binden. Es liegen verschiedene Ansätze zur Reduzierung der Datenmengen in Videostreams als Vorschläge vor, darunter Kompression und andere Kodierungstechniken.
-
US 2013 / 0 208 795 A1 offenbart Techniken zur effizienten Codierung von Videoinhalten. Beim Codieren von Bewegungsvektoren eines aktuellen Blocks eines aktuellen Videoeinzelbilds analysiert eine Codiererverwaltungskomponente codierte Blöcke des aktuellen Einzelbilds neben dem aktuellen Block und codierte Blöcke des vorherigen Videoeinzelbilds, die Positionen in dem vorherigen Einzelbild belegen, die den Positionen des aktuellen Blocks und der an den aktuellen Block angrenzenden Blöcke entsprechen. Die Codiererverwaltungskomponente ordnet Bewegungsvektoren in der Reihenfolge als Funktion der räumlichen Nähe, des zeitlichen Abstands zwischen dem vorherigen Rahmen und dem aktuellen Rahmen und/oder der Bewegungsvektorgröße an.
-
US 2011 / 0 194 608 A1 offenbart ein Verfahren zum Verwalten von PMV-Kandidaten. Das Verfahren umfasst das Auswählen eines Satzes von PMV-Kandidaten als Teilsatz der zuvor codierten Bewegungsvektoren. Das Verfahren umfasst ferner das Zuweisen eines Codewerts zu jedem PMV-Kandidaten in dem Satz von PMV-Kandidaten. Die Codewerte variieren in der Länge und werden den PMV-Kandidaten in der Reihenfolge der erwarteten Verwendung zugewiesen, so dass der PMV-Kandidat mit der höchsten erwarteten Verwendung einen der kürzesten Codewerte hat.
-
US 2013 / 0 064 301 A1 offenbart ein Verfahren und Vorrichtungen zur adaptiven Reihenfolge von Bewegungsvektorkandidaten für die Videocodierung und - decodierung. Eine Vorrichtung umfasst einen Videocodierer zum Codieren eines Blocks in einem Bild durch Auswählen einer Reihenfolge von Bewegungsvektorprädiktorkandidaten für den Block in Reaktion auf eine Charakteristik, die sowohl am Videocodierer als auch an einem entsprechenden Decodierer verfügbar ist. Die Charakteristik schließt einen Modus aus, in dem der Block partitioniert ist.
-
US 2013 / 0 010 868 A1 offenbart ein Verfahren zum Decodieren eines Videosignals mit mindestens einem Vollbild mit mehreren Blöcken, einschließlich eines aktuellen Blocks, einschließlich des Erzeugens eines vorhergesagten Werts für mindestens ein Pixel, das sich in a befindet, für mindestens ein ausgewähltes Pixel in dem aktuellen Block Zeile i und eine Spalte j des aktuellen Blocks unter Verwendung eines Prozessors und gemäß der folgenden Gleichung: Xij = Li + Aj - C; wobei Xij der vorhergesagte Wert ist, Li der Wert eines Pixels links vom aktuellen Block ist, Aj der Wert eines Pixels in einer Reihe über dem aktuellen Block ist und C der Wert eines Pixels in der Reihe darüber ist und der Spalte links vom aktuellen Block und Decodieren des aktuellen Blocks unter Verwendung des vorhergesagten Werts.
-
JP 2014-200 022 A offenbart eine Bildkodiervorrichtung, die ein Bild unter Verwendung einer Intervorhersage an einer Blockeinheit kodiert, die durch Teilen eines Bildes jeder Hierarchie unter Verwendung einer skalierbaren Kodierung für eine hierarchische Kodierung erhalten wird. Ein Zusammenführungskandidaten-Erzeugungsteil 131 leitet einen Kandidaten von Inter-Vorhersage-Informationen zwischen Hierarchien, einen Kandidaten von räumlichen Inter-Vorhersage-Informationen und einen Kandidaten von Zeit-Inter-Vorhersage-Informationen ab. Der Zusammenführungskandidaten-Erzeugungsteil 131 schließt den Kandidaten der Zeit-Inter-Vorhersage-Informationen von den Kandidaten der Inter-Vorhersage-Informationen aus, wenn der Kandidat der Inter-Vorhersage-Informationen zwischen den Hierarchien abgeleitet werden kann.
-
KURZDARSTELLUNG
-
Diese Offenbarung bezieht sich im Allgemeinen auf die Kodierung und Dekodierung von Videodaten genauer gesagt auf die Videokodierung unter Verwendung von Referenz-Bewegungsvektoren.
-
Verfahren zum Dekodieren eines Videostreams gemäß einer Implementierung dieser Offenbarung, beinhaltend: das Identifizieren eines Referenzbildes für einen aktuellen Block, das für das Kodieren des aktuellen Blocks innerhalb eines aktuellen Bildes verwendet wird, das Erstellen einer Kandidatenliste der Referenz-Bewegungsvektoren für das Referenzbild, das die Referenz-Blöcke verwendet, das Ranking aller Bewegungsvektoren innerhalb der Kandidatenliste der Referenz-Bewegungsvektoren nach der Distanz von dem aktuellen Block zu einem Referenzblock, der den Bewegungsvektor bereitstellt, und nach einem Beliebtheitswert des Bewegungsvektors, der eine Nutzungsintensität des Bewegungsvektors durch die Referenzblöcke anzeigt, das Zuweisen der Bewegungsvektoren zu einer Vielzahl von Inter-Vorhersage-Modi basierend auf dem Ranking, die Auswahl eines Inter-Vorhersage-Modus zum Dekodieren des aktuellen Blocks und das Dekodieren des aktuellen Blocks unter Verwendung des Inter-Vorhersage-Modus, wobei der Beliebtheitswert eine Anzahl an zuvor kodierten Pixeln innerhalb aller oder einiger der Referenz-Blöcke unter Verwendung des Bewegungsvektors innerhalb der Kandidatenliste der Referenz-Bewegungsvektoren umfasst oder einen Prozentsatz einer Gesamtanzahl von zuvor kodierten Pixeln innerhalb aller oder einiger der Referenz-Blöcke unter Verwendung des Bewegungsvektors innerhalb der Kandidatenliste für Referenz-Bewegungsvektoren umfasst. Die Referenz-Blöcke können räumlich nebeneinander liegende Blöcke des aktuellen Bildes, einen gemeinsam genutzten Block innerhalb eines vorherigen Bildes und räumlich nebeneinander liegende Blöcke des gemeinsam genutzten Blocks innerhalb des vorherigen Bildes, oder andere Referenz-Blöcke beinhalten.
-
Eine entsprechende Vorrichtung zum Dekodieren eines Videostreams ist auch bereitgestellt, zum Beispiel eine Vorrichtung zum Dekodieren eines Videostreams gemäß einer Implementierung dieser Offenbarung beinhaltet einen Prozessor und einen Speicher, der Speicher speichert Anweisungen, die den Prozessor veranlassen, das oben genannte Verfahren durchzuführen.
-
Ein Verfahren zum Kodieren eines Videostreams gemäß einer Implementierung dieser Offenbarung beinhaltet die Identifikation von Bewegungsvektorkandidaten zum Kodieren eines aktuellen Blocks innerhalb eines aktuellen Bildes unter Verwendung von Referenz-Blöcken für jedes einer Vielzahl von Referenzbildern, das Ranking der Bewegungsvektorkandidaten innerhalb einer Kandidatenliste für Referenz-Bewegungsvektoren für ein Referenzbild nach der Distanz des aktuellen Blocks von einem entsprechenden Referenzblock, der einen entsprechenden Bewegungsvektorkandidaten bereitstellt, und nach einem Beliebtheitswert des Bewegungsvektors, der eine Nutzungsintensität des Bewegungsvektors durch die Referenzblöcke anzeigt, das Zuweisen der Bewegungsvektoren zu einer Vielzahl von Inter-Vorhersage-Modi basierend auf dem Ranking, die Auswahl eines Inter-Vorhersage-Modus zum Dekodieren des aktuellen Blocks und das Kodieren des aktuellen Blocks unter Verwendung des Inter-Vorhersage-Modus, wobei der Beliebtheitswert eine Anzahl an zuvor kodierten Pixeln innerhalb aller oder einiger der Referenz-Blöcke unter Verwendung des Bewegungsvektors innerhalb der Kandidatenliste der Referenz-Bewegungsvektoren umfasst oder einen Prozentsatz einer Gesamtanzahl von zuvor kodierten Pixeln innerhalb aller oder einiger der Referenz-Blöcke unter Verwendung des Bewegungsvektors innerhalb der Kandidatenliste für Referenz-Bewegungsvektoren umfasst.
-
Eine entsprechende Vorrichtung zum Kodieren eines Videostreams ist auch bereitgestellt, zum Beispiel eine Vorrichtung, die einen Prozessor und einen Speicher beinhaltet, wobei der Speicher Anweisungen, die den Prozessor veranlassen, das oben genannte Verfahren durchzuführen, enthält. Ebenfalls bereitgestellt sind ein oder mehrere computerlesbare Medien, die einen Computetprogrammcode zum wirksamen Umsetzen der Kodier- und/ oder Dekodier-Methoden bereitstellen und die hierin beschriebene Vorrichtung, wenn sie auf einem geeigneten Computergerät ausgeführt werden.
-
Variationen in diesen und anderen Aspekten der Offenbarung werden nachfolgend ausführlicher beschrieben.
-
Figurenliste
-
Die herein enthaltene Beschreibung nimmt Bezug auf beigefügte Zeichnungen, die nachstehend beschrieben werden, wobei dieselben Bezugszahlen in den verschiedenen Ansichten denselben Elementen entsprechen.
- 1 zeigt eine Prinzipskizze eines Videokodierungs- und Dekodierungssystems.
- 2 ist ein Blockdiagramm eines Beispiels eines Computergeräts mit dessen Hilfe eine Sende- oder Empfangsstation umgesetzt werden kann.
- 3 ist ein Diagramm mit einem Beispiel für einen Videostream, der kodiert und danach dekodiert werden soll.
- 4 ist ein Blockdiagramm eines Videokomprimierungssystems gemäß einem Aspekt der hierin enthaltenen Lehren.
- 5 ist ein Blockdiagramm eines Videodekomprimierungssystems entsprechend einem anderen Aspekt der hierin enthaltenen Lehre.
- 6 ist ein Flussdiagramm eines Prozesses zum Kodieren eines Videostreams unter Verwendung von Referenz-Bewegungsvektoren gemäß einer Implementierung dieser Offenbarung.
- 7A und 7B sind Diagramme einer Sequenz von Bildern, die verwendet wird, um die Identifikation der Bewegungsvektorkandidaten innerhalb des Prozesses von 6 zu erklären.
- 8 ist ein Flussdiagramm eines Prozesses zum Dekodieren eines kodierten Videostreams unter Verwendung von Referenz-Bewegungsvektoren gemäß Implementierungen dieser Offenbarung.
-
DETAILLIERTE BESCHREIBUNG
-
Die Kompressionsmethoden zur Kodierung von Videostreams können die Aufteilung der einzelnen Bilder in Blöcke und die Erzeugung des Bitstreams der digitalen Videoausgabe mittels einer oder mehrerer Techniken zur Verminderung der Informationsmenge in der Ausgabe einschließen. Der empfangene Bitstream kann dekodiert werden, um die Blöcke und die Ausgangsbilder aus den beschränkten Informationen neu zu erstellen. Die Kodierung eines Videostreams, oder eines Teiles von diesem, wie ein Einzelbild oder Block kann die Verwendung von zeitlichen und räumlichen Ähnlichkeiten im Videostream zur Steigerung der Kodierleistung einschließen. So kann beispielsweise ein aktueller Block eines Videostreams auf der Basis eines zuvor kodierten Blocks im Videostream kodiert werden, indem Bewegungs- und Farbinformationen für den aktuellen Block aufgrund der Daten des zuvor kodierten Blocks vorausgesagt werden und die Differenz (Restwert) zwischen den vorausgesagten Werten und dem aktuellen Block festgestellt wird. Auf diese Art müssen nur der Restwert und die für seine Erzeugung verwendeten Parameter dem Bitstream hinzugefügt werden, anstatt des kompletten aktuellen Blocks. Diese Technik kann als Inter-Vorhersage bezeichnet werden.
-
Einer der Parameter in der Inter-Vorhersage ist ein Bewegungsvektor, der die räumliche Verschiebung der zuvor kodierten Blöcke relativ zum aktuellen Block darstellt. Der Bewegungsvektor kann unter Verwendung einer Methode der Bewegungsschätzung, wie zum Beispiel einer Bewegungssuche identifiziert werden. In der Bewegungssuche kann ein Teil eines Referenzbildes in eine Folge von Positionen umgewandelt werden, die einen Vorhersageblock formen, der von einem Teil eines aktuellen Bildes abgezogen werden kann, um eine Reihe von Restwerten zu formen. Die der Position entsprechenden X- und Y-Umsetzungen, die der Position mit dem kleinsten Restwert entsprechen, können als Bewegungsvektor ausgewählt werden. Bits, die den Bewegungsvektor darstellen, können in dem kodierten Bitstream beinhaltet sein, um einem Dekodierer zu ermöglichen, den Vorhersageblock zu reproduzieren und den Teil des kodierten Video-Bitstreams, der mit dem Bewegungsvektor verbunden ist, zu dekodieren.
-
Für Videokompressionsschemata kann die Anzahl an Bits, die verwendet werden, um die Bewegungsvektoren zu kodieren, erheblich sein, vor allem für Videostreams, die mit einer niedrigeren Datenrate oder einem höheren Kompressionsverhältnis kodiert sind. Um die Kodierleistung zu verbessern, kann ein Bewegungsvektor differentiell unter Verwendung eines Referenz-Bewegungsvektors kodiert werden, d. h. nur die Differenz zwischen dem Bewegungsvektor und dem Referenz-Bewegungsvektor wird kodiert. In manchen Fällen kann der Referenz-Bewegungsvektor aus zuvor verwendeten Bewegungsvektoren im Videostream ausgewählt werden, zum Beispiel, der letzte Nicht-Null-Bewegungsvektor von benachbarten Blöcken. Die Auswahl eines zuvor verwendeten Bewegungsvektors für die Kodierung eines aktuellen Bewegungsvektors kann des Weiteren die Anzahl an Bits, die im kodierten Video-Bitstream beinhaltet sind, und damit den für Übertragung und Speicherung erforderlichen Bandbreiten-Bedarf reduzieren. Durch Bewegungsvektor-Referenziermethoden kann ein Codierungsblock von zuvor kodierten benachbarten Blöcken Bewegungsinformationen ableiten.
-
Die Kandidatenliste der Referenz-Bewegungsvektoren kann entsprechend der Distanz zwischen dem Referenzblock und dem aktuellen Block, der kodiert wird, konstruiert werden. Allerdings ignoriert ein Ranking ausschließlich nach der Blockdistanz, dass ein Bewegungsvektor von mehreren Blocks verwendet werden kann. Wie viele Pixel in einem Referenz-Bereich den Bewegungsvektor verwenden, kann darauf hinweisen, wie wahrscheinlich es ist, dass der Bewegungsvektor ein effektiver Bewegungsvektor für den aktuellen Block ist.
-
Wie erwähnt können benachbarte Blöcke verwendet werden, um eine Kandidatenliste für Referenz-Bewegungsvektoren zu konstruierten. Damit der Kodierer und Dekodierer dieselben Informationen verwenden, werden zuvor kodierte Blöcke verwendet. Im Falle der Kodierung in der Reihenfolge von Rasterscans sind die benachbarten Blöcke auf jene links und über dem aktuellen Block beschränkt, sofern diese verfügbar sind. Der gemeinsam genutzte Block vom vorherigen Bild (auch das letzte Bild genannt) kann auch berücksichtigt werden. Allerdings ist der gemeinsam genutzte Block ein Block, der im letzten Bild, das dieselbe Pixelposition wie der aktuelle Block hat, positioniert, daher werden potenziell nützliche Bewegungsinformationen von rechts und von unten des aktuellen Blocks noch immer weggelassen.
-
Unabhängig davon, wie die Kandidatenliste der Referenz-Bewegungsvektoren aufgebaut ist, kann es eine fixe Anzahl an Bewegungsvektor-Referenziermethoden geben, zum Beispiel zwei. Die Verwendung einer fixen Anzahl an Referenzmodi ist möglicherweise ineffizient. Wenn zum Beispiel die Kandidatenliste der Referenz-Bewegungsvektoren weniger als die fixe Anzahl an Bewegungsvektoren enthält, kann ein Null-Bewegungsvektor nötig sein, um die Modi ohne Bewegungsvektor aufzufüllen. In anderen Fällen kann die Kandidatenliste der Referenz-Bewegungsvektoren mehr als die fixe Anzahl an Bewegungsvektoren enthalten. Die ausgelassenen Bewegungsvektoren können bessere Kandidaten sein, als die, die beibehalten wurden das heißt, ein ausgelassener Bewegungsvektor kann zu einer besseren Rate und/oder weniger Verzerrung bei der Kodierung des aktuellen Blocks führen.
-
In Implementierungen dieser Offenbarung kann die Kompressionsleistung durch Verwendung eines effizienten Ranking-Systems für Referenz-Bewegungsvektoren, gefolgt von einem dynamischen Bewegungsvektor-Referenziermodus der vollständig die verfügbare Kandidatenliste der Bewegungsvektoren wiedergibt, verbessert werden. Im Ranking-System können zum Beispiel Referenz-Bewegungsvektorkandidaten für Blöcke mit einem einzelnen Referenzbild nach beiden relativen Distanzen zwischen aktuellem Block und Abdeckungsbereich (z. B. Verwendung des Bewegungsvektors) gereiht werden. Für Blöcke mit zusammengesetzten (z. B. zwei) Referenzbildern, können die Bewegungsvektorkandidaten von Referenz-Blöcken, die dieselbe Referenzbildkombination verwenden, mit einer höheren Priorität gereiht werden. Darunter sind optional Kombinationen von Bewegungsvektoren benachbarter Blöcke mit einem einzelnen Referenzbild gereiht. Bei der Bestimmung der Bewegungsvektorkandidaten können Bewegungsinformationen, die Blöcken unten und rechts von dem gemeinsam genutzten Block zugeordnet sind, berücksichtigt werden, um diese Bewegungsrichtungen zu erfassen. Schließlich kann der dynamische Bewegungsvektor-Referenziermodus eine Reihe von Modi, die von der Größe der Kandidatenliste der Referenz-Bewegungsvektoren abhängt verwenden, sodass die Wahrscheinlichkeit, potenziell wertvolle Referenzinformationen zu verlieren, reduziert ist.
-
Ein Referenz-Bewegungsvektor kann aus den Bewegungsvektorkandidaten basierend auf der Distanz zwischen dem Referenzblock und dem aktuellen Block und der Beliebtheit des Referenz-Bewegungsvektors ausgewählt werden. Die Distanz zwischen dem Referenzblock und dem aktuellen Block kann zum Beispiel auf der räumlichen Verschiebung zwischen den Pixeln in dem zuvor kodierten Block und den entsprechenden gemeinsam genutzten Pixeln im aktuellen Block, gemessen in Pixel, basieren. Die Beliebtheit des Bewegungsvektors kann zum Beispiel auf der Menge der zuvor kodierten Pixel, die den Bewegungsvektor verwenden, basieren. Je mehr zuvor kodierte Pixel den Bewegungsvektor verwenden, desto höher ist die Wahrscheinlichkeit des Bewegungsvektors. In einem Beispiel ist der Beliebtheitswert die Anzahl an zuvor kodierten Pixeln, die den Bewegungsvektor verwenden. In einem weiteren Beispiel ist der Beliebtheitswert ein Prozentwert der zuvor kodierten Pixel, innerhalb eines Bereichs, die den Bewegungsvektor verwenden.
-
Aufgrund der Nähe des aktuellen Blocks zu den Pixeln im Referenzblock, ist es in vielen Fällen wahrscheinlich, dass der aktuelle Block ähnliche Bewegungseigenschaften wie diese Pixel hat. Daher kann ein Bewegungsvektorkandidat, der in einem Referenzblock in der Nähe des aktuellen Blocks verwendet wird, dem aktuellen Bewegungsvektor des aktuellen Blocks sehr ähnlich sein. Zusätzlich kann ein Bewegungsvektorkandidat, der von den meisten Pixeln in einem Referenzblock in der Nähe des aktuellen Blocks verwendet wird, dem aktuellen Bewegungsvektor des aktuellen Blocks ähnlich sein. Aus diesem Grund kann der Bewegungsvektor des Bewegungsvektorkandidaten mit der größten Beliebtheit, der in einem in der Nähe befindlichen Referenzblock verwendet wird, ausgewählt werden als Referenz-Bewegungsvektor für den aktuellen Bewegungsvektor des aktuellen Blocks. Um den aktuellen Bewegungsvektor durch Kodierung des kleinen Unterschiedes in den Bewegungsvektoren zu kodieren, können weniger Bits verwendet werden, wodurch die Gesamtkodierungseffizienz verbessert wird. Andere Arten, um den gewählten Bewegungsvektor zu verwenden, werden in der Folge abgehandelt.
-
Die Bewegungsvektorkandidaten können auf räumlich-zeitlich benachbarte Bewegungsvektoren begrenzt werden. Das heißt, der Pool an Bewegungsvektorkandidaten kann von Bereichen, die den Bereichen des aktuellen Blocks benachbart sind, ausgewählt werden. In einigen Videokodierungsschemata, vor allem bei jenen, wo die Videobilder außerhalb der Reihenfolge kodiert sind, ist es wünschenswert, dass der Pool an Bewegungsvektorkandidaten Bewegungsinformationen von Videobildern in der fernen Vergangenheit oder Zukunft beinhaltet. Das Kodieren von Videobildern außerhalb der Reihenfolge kann zum Beispiel bei der Kodierung von sogenannten „alternativen Referenzbildern“, die zu den unmittelbar vor oder nach ihnen kodierten Bildern nicht zeitlich benachbart sind, erfolgen. Ein alternatives Referenzbild kann ein synthetisiertes Bild sein, das nicht im Eingangs-Videostream vorkommt, oder es ist ein doppeltes Bild eines Bildes im Eingangs-Videostream, das für die Vorhersage verwendet und im Allgemeinen nach dem Dekodieren nicht angezeigt wird. Solch ein Bild kann einem Videobild in der nicht angrenzenden Zukunft ähneln. Ein anderes Beispiel, bei dem außerhalb der Reihenfolge kodiert wird, ist bei der Verwendung eines sogenannten „goldenen Referenzbildes,“ eines rekonstruierten Videobildes, das einem aktuellen Videobild benachbart sein kann und im Speicher für die Verwendung als Referenzbild gespeichert ist, bis es ersetzt wird, z. B. durch ein neues goldenes Referenzbild.
-
Hierin können alternative Referenzbilder und goldene Referenzbilder (auch als alternative Bilder und golden Bilder bezeichnet) zusätzlich zu benachbarten Videobildern verwendet werden, um Bewegungsvektorkandidaten für einen Block eines Bildes von Videodaten abzuleiten. Nach der ersten Beschreibung einer Umgebung, in der die Offenbarung implementiert werden kann, sind herein andere Details beschrieben.
-
1 zeigt eine Prinzipskizze eines Videokodierungs- und Dekodierungssystems 100. Eine Sendestation 102 kann z. B. ein Computer sein, dessen Hardware der Beschreibung in 2 entspricht. Allerdings sind auch andere Implementierungen der Sendestation 102 möglich. So kann die Arbeit der Sendestation 102 auf mehrere Geräte verteilt sein.
-
Über ein Netz 104 können die Sendestation 102 und eine Empfangsstation 106 bei der Kodierung/Dekodierung des Videostreams miteinander verbunden sein. Genauer gesagt wird der Videostream in der Sendestation 102 kodiert und der kodierte Videostream kann in der Empfangsstation 106 dekodiert werden. Das Netz 104 kann zum Beispiel das Internet sein. Das Netz 104 kann auch ein lokales Netz (LAN), ein Weitverkehrsnetz (WAN), ein virtuelles privates Netz (VPN), ein Mobilfunknetzwerk oder ein anderes Medium zur Übertragung des Videostreams von der Sendestation 102 zur Empfangsstation 106 sein.
-
Die Empfangsstation 106 in einem Beispiel kann ein Computer sein, der eine interne Hardware-Konfiguration besitzt, entsprechend der Beschreibung in 2. Allerdings sind auch andere Implementierungen der Empfangsstation 106 möglich. So kann die Arbeit der Empfangsstation 106 auf mehrere Geräte verteilt sein.
-
Auch andere Implementierungen des Kodierungs-/Dekodierungssystems 100 sind möglich. Z. B. kann eine Implementierung auf das Netz 104 verzichten. In einer anderen Implementierung kann ein Videostream kodiert und für die spätere Übertragung an die Empfangsstation 106, oder ein anderes, mit Speicher ausgestattetes Gerät gespeichert werden. In einer Implementierung erhält die Empfangsstation 106 den kodierten Videostream (z. B. über das Netz 104, einen Datenbus und/oder irgendeinen Kommunikationsweg) und speichert ihn für die spätere Dekodierung. In einer exemplarischen Implementierung wird ein Echtzeit-Transportprotokoll (RTP) für die Übertragung des kodierten Videos über das Netz 104 verwendet. In einer weiteren Ausführung kann ein anderes Transportprotokoll als RTP verwendet werden, z. B. ein Hypertext Transfer Protocol(HTTP)- basiertes Protokoll für das Streamen von Videos.
-
Wenn die Übertragungsstation 102 und/oder die Empfangsstation 106 zum Beispiel in einem Videokonferenzdienst verwendet werden, können beide die Möglichkeit, einen Videostream wie nachstehend beschrieben zu kodieren und zu dekodieren, enthalten. So könnte beispielsweise die Empfangsstation 106 ein Videokonferenzteilnehmer sein, der einen kodierten Videobitstream von einem Videokonferenzserver (z. B. der Sendestation 102) empfängt, um ihn zu dekodieren und anzusehen, und weiterhin seinen eigenen Videobitstream kodiert und an den Videokonferenzserver für die Dekodierung und zur Ansicht durch andere Teilnehmer übermittelt.
-
2 ist ein Blockdiagramm eines Beispiels eines Computergeräts 200, mit dessen Hilfe eine Sende- oder Empfangsstation umgesetzt werden kann. Das Computergerät 200 kann z. B. die Sendestation 102 und/oder die Empfangsstation 106 aus 1 implementieren. Das Computergerät 200 kann die Form eines Computersystems mit mehreren Computergeräten oder die Form eines einzelnen Computergerätes, z. B., eines mobilen Telefons, eines Tablet-Computers, eines Laptop-Computers, eines Notebook-Computers, eines Desktop-Computers und dergleichen annehmen.
-
Eine CPU 202 im Computergerät 200 kann eine zentrale Prozessoreinheit sein. Alternativ kann CPU 202 jede andere Art von Gerät oder mehreren Geräten sein, die zum Manipulieren oder Verarbeiten von Informationen in der Lage sind, die aktuell existieren oder nachfolgend entwickelt werden. Obwohl die offenbarten Beispiele wie dargestellt, mit einem einzelnen Prozessor, z. B. CPU 202, praktiziert werden können, sind Vorteile bei Geschwindigkeit und Effizienz erreichbar, wenn mehr als ein Prozessor verwendet wird.
-
In einer Ausführung kann der Speicher 204 im Computergerät 200 ein Festwertspeicher (ROM) oder ein Arbeitsspeicher (RAM) sein. Jede andere Art von Speichergerät kann auch als Speicher 204 verwendet werden. Speicher 204 kann Code und Daten 206 beinhalten, auf die der Zugriff unter Verwendung eines Busses 212 durch die CPU 202 erfolgen kann. Der Speicher 204 kann ferner ein Betriebssystem 208 und Anwendungsprogramme 210 umfassen, unter den Anwendungsprogrammen 210 muss mindestens ein Programm sein, mit dem die CPU 202 die hier beschriebenen Verfahren ausführen kann. Zum Beispiel können zu den Anwendungsprogrammen 210 die Anwendungen 1 bis N gehören, die ihrerseits eine Anwendung zur Videokodierung enthalten, die das hier beschriebene Verfahren anwendet. Das Computergerät 200 kann auch einen zusätzlichen Speicher in Form eines sekundären Speichers 214 enthalten, der z. B. eine Speicherkarte sein kann, die in einem Mobilgerät verwendet wird. Weil die Videokommunikationssitzungen eine erhebliche Menge an Information enthalten können, können Sie ganz oder zum Teil im sekundären Speicher 214 gespeichert werden und wenn sie für die Verarbeitung gebraucht werden, in den Speicher 204 geladen werden.
-
Das Computergerät 200 kann auch ein oder mehrere Ausgabegerät(e) haben, z. B. die Anzeige 218. Bei der Anzeige 218 kann es sich in einem Beispiel um eine berührungsempfindliche Anzeige handeln, die eine Anzeige mit einem berührungsempfindlichen Element kombiniert, das durch Berührungseingaben betätigt wird. Die Anzeige 218 kann über den Bus 212 mit der CPU 202 verbunden werden. Andere Ausgabemechanismen, die es einem Benutzer ermöglichen, das Computergerät 200 zu programmieren oder ansonsten zu benutzen, können zusätzlich zu oder als Alternative zur Anzeige 218 bereitgestellt werden. Falls die Ausgabevorrichtung eine Anzeige aufweist oder enthält, kann sie auf verschiedene Arten umgesetzt werden, u. a. auch durch eine Flüssigkristallanzeige (LCD), eine Kathodenstrahlröhre (CRT) oder eine Leuchtdiodenanzeige (LED), wie z. B. eine organische LED-Anzeige (OLED).
-
Das Computergerät 200 kann auch eine Bildaufnahmevorrichtung 220 haben, oder in Verbindung dazu stehen, z. B. eine Kamera oder ein anderes existierendes oder noch zu entwickelndes Bilderfassungsgerät 220, das ein Bild erfassen kann, z. B. das Bild eines Benutzers bei der Bedienung des Computergeräts 200. Das Bilderfassungsgerät 220 kann so positioniert sein, dass es zum Benutzer, der das Computergerät 200 bedient, gerichtet ist. In einem Beispiel können die Position und die optische Achse des Bildsensorgerätes 220 so konfiguriert werden, dass das Blickfeld einen Bereich einschließt, der sich direkt neben der Anzeige 218 befindet und von dem aus die Anzeige 218 zu sehen ist.
-
Das Computergerät 200 kann auch eine Tonaufnahmevorrichtung 222 haben, oder in Verbindung dazu stehen, wie z. B. ein Mikrofon oder eine andere existierende oder noch zu entwickelnde Vorrichtung für Tonaufnahmen, die Töne in der Nähe des Computergeräts 200 aufnehmen kann. Die Tonaufnahmevorrichtung 222 kann so positioniert werden, dass es auf den Benutzer gerichtet ist, der das Computergerät 200 betreibt und es kann so konfiguriert werden, dass es Töne empfängt, z. B. Sprache oder andere Äußerungen, die der Benutzer während der Betätigung des Computergerätes 200 verlauten lässt.
-
Obwohl 2 die CPU 202 und den Speicher 204 des Computergeräts 200 als in einer kompakten Einheit integriert dargestellt, können auch andere Konfigurationen verwendet werden. Die Operationen der CPU 202 können auf mehrere Geräte verteilt werden (dabei hat jedes Gerät einen oder mehrere Prozessor(en)), die direkt oder über ein lokales oder sonstiges Netzwerk miteinander verbunden sein können. Der Speicher 204 kann über mehrere Computer, wie z. B. als netzwerkbasierter Speicher oder Speicher in mehreren Computer, die die Vorgänge des Computergeräts 200 ausführen, verteilt sein. Obwohl hier als ein einzelner Bus dargestellt, kann Bus 212 des Computergeräts 200 aus mehreren Bussen zusammengesetzt sein. Weiterhin kann der sekundäre Speicher 214 direkt mit den anderen Komponenten des Computergeräts 200 verbunden werden, oder es kann darauf über ein Netzwerk zugegriffen werden, und er kann eine einzelne integrierte Einheit, wie z. B. eine Speicherkarte oder mehrere Einheiten, wie z. B. mehrere Speicherkarten umfassen. Das Computergerät 200 kann daher in einer großen Vielfalt von Konfigurationen implementiert werden.
-
3 ist ein Diagramm mit einem Beispiel für einen Videostream 300, der kodiert und danach dekodiert werden soll. Der Videostream 300 beinhaltet eine Videosequenz 302. Auf der nächsten Stufe schließt die Videosequenz 302 eine Reihe von angrenzenden Bildern 304 ein. Während drei Einzelbilder als benachbarte Einzelbilder 304 dargestellt sind, kann die Videosequenz 302 eine beliebige Anzahl benachbarter Bilder 304 einschließen. Die angrenzenden Bilder 304 können weiter in einzelne Bilder unterteilt werden, z. B. ein Einzelbild 306. Auf der nächsten Stufe kann das Bild 306 in eine Reihe von Ebenen oder Segmenten 308 aufgeteilt werden. Die Segmente (oder Ebenen) 308 können Untergruppen von Frames sein, die z. B. eine Parallelverarbeitung ermöglichen. Die Segmente 308 können auch Untergruppen von Frames sein, die die Videodaten in unterschiedliche Farben aufteilen können. So kann beispielsweise der Frame 306 mit Farbvideodaten eine Helligkeitsebene und zwei Chrominanzebenen beinhalten. Die Segmente 308 können mit unterschiedlichen Auflösungen ausprobiert werden.
-
Unabhängig davon, ob das Bild 306 in Segmente 308 unterteilt ist oder nicht, kann das Bild 306 des Weiteren in Blöcke 310 unterteilt werden, die Daten enthalten können, die zum Beispiel, 16×16 Pixel in Bild 306 entsprechen. Die Blöcke 310 können auch so geordnet werden, dass sie Daten von einer oder mehreren Ebenen von Pixeldaten enthalten. Die Blöcke 310 können auch jede andere geeignete Größe haben, wie 4×4 Pixel, 8×8 Pixel, 16×8 Pixel, 8×16 Pixel, 16×16 Pixel oder größer. Falls nicht anders vermerkt, werden die Bezeichnungen Block und Makroblock hierin austauschbar genutzt.
-
4 ist ein Blockdiagramm eines Kodierers 400 gemäß einer Implementierung. Wie zuvor beschrieben, kann der Kodierer 400 in der Sendestation 102 umgesetzt werden, beispielsweise durch die Bereitstellung eines im Speicher 204 abgelegten Rechnerprogramms. Das Computerprogramm kann Maschinenbefehle enthalten, die bei Ausführung durch einen Prozessor, wie die CPU 202, die Sendestation 102 dazu veranlassen, Videodaten zu kodieren, wie in 4 und 6, unten gezeigt ist. Der Kodierer 400 kann auch in Form von spezialisierter Hardware umgesetzt werden, die beispielsweise Bestandteil der Sendestation 102 sein kann. Der Kodierer 400 erfüllt die verschiedenen Funktionen auf verschiedenen Stufen in einer Vorwärtsbewegung (anhand der durchgehenden Linien dargestellt) um aus der Eingabe des Videostreams 300 einen kodierten oder komprimierten Bitstream 420 zu produzieren: die Stufe der Inter-/Intra-Vorhersage 402, eine Umwandlungsstufe 404, eine Quantisierungsstufe 406 und eine Kodierungsstudie 408. Der Kodierer 400 kann einen Rekonstruktionspfad enthalten (durch gestrichelte Linien dargestellt), um ein Bild für die Kodierung von nachfolgenden Blöcken zu rekonstruieren. In 4 erfüllt der Kodierer 400 die verschiedenen Funktionen des Rekonstruktionspfades in folgenden Stufen: eine Dequantisierungsstufe 410, eine Stufe der inversen Transformation 412, eine Rekonstruktionsstufe 414 und eine Loop-Filter-Stufe 416. Andere strukturelle Abwandlungen des Kodierers 400 können ebenfalls für die Kodierung des Videostreams 300 zum Einsatz kommen.
-
Wenn der Videostream 300 für die Kodierung bereitgestellt wird, kann jedes Bild 306 in Einheiten von Blöcken verarbeitet werden. Bei der Intra/Inter-Vorhersagestufe 402, kann jeder Block unter Verwendung der Intra-Bild-Vorhersage (auch genannt Intra-Vorhersage) oder Inter-Bild-Vorhersage (auch genannt Inter-Vorhersage) oder durch eine Kombination aus beidem kodiert werden. In jedem Fall kann ein Vorhersageblock geformt werden. Im Fall der Intra-Vorhersage kann ein Teil oder der gesamte Vorhersageblock aus zuvor kodierten und rekonstruierten Abtastwerten des aktuellen Bildes geformt werden. Im Fall der Inter-Vorhersage kann ein Teil oder der gesamte Vorhersageblock aus Abtastwerten in einer oder mehreren zuvor konstruierten Referenzbildfolgen, die unter Verwendung von Bewegungsvektoren bestimmt werden, geformt werden.
-
Danach, weiterhin mit Bezug auf 4 kann der Vorhersageblock vom aktuellen Block auf der Stufe der Intra-/Inter-Vorhersage 402 subtrahiert werden, um einen Restblock zu erzeugen (auch Restbestand genannt). In der Umwandlungsstufe 404 wird der Restbestand in einen Block von Umwandlungs-Koeffizienten transformiert, beispielsweise im Frequenzbereich, der blockbasierte Transformationen verwendet. Solche blockbasierte Transformationen beinhalten, zum Beispiel, die diskrete Kosinustransformation (DCT) und die asymmetrische diskrete Sinustransformation (ADST). Andere blockbasierte Transformationen sind möglich. Außerdem können Kombinationen von unterschiedlichen Transformationen auf einen einzelnen Restblock angewandt werden. In einem Beispiel der Anwendung einer Transformation wandelt das DCT den Restblock in die Frequenzdomain um, in der die Transformation-Koeffizientenwerte auf räumlicher Frequenz basieren. Der Koeffizient mit der niedrigsten Frequenz (DC) oben links auf der Matrix und der Koeffizient mit der höchsten Frequenz unten rechts auf der Matrix. Es sollte anerkannt werden, dass die Größe eines Vorhersageblocks und folglich des sich daraus ergebenden Restblocks sich von der Größe des Transformationsblocks unterscheiden kann. So kann beispielsweise der Vorhersageblock in kleinere Blöcke aufgespalten werden, auf die unterschiedliche Transformationen angewandt werden.
-
Die Quantisierungsstufe 406 wandelt die Transformationskoeffizienten in diskrete Quantenwerte um, die als quantisierte Transformationskoeffizienten, die einen Quantisierungswert oder Quantisierungspegel verwenden, bezeichnet werden. Die Transformationskoeffizienten können zum Beispiel nach dem Quantisierungswert aufgeteilt und verkürzt werden. Die quantisierten Umwandlungs-Koeffizienten werden dann in der Kodierungsstufe 408 entropiekodiert. Die Entropiekodierung kann mit einer Reihe von Techniken, einschließlich Token und Binärbäumen durchgeführt werden. Die entropiecodierten Koeffizienten und anderen Informationen, die zum Dekodieren des Blocks verwendet werden, die die Art der verwendeten Vorhersage, Umwandlungsform, Bewegungsvektoren und Quantisierungswerte beinhalten können, werden an den komprimierten Bitstream 420 ausgegeben. Die Informationen, die benötigt werden, um den Block zu dekodieren, können innerhalb des komprimierten Bitstreams 420 in Block-, Bild-, Scheiben- und/oder Abschnittheader entropiekodiert werden. Der komprimierte Bitstream 420 kann auch als kodierter Videostream oder kodierter Video-Bitstream bezeichnet werden, und die Bezeichnungen werden hierein austauschbar benutzt.
-
Der Rekonstruktionspfad in 4 (durch punktierte Linien dargestellt) kann verwendet werden, um den Kodierer 400 und den Dekodierer 500 (nachfolgend beschrieben) bei der Dekodierung des komprimierten Bitstreams 420 mit den gleichen Referenzbildern zu versorgen. Der Rekonstruktionspfad kann Funktionen ausführen, die denen im nachstehend erläuterten Dekodierungsprozess gleichen, darunter die Dequantisierung der quantisierten Umwandlungs-Koeffizienten in der Dequantisierungsstufe 410 zur Schaffung von dequantisierten Umwandlungs-Koeffizienten und deren anschließende inverse Transformation in der Stufe der inversen Transformation 412 zur Schaffung eines derivativen Restblocks (d. h. eines derivativen Restbestands). In der Rekonstruktionsstufe 414 kann der Vorhersageblock, der in der Stufe der Intra-/Inter-Vorhersage 402 vorhergesagt wurde, zum abgeleiteten Restblock hinzugefügt werden, um einen rekonstruierten Block zu erzeugen. Die Schleifenfilterstufe 416 kann auf den rekonstruierten Block angewendet werden, um Verzerrungen, wie zum Beispiel blockierende Artefakte, zu reduzieren.
-
Andere Variationen des Kodierers 400 können verwendet werden, um den komprimierten Bitstream 420 zu kodieren. So kann beispielsweise ein nichttransformbasierter Kodierer 400 das Restsignal direkt ohne die Transformationsstufe 404 für bestimmte Blocks oder Rahmen quantisieren. In einer anderen Implementierung kann ein Kodierer 400 die Quantisierungsstufe 406 und die Dequantisierungsstufe 410 in einer einzelnen Stufe kombiniert haben.
-
5 ist ein Blockdiagramm eines Dekodierers 500 gemäß einer Implementierung. Der Dekodierer 500 kann Bestandteil der Sendestation 106 sein, beispielsweise durch die Bereitstellung eines im Speicher 204 abgelegten Computerprogramms. Das Computerprogramm kann Maschinenbefehle enthalten, die bei Ausführung durch einen Prozessor, wie die CPU 202, die Empfangsstation 106 dazu veranlassen, Videodaten zu dekodieren, wie in 5 und 8 unten gezeigt ist. Der Decoder 500 kann auch in Hardware implementiert werden, die z. B. in der Sendestation 102 oder in der Empfangsstation 106 eingeschlossen ist.
-
Der Dekodierer 500 hat, ähnlich wie der Rekonstruktionspfad des zuvor beschriebenen Kodierers 400, in einem Beispiel die folgenden Stufen zur Ausführung der verschiedenen Funktionen bei der Erzeugung eines Ausgangsvideostreams 516 aus dem komprimierten Bitstream 420: eine Stufe der Entropiedekodierung 502, eine Dequantisierungsstufe 504, eine Stufe der inversen Transformation 506, eine Intra-/Inter-Vorhersagestufe 508, eine Rekonstruktionsstufe 510, eine Loop-Filter-Stufe 512 und eine Deblocking-Filterstufe 514. Andere strukturelle Variationen des Dekodierers 500 können verwendet werden, um den komprimierten Bitstream 420 zu dekodieren.
-
Wenn der komprimierte Bitstream 420 für die Dekodierung dargestellt wird, können die Datenelemente in dem komprimierten Bitstream 420 durch die Entropiedekodierungsstufe 502 dekodiert werden, um einen Satz quantisierter Transformationskoeffizienten zu produzieren. In der Dequantisierungsstufe 504 werden die quantisierten Umwandlungs-Koeffizienten dequantisiert (z. B. durch Multiplizieren der quantisierten Umwandlungs-Koeffizienten mit dem Quantisierungswert) und in der Stufe der inversen Transformation 506 werden die dequantisierten Umwandlungs-Koeffizienten invers transformiert, um einen derivativen Restbestand zu erzeugen, der identisch mit dem aus der Stufe der inversen Transformation 412 des Dekodierers 400 stammenden Restbestand sein kann. Unter Verwendung von aus dem komprimierten Bitstream 420 dekodierten Headerinformationen kann der Dekodierer 500 in der Intra-/Inter-Vorhersagestufe 508 den gleichen Vorhersageblock erzeugen, wie der Kodierer 400, z. B. in der Intra-/Inter-Vorhersagestufe 402. In der Rekonstruktionsstufe 510 kann der Vorhersageblock zum abgeleiteten Restblock hinzugefügt werden, um einen rekonstruierten Block zu erzeugen. Die Schleifenfilterstufe 512 kann auf den rekonstruierten Block angewendet werden, um blockierende Artefakte zu reduzieren. Andere Filterverfahren können auf den rekonstruierten Block angewendet werden. In diesem Beispiel wird die Deblockierungsfiltereinheit 514 auf den rekonstruierten Block angewandt, um die Blockierungsverzerrung zu reduzieren und das Ergebnis wird als Ausgabevideostream 516 ausgegeben. Der Ausgangsvideostream 516 kann auch als dekodierter Videostream bezeichnet werden, und die Bezeichnungen werden hierein austauschbar benutzt.
-
Andere Variationen des Dekodierers 500 können verwendet werden, um den komprimierten Bitstream 420 zu dekodieren. So kann beispielsweise der Dekodierer 500 den Ausgangsvideostream 516 ohne die Deblockierungsfilterstufe 514 erzeugen.
-
Wie weiter oben erwähnt, kann ein Block durch Bewegungsvektor-Vorhersage des Kodiermodus eines dynamischen Referenz-Bewegungsvektors kodiert oder dekodiert werden. Eine Implementierung für die Verwendung des dynamischen Referenz-Bewegungsvektor Kodiermodus zum Kodieren und Dekodieren wird als Nächstes abgehandelt.
-
6 ist ein Flussdiagramm, das einen Prozess 600 zum Kodieren eines Videostreams unter Verwendung von Referenz-Bewegungsvektoren gemäß einer Implementierung dieser Offenbarung zeigt. Prozess 600 kann in einem Kodierer wie zum Beispiel Kodierer 400 implementiert werden und kann zum Beispiel als Softwareprogramm, das von Computergeräten wie zum Beispiel Übertragungsstation 102 oder Empfangsstation 106 ausgeführt wird, implementiert werden. Das Softwareprogramm kann computerlesbare Anweisungen enthalten, die in einem Speicher wie dem Speicher 204 oder 214 gespeichert werden, der bei Ausführung durch einen Prozessor wie durch die CPU 202, das Computergerät zur Ausführung des Prozesses 600 veranlasst.
-
Der Prozess 600 kann unter Verwendung spezieller Hardware oder Firmware implementiert werden. Einige Computergeräte können mehrere Speicher, mehrere Prozessoren, oder beides haben. Die Schritte oder Tätigkeiten des Prozesses 600 können auf unterschiedliche Prozessoren, Speicher oder beides aufgeteilt werden. Die Verwendung der Begriffe „Prozessor“ oder „Speicher“ im Singular umfasst hier Computergeräte, die einen Prozessor oder einen Speicher haben, sowie Geräte, die mehrere Prozessoren oder Speicher haben, die jeweils jedes bei der Ausführung von einigen, aber nicht notwendigerweise allen aufgeführten Schritten verwendet werden können. Der Einfachheit halber wird der Prozess 600 als eine Reihe von Schritten oder Tätigkeiten dargestellt und beschrieben. Jedoch können die Lehren gemäß dieser Offenbarung in verschiedenen Reihenfolgen und/oder gleichzeitig auftreten. Außerdem können die Schritte gemäß dieser Offenbarung mit anderen Schritten auftreten, die hier nicht dargestellt und beschrieben werden. Darüber hinaus können nicht alle illustrierten Schritte oder Tätigkeiten erforderlich sein, um ein Verfahren in Übereinstimmung mit dem offenbarten Gegenstand zu implementieren.
-
Der Prozess 600 nimmt an, dass ein Stream mit Videodaten mit mehreren Bildern mit jeweils mehreren Blocks, unter Verwendung eines Videokodierers wie zum Beispiel der Kodierer 400, der auf einem Computergerät wie zum Beispiel der Übertragungsstation 102 arbeitet, ausgeführt wird. Die Videodaten oder der Stream können vom Computergerät in einer Reihe von Weisen, wie zum Beispiel durch Empfangen der Videodaten über ein Netzwerk, über ein Kabel oder durch Lesen der Videodaten von einem Primärspeicher oder einem anderen Speichergerät, einschließlich einer Festplatte oder entfernbaren Medien, wie zum Beispiel eine CompactFlash(CF)-Karte, Secure Digital(SD)-Karte, oder allen anderen Geräten, die in der Lage sind, Videodaten zu kommunizieren, empfangen werden. In einigen Ausführungen können Videodaten von einer Videokamera, die mit dem Computergerät, auf dem der Kodierer läuft, verbunden ist, empfangen werden. Mindestens einige der Blöcke innerhalb der Bilder sind kodiert unter Verwendung von Inter-Vorhersage wie weiter unten detaillierter beschrieben wird.
-
Bei 602 identifiziert der Prozess 600 Bewegungsvektorkandidaten von zuvor kodierten Blöcke im Videostream. Der Prozess 600 analysiert die Bewegungsaktivität von zuvor kodierten Blöcken, um eine Liste der gereihten Bewegungsvektorkandidaten unter Verwendung eines effizienten Ranking-Systems für Referenz-Bewegungsvektoren zu erstellen und bietet eine dynamische Bewegungs-Referenziermethode, die die verfügbare Kandidatenliste der Bewegungsvektoren vollständig wiedergibt, wodurch die Anzahl der Referenz-Bewegungsvektor-Modi dynamisch erweitert oder reduziert werden kann und die Effizienz der Entropie-Kodierung verbessert wird. Der Pool der Bewegungsvektorkandidaten kann dynamisch gemäß dem Zustand des benachbarten Referenzblocks, d. h. wie die Liste der Bewegungsvektorkandidaten erstellt ist, erweitert oder reduziert werden. Die zuvor kodierten Blöcke im Videostream können jeden Block, der unter Verwendung von Inter-Vorhersage vor dem aktuellen Block kodiert wurde, beinhalten wie zum Beispiel ein Block eines zuvor kodierten Bildes oder ein Block desselben Bildes wie der aktuelle Block, der vor dem aktuellen Block kodiert wurde. In einigen Kodier-/Dekodier(Codec)-Schemata, wie zum Beispiel jenen, bei denen in Raster-Scan-Reihenfolge kodiert wird, können die zuvor kodierten Blöcke zum Beispiel einen Block darüber, links oder darüber-links vom aktuellen Block in demselben Bild beinhalten. Die zuvor kodierten Blöcke können zum Beispiel auch einen Block vom unmittelbar vorherigen Bild (d. h. vom letzten Bild), einen Block vom goldenen Bild (beschrieben in Intra/Inter-Prädiktionsstufe 402), einen Block von einem beliebigen anderen Referenzbild oder einer beliebigen Kombination davon beinhalten. Wünschenswerterweise werden jedoch die Bewegungsvektorkandidaten von zuvor kodierten Blöcken, die in gewisser Weise dem aktuellen Block entsprechen entnommen, basierend auf der Theorie, dass solche Blöcke, wegen der Nähe ihrer Pixel zum aktuellen Block, wahrscheinlich ähnliche Bewegungseigenschaften haben wie der aktuelle Block.
-
Blöcke können von einem einzelnen Referenzbild oder von zusammengesetzten, wie zum Beispiel zwei Referenzbildern vorhergesagt werden. Für Blöcke mit einem einzelnen Referenzbild identifiziert der Prozess 600 Bewegungsvektorkandidaten von den nächsten räumlich benachbarten Blöcken, die mit dem Referenzbild verbunden sind. Die Bewegungsvektorkandidaten können die Bewegungsvektor Referenz-Blöcke innerhalb eines Referenz-Abdeckungsbereichs, wie zum Beispiel den/die Bewegungsvektor(en) eines Grenzbereichs (z. B. eines Blocks) über dem aktuellen Block, den/die Bewegungsvektor(en) eines Grenzbereichs (z. B. eines Blocks) links vom aktuellen Block, den Bewegungsvektor von einer Ecke oben rechts des aktuellen Blocks und den/die Bewegungsvektor(en) von einem gemeinsam genutzten Block im vorherigen Bild beinhalten. In bestimmten Implementierungen werden Bewegungsvektoren, die Blöcken unten und rechts vom gemeinsam genutzten Block zugeordnet sind, berücksichtigt.
-
Dieser erste Schritt bei der Konstruktion einer Kandidatenliste für Referenz-Bewegungsvektoren wird in Bezugnahme auf 7 beschrieben. Das heißt, 7 ist ein Diagramm einer Sequenz von Bildern, die verwendet werden, um die Identifikation von Bewegungsvektorkandidaten von 602 innerhalb des Prozess 600 von 6 zu erklären. Der aktuelle Block B, der kodiert wird, ist innerhalb des aktuellen Bildes N positioniert. Bild N-1 ist das vorhergehende Bild, auch zeitlich benachbartes Bild genannt, das ein rekonstruiertes, in einem sogenannten letzten Referenzbildspeicher gespeichertes Bild sein kann, das für das Kodieren von Blöcken des Bildes N verfügbar ist. In diesem Fall ist Block R3 der gemeinsam genutzte Block zum aktuellen Block B und er ist an derselben Pixelposition (normalerweise gemessen vom Pixel links oben) positioniert und hat dieselbe Pixelgröße in der x- und y-Ebene (d. h. dieselben Pixelkoordinaten) innerhalb des Bildes N-1 wie der aktuelle Block B innerhalb von Bild N. Anders ausgedrückt entspricht der Block R3 räumlich dem aktuellen Block B. In einem Einzelreferenzmodus, d. h. wenn der aktuelle Block B mit Inter-Vorhersage unter Verwendung eines einzelnen Referenzbildes vorhergesagt ist, ist der Puffer der Bewegungsvektorkandidaten mit dem Referenzbild verbunden. Im Hinblick auf den Referenzbildindex kann eine Suche nach Bewegungsvektoren, die mit demselben Referenzbild verbunden sind, durch die in 7 für die Einschließung in die Kandidatenliste dargestellten Referenz-Blöcke erfolgen.
-
Die Blöcke B und R3 haben eine beliebige Blockgröße. Die Blöcke B und R3 können zum Beispiel jeweils 32x32 Pixel umfassen. Wie weiter oben erwähnt, kann jedes Bild für die Kodierung in Blöcke aufgeteilt werden. Diese Blöcke können für Kodierzwecke weiter in kleinere Blöcke unterteilt werden. Aus diesem Grund kann jeder Block oder jeder benachbarte Bereich des aktuellen Blocks B in kleinere Blöcke, die durch unterschiedliche Bewegungsvektoren vorhergesagt werden, aufgeteilt sein. Daher kann die Suche nach Bewegungsvektoren dies durch Feststellen der Bewegungsinformationen für die kleinstmögliche Vorhersageblockgröße innerhalb eines Bildes berücksichtigen. Im dargestellten Beispiel erfolgt die Suche nach Bewegungsvektoren im aktuellen Bild unter Verwendung der Bewegungsinformationen einer Grenzregion der obersten Reihe, auch Block R0 genannt, einer Grenzregion der linken Spalte, auch Block R1 genannt, und der Ecke oben rechts, auch Call Block R2. Die Blöcke R0 und R1 sind Bereiche, deren Größe (Abmessungen) von der Größe des aktuellen Blocks B abhängt. In einigen Fällen haben die Blöcke RO und R1 dieselbe Größe wie der aktuelle Block B, aber sie können auch halb so groß sein wie der aktuelle Block B oder auf andere Weise von der Größe des aktuellen Blocks B abhängen. In jedem Fall kann jeder Pixel-Unterblock, z. B. der, der die kleinste Vorhersageblockgröße innerhalb der Blöcke R0 und R1 hat, nach Bewegungsvektorkandidaten durchsucht werden. Die kleinste Vorhersageblockgröße kann zum Beispiel 8×8 oder 4×4 betragen. Der Block R2 ist wünschenswerterweise die kleinste Vorhersageblockgröße, um die Suche zu minimieren und weil entferntere Blöcke wahrscheinlich weniger relevante Informationen liefern werden. Wäre der Block R2 die kleinste Vorhersageblockgröße, dann hätte der Block R2 nur einen Bewegungsvektor (oder zwei bei kombinierter Vorhersage). In einer Implementierung kann der Block R2 größer sein.
-
Die Suche nach Bewegungsvektoren in dem letzten Bild erfolgt unter Verwendung von Bewegungsinformationen des gemeinsam genutzten Blocks R3 und der zusätzlichen Referenz-Blöcke R4, R5, R6 und R7, benachbart zur unteren Reihe (Blöcke R6, R7), der rechten Spalte (R4) oder beider (R5). Das heißt, sie sind alle proximal zu (z. B. in Kontakt mit) einer Ecke des gemeinsam genutzten Blocks. Wie erwähnt hat der gemeinsam genutzte Block R3 dieselbe Größe wie der aktuelle Block. In jedem Unterblock der kleinsten Vorhersageblockgröße innerhalb des gemeinsam genutzten Blocks R3, kann nach Bewegungsvektorkandidaten gescannt oder gesucht werden. Im dargestellten Beispiel haben die zusätzlichen Referenz-Blöcke R4, R5, R6 und R7 jeweils die kleinste Vorhersageblockgröße ungeachtet der Größe des aktuellen Blocks B, aber das ist nicht erforderlich.
-
Zurükkehrend zu 6 können die Referenz-Bewegungsvektoren, sobald sie bei 602 erhalten wurden, nach der Distanz vom entsprechenden Referenzblock und seiner überlappenden Länge mit dem aktuellen Block bei 604 gereiht werden. Anders ausgedrückt kann der Prozess 600 für jeden Bewegungsvektorkandidaten eine Distanz zwischen dem zuvor kodierten Block, der dem Bewegungsvektorkandidaten zugeordnet ist, und dem aktuellen Block feststellen. Die Bewegungsvektoren von den nächsten Zeilen- und Spaltengrenzen und von der rechten oberen Ecke zum aktuellen Block sind in Kontakt mit dem aktuellen Block und können als relevanter betrachtet werden, daher sind sie höher eingestuft als die weiter entfernten. Die Distanz kann verwendet werden, um die Bewegungsvektoren in Kategorien zu gruppieren. Zum Beispiel, und mit Bezug auf 7 können alle Bewegungsvektoren der Unterblöcke der Referenz-Blöcke R0 und R1 und ein Bewegungsvektor des Referenzblocks R2, falls zutreffend, als Bewegungsvektorkandidaten der Kategorie 1 betrachtet werden, während die restlichen Bewegungsvektorkandidaten der Blöcke R3 bis R7 und aller anderen Unterblöcke der Referenz-Blöcke R0 und R1 als Bewegungsvektorkandidaten der Kategorie 2 gelten. In diesem Fall würden die Bewegungsvektorkandidaten der Kategorie 1 eine höhere Priorität annehmen als die Bewegungsvektorkandidaten der Kategorie 2. Die Distanz kann zusätzlich oder alternativ die Berechnung einer Distanz in gerader Linie zwischen den Zentren des aktuellen Blocks und jedem der Referenz-Blöcke und/oder Unterblöcke der Referenz-Blöcke beinhalten. Die Distanz zwischen dem Referenzblock und dem aktuellen Block kann auf der räumlichen Verschiebung zwischen den Pixeln in dem zuvor kodierten Block und den gemeinsam genutzten Pixeln im aktuellen Block, gemessen in Pixeln basierend. In diesen letzteren Beispielen kann ein gemeinsam genutzter Block höher gereiht sein als Referenz-Blöcke in einem aktuellen Bild (z. B. weil die Differenz/Verschiebung Null ist), selbst wenn Beliebtheitswerte berücksichtigt werden. Andere Wege der Gruppierung und/oder Ranking der Bewegungsvektoren basierend auf der Distanz sind möglich.
-
Wenn die Bewegungsvektoren nach Kategorie gruppiert sind, können innerhalb jeder Kategorie die Bewegungsvektoren gemäß der Pixelanzahl innerhalb des Suchbereichs (z. B. die zuvor kodierten Pixel von mindestens einigen der Referenz-Blöcke) die jeden Bewegungsvektor verwenden, gereiht werden. Der Prozess 600 kann zum Beispiel einen Beliebtheitswert basierend auf den zuvor kodierten Pixelwerten, die dem bestimmten Bewegungsvektorkandidaten bei 606 zugeordnet sind, feststellen. Je größer die Anzahl an zuvor kodierten Pixelwerten verbunden mit dem Bewegungsvektorkandidaten ist, desto größer ist der Beliebtheitswert des Bewegungsvektorkandidaten. Der Beliebtheitswert kann zum Beispiel eine Pixelanzahl oder ein Prozentwert der Gesamtpixelanzahl innerhalb aller oder einiger der Referenz-Blöcke sein.
-
Dies kann mit Bezug auf das Beispiel von 7 unter der Annahme, dass der aktuelle Block B und der gemeinsam genutzte Block R3, jeweils 32x32 Pixel umfassen, der Referenzblock R0 und der Referenzblock R1 jeweils 32×16 und 16×32 Pixel umfassen und die Referenz-Blöcke R2 und R4-R7 beide 8×8 Pixel umfassen, was auch der kleinsten Vorhersageblockgröße entspricht, beschrieben werden. In diesem Fall könnten bis zu neun Bewegungsvektorkandidaten mit einem Referenzbild verbunden und Kategorie 1 zugeordnet sein, vier für die 8×8-Unterblöcke der Referenz-Blöcke R0 und R1, die dem aktuellen Block B benachbart sind und einer vom 8×8-Referenzblock R2. Es könnte bis zu achtundzwanzig Bewegungsvektoren verbunden mit dem Referenzbild geben, die Kategorie 2 zugeordnet sind, vier für die verbleibenden 8×8-Unterblöcke der Referenz-Blöcke R0 und R1, sechzehn vom gemeinsam genutzten Block R3 und einer von den zusätzlichen vier 8×8-Referenzblöcken R4-R7. In Wirklichkeit werden Bewegungsvektoren oft wiederverwendet. Jedem der einmaligen Bewegungsvektoren innerhalb einer Kategorie von all diesen identifizierten wird ein Beliebtheitswert entsprechend jeder der Gruppen von 8×8 Pixel (das heißt, 64 Pixel) unter Verwendung dieses Bewegungsvektors zugeschrieben. Beim Feststellen, ob ein Bewegungsvektor, der bei 602 identifiziert wurde, einmalig ist, muss der Bewegungsvektor nicht mit einem anderen identisch sein. Bereiche können verwendet werden. um eine Kandidatenliste für Bewegungsvektoren zu liefern, die ausreichend hilfreiche Variationen liefert. Das heißt, ein Bewegungsvektor kann innerhalb einer Kategorie ausgelassen werden, wenn er sich nicht genug von einem Bewegungsvektorkandidaten, der bereits in einer Kategorie vorhanden ist, zum Beispiel um 10% oder eine andere Variable, unterscheidet. In dieser Implementierung werden die Bewegungsvektoren nach Kategorien gereiht und dann innerhalb der Kategorien, aber das ist nicht erforderlich. Die Bewegungsvektorkanditaten können für das Ranking basierend auf dem Beliebtheitswert gruppiert werden.
-
Die Kandidatenliste der Referenz-Bewegungsvektoren kann wie beschrieben für jedes einmalige Referenzbild verbunden mit einem zuvor kodierten Block oder Unterblock konstruiert werden. Für jedes der oben beschriebenen Bilder können zum Beispiel drei Referenzbilder ein letztes Bild, ein alternatives (oder alternativ oder alt) Referenzbild und ein goldenes Referenzbild verfügbar sein. In diesem Fall können separate Kandidatenlisten für Referenz-Bewegungsvektoren unter Verwendung dieser zuvor kodierten Blöcke oder Unterblöcke, die Bewegungsvektoren besitzen, die auf das letzte Bild, das alternative Referenzbild und das goldene Referenzbild zeigen, erstellt werden. Das letzte Bild wird für jedes Bild aktualisiert und das alternative Referenzbild und das goldene Referenzbild können weniger oft aktualisiert werden.
-
In einigen Implementierungen wird die Skalierung des Bewegungsvektors durchgeführt, wenn eine Kandidatenliste der Referenz-Bewegungsvektoren erstellt wird. Das Skalieren des Bewegungsvektors kann als Teil der Bestimmung eines Beliebtheitswerts bei 606 erfolgen, oder an anderen Stellen im Prozess 600. Beim Skalieren des Bewegungsvektors wird die Magnitude eines Bewegungsvektors an die zeitlichen Unterschiede zwischen Referenzbildern relativ zum beobachteten Bild innerhalb der Sequenz von Bildern im Videostream angepasst. Zum Beispiel, und mit Bezug auf 7 verwendet der Referenzblock R2 das letzte Bild, nämlich Bild N-1, für die Inter-Vorhersage, während der Referenzblock R4 das letzte Bild, nämlich das Bild vor Bild N-1 (oder Bild N-2, nicht dargestellt), für die Inter-Vorhersage verwendet. Die zeitliche Differenz zwischen dem Bild, in dem jeder Block R2 und R4 positioniert ist (Bild N bzw. Bild N-1) und das entsprechende Referenzbild (Bild N-1 bzw. Bild N-2) ist ein Bild, daher ist kein Skalieren angezeigt. Wenn im Gegensatz dazu die Referenz-Blöcke R2 und R4 beide das goldene Referenzbild verwenden, ist der zeitliche Unterschied zwischen Bild N und dem goldenen Referenzbild und zwischen dem Bild N-1 und dem goldenen Referenzbild unterschiedlich, während das goldene Referenzbild unverändert ist. Ein Bewegungsvektorkandidat kann durch Vergrößerung der Magnitude des Bewegungsvektors verbunden mit dem kürzeren zeitlichen Unterschied oder dem Verkleinern der Magnitude des Bewegungsvektors verbunden mit dem längeren zeitlichen Unterschied generiert werden, sodass die Bewegungsvektoren eine gemeinsame Basis haben. Der für das Skalieren verwendete Faktor kann auf dem Verhältnis zwischen den zeitlichen Unterschieden basieren.
-
Das Skalieren des Bewegungsvektors kann auch in Implementierungen verwendet werden, in denen nur eine Kandidatenliste für Referenz-Bewegungsvektoren für alle Referenzbilder erstellt wird und keine separaten Listen für jedes Referenzbild. Referenzbilder können entweder vor oder nach dem aktuellen Bild in der Videosequenz positioniert werden. In einigen Implementierungen wird das Skalieren der Bewegungsvektoren weggelassen.
-
Bislang wird die Erstellung von Kandidatenlisten für einen einzelnen Referenzmodus, bei dem nur ein Referenzbild (und daher normalerweise ein Bewegungsvektor mit dem einen Referenzbild verbunden ist) für Inter-Vorhersage verwendet. In einigen Fällen jedoch kann ein Block von zwei oder mehr Referenzbildern vorhergesagt werden, wenn die Pixelwerte Kombinationen der Pixelwerte von Vorhersage-Blöcken innerhalb jedes Bildes, das von den entsprechenden Bewegungsvektoren generiert wurde, sind. In Bezug auf einen zusammengesetzten Referenzmodus für die Vorhersage des aktuellen Blocks wird die Liste aufgebaut, indem zuerst nach benachbarten Blöcken, die dieselben zusammengesetzten Referenzbilder (d. h. dieselbe Kombination von Referenzbildern) für ihre Referenz-Bewegungsvektoren verwenden, gesucht wird. Bewegungsvektorkandidaten von benachbarten Referenz-Blöcken, die dieselbe Kombination von Referenzbildern haben wie die, die für den aktuellen Block betrachtet werden, wird eine höhere Priorität zugewiesen. Die Bewegungsvektoren können auch vom höchsten zum niedrigsten Beliebtheitswert gereiht werden. Wenn die resultierende Kandidatenliste eine Länge hat, die kürzer ist als eine definierte Anzahl, zum Beispiel zwei, kann die Liste an die Kombinationen von Referenz-Bewegungsvektoren einzelner Referenzbilder, die wie zuvor beschrieben identifiziert und gereiht werden, angefügt werden. Wenn zum Beispiel ein zusammengesetzter Referenzmodus, der das letzte Bild und das alternative Referenzbild verwendet, betrachtet wird, werden die Referenz-Blöcke nach Bewegungsvektoren, die sich entweder auf das letzte Bild oder das alternative Referenzbild beziehen, durchsucht und diese werden dann basierend auf dem Beliebtheitswert wie abgehandelt, gereiht.
-
Unter erneuter Bezugnahme auf 6 und wie bereits dargelegt, beinhaltet die Bestimmung des Beliebtheitswerts bei 608 das Ranking der Bewegungsvektoren unter Verwendung des Beliebtheitswerts. Sie kann auch die Zuweisung der Bewegungsvektoren zu Inter-Coding(oder Inter-Vorhersage)-Modi basierend auf dem Ranking beinhalten. Der populärste Bewegungsvektor kann für einen Inter-Vorhersage-Modus, der eine Differentialcodierung eines neuen Bewegungsvektors beinhaltet, ausgewählt werden. Dieser kann als NEWMV-Modus bezeichnet werden. Dann können die restlichen Bewegungsvektoren gemäß dem Ranking-Ergebnis anderen Bewegungsmodi der Referenz-Vektoren zugeordnet werden. In einigen Implementierungen ist ein REFMV-Modus ein dynamischer Kodierungsmodus für den Referenz-Bewegungsvektor, der mindestens zwei Modi, bei denen mindestens ein existierender Bewegungsvektor wiederverwendet wird, beinhaltet. In einem Beispiel sind diese beiden Inter-Vorhersage-Modi ein NEARESTMV-Modus und ein NEARMV-Modus. Der nächste Bewegungsvektor beim Ranking nach dem Vektor, der dem NEWMV-Modus zugeordnet ist (d. h. der Bewegungsvektor mit dem zweithöchsten Beliebtheitswert) wird dem NEARESTMV-Modus zugeordnet und der nächste Bewegungsvektor danach (d. h. der Bewegungsvektor mit dem dritthöchsten Beliebtheitswert) wird dem NEARMV-Modus zugeordnet. Wenn die Kandidatenliste der Referenz-Bewegungsvektoren für ein bestimmtes Referenzbild länger als zwei ist, kann die Anzahl an Referenz-Bewegungsvektormodi erweitert werden, um die restlichen Einträge in die Liste aufzunehmen. Ein anderer verfügbarer Inter-Vorhersage-Modus kann ein ZEROMV-Modus sein, das bedeutet, dass keine Bewegung existiert.
-
Bei 608 wird ein Inter-Vorhersage-Modus für den aktuellen Block gewählt. Das kann das Testen aller Inter-Vorhersage-Modi und die Auswahl des Inter-Vorhersage-Modus, der zur effizientesten Kodierung des aktuellen Blocks führt, beinhalten. Der Prozess 600 kann zum Beispiel ein Teil einer Raten-Verzerrungsschleife sein, die verwendet wird, um den Inter-Vorhersage-Modus für den aktuell zu kodierenden Block auszuwählen. Als Teil der Raten-Verzerrungsschleife kann ein aktueller Bewegungsvektor für die Inter-Vorhersage des aktuellen Blocks durch eine Bewegungssuche gemäß einer beliebigen Anzahl an Bewegungssuchtechniken bestimmt werden. Für jedes Referenzbild kann eine Verwendung des Referenz-Bewegungsvektors die Verwendung des Referenz-Bewegungsvektors, der dem NEWMV-Modus zugeordnet ist, beinhalten, oder einen der anderen identifizierten Bewegungsvektorkandidaten als Startparameter für den Bewegungssuchalgorithmus, basierend auf der Überlegung, dass der aktuelle Bewegungsvektor wahrscheinlich in der Nähe der höher gereihten Bewegungsvektoren für das Referenzbild ist. Kombinationen von Referenzbildern in einem zusammengesetzten Vorhersage-Modus können ebenso unter Verwendung von Bewegungsvektoren von der Kandidatenliste gesucht werden, vor allem jene, die für jedes Referenzbild am höchsten bewertet sind.
-
Bewegungssuchen können alternativ durchgeführt werden, ohne Verwendung von Bewegungsvektoren von der Kandidatenliste. Unabhängig davon, ob ein Referenz-Bewegungsvektor in der Bewegungssuche verwendet wird, können verschiedene Inter-Vorhersage-Modi getestet werden. In einer Implementierung, eine erschöpfende Bewegungssuche, die jede der verfügbaren Inter-Vorhersage-Modi unter Verwendung einzelner oder zusammengesetzter Modi versucht (d. h. unter Verwendung jedes der drei Referenzbilder und der Kombinationen von Referenzbildern). Für jeden vorgeschlagenen Bewegungsvektor und für jeden getesteten Inter-Vorhersage-Modus, werden die Bitkosten (auch als Rate bezeichnet) für das Kodieren des aktuellen Blocks unter Verwendung des Inter-Vorhersage-Modus, einschließlich der Bits, die nötig sind, um den Inter-Vorhersage-Modus anzuzeigen, das/die Referenzbild(er), das/die der Restwertblock vom aktuellen Block generiert hat, und, wenn nötig, ein oder mehrere Bewegungsvektor(en) oder Differenzial-Bewegungsvektor(en) und der resultierende Fehler in den Pixelwerten zwischen den Originalwerten und den rekonstruierten Werten (auch Verzerrung genannt) berechnet. Der Inter-Vorhersage-Modus und das/die Referenzbild(er), die zum niedrigsten Raten-Verzerrungs-Wert führen (auch Verhältnis genannt) kann als Inter-Vorhersage-Modus für den aktuellen Block bei 608 ausgewählt werden.
-
Eine erschöpfende Suche muss nicht durchgeführt werden. Verschiedene Techniken können verwendet werden, um den Rechenaufwand zu reduzieren. Die Inter-Vorhersage-Modi, die für benachbarte Blöcke in den Bildern verwendet werden, können zum Beispiel zuerst getestet werden und dann können nur bestimmte Inter-Vorhersage-Modi getestet werden, um zu sehen, ob das zu einem verbesserten Raten-Verzerrungs-Verhältnis führt. Außerdem gilt die Bewegungssuche für die Inter-Vorhersage. Die Raten-Verzerrungsschleife kann Tests für verschiedene Intra-Vorhersage-Modi beinhalten, oder es kann eine separate Raten-Verzerrungsschleife verwendet werden, um den effizientestes Intra-Vorhersage-Modus aus den verfügbaren Intra-Vorhersage-Modi auszuwählen. Dann werden der effizienteste Inter-Vorhersage-Modus und der effizienteste Intra-Vorhersage-Modus verglichen, um den Vorhersage-Modus für den Block auszuwählen.
-
Unter der Annahme, dass der bei 608 gewählte Inter-Vorhersage-Modus besser ist als die verfügbaren Intra-Vorhersage-Modi, wird der aktuelle Block bei 610 unter Verwendung des Inter-Vorhersage-Modus kodiert. Wenn zum Beispiel der NEWMV-Modus verwendet wird, um den aktuellen Block zu kodieren, wird der vorhergesagte Block unter Verwendung des/der aktuellen Bewegungsvektors/en der Bewegungssuche und des/ der gewählten Referenzbild(er) generiert. Dann wird der Restwert zwischen dem aktuellen Block und dem vorhergesagten Block wie in Bezugnahme auf 4 beschrieben, generiert und kodiert. Der/Die Bewegungsvektor(en), die dem NEWMV-Modus durch das Ranking zugeordnet sind, kann/ können verwendet werden, um den/die aktuellen Bewegungsvektor(en) differentiell zu kodieren. Es kann zum Beispiel ein Differenzwert oder Restwert durch Subtrahieren eines Referenz-Bewegungsvektors von einem Bewegungsvektor verwendet werden, um den aktuellen Block zu kodieren. Der Differenzwert kann kodiert und in den Videostream eingeschlossen werden. Zusätzlich, können Bits, die das/die Referenzbild(er) angeben, sowie dass der NEWMV-Modus verwendet wurde, im Blockheader und/oder in einem Bild- oder Scheibenheader angegeben werden.
-
In einem anderen Beispiel mit einem einzelnen Referenzbild resultiert die Bewegungssuche darin, dass der Bewegungsvektor gleich ist oder innerhalb eines Wertebereichs über einen der Referenz-Bewegungsvektoren, die einem Referenz-Bewegungsvektormodus zugeordnet sind, liegt. In diesem Fall ist der REFMV Inter-Vorhersage-Modus angezeigt. Wenn der aus der Suche resultierende Bewegungsvektor gleich ist oder innerhalb eines Wertbereichs über dem Referenz-Bewegungsvektor, der dem NEARMV-Modus in diesem Beispiel zugeordnet ist, liegt, wird der vorhergesagte Block unter Verwendung des Referenz-Bewegungsvektors, der dem NEARMV-Modus und dem gewählten Referenzbild zugeordnet ist, generiert. Dann wird der Restwert zwischen dem aktuellen Block und dem vorhergesagten Block wie in Bezugnahme auf 4 beschrieben, generiert und kodiert. Zusätzlich können Bits, die das Referenzbild angeben, und dass der REFMV-Modus und vor allem der NEARMV-Modus verwendet wurden, im Blockheader und/oder in einem Bild- oder Scheibenheader angegeben werden.
-
Die restlichen Inter-Vorhersage-Modi können ebenso verwendet werden, um den aktuellen Block zu kodieren, wenn dies bei 608 gewählt wurde, oder um andere Blöcke der Bilder innerhalb einer Videosequenz zu kodieren. Der Prozess 600 von 6 kann wenn nötig wiederholt werden.
-
Wie erwähnt in Bezug auf die Tätigkeit des Kodierers 400 von 4 kann das Kodieren des aktuellen Blocks Entropie-Kodierung beinhalten. Die Entropie-Kodierung der Inter-Vorhersage-Modi kann geändert werden, um die neuen dynamischen Referenz-Bewegungsvektormodi zu berücksichtigen. Unter der Annahme von drei Inter-Vorhersage-Modi, die einem neuen Bewegungsvektor, einem Null Bewegungsvektor und einem dynamischen Referenz-Bewegungsvektor-Modus, entsprechen, in diesem Beispiel der NEWMV-Modus, der ZEROMV-Modus bzw. der REFMV-Modus, startet die Entropie-Kodierung mit dem NEWMV-Modus. Das heißt, unter der Annahme, dass der aktuelle Block unter Verwendung des NEWMV-Modus kodiert wird, kann das Wahrscheinlichkeitsmodell abhängig von zwei Gegebenheiten ausgewählt werden: 1) Wie viele Referenz-Bewegungsvektoren gefunden werden; und 2) Wenn benachbarte Blöcke mit einem passenden Referenzbild gefunden werden, wie wahrscheinlich es ist, dass diese mit dem NEWMV-Modus kodiert werden sollen.
-
Wenn der nächste Kodiermodus nicht der NEWMV-Modus ist, wird die Kodierung fortgesetzt, wenn der nächste Kodiermodus der ZEROMV-Modus ist. In diesem Fall kann das Wahrscheinlichkeitsmodell abhängig von zwei Gegebenheiten ausgewählt werden: 1) Wenn der gemeinsam genutzte Block im letzten (oder vorherigen) Bild unter Verwendung eines Null-Bewegungsvektors oder eines Bewegungsvektors nahe Null (d. h. weniger als ein ganzes Pixel in Zeilen- und Spaltenkomponenten); und 2) ob (und wenn möglich wie viele der) räumlich benachbarten Blöcke innerhalb des aktuellen Bildes Null-Bewegungsvektoren oder Bewegungsvektoren nahe Null verwenden.
-
Wenn stattdessen der nächste Kodiermodus nicht der ZEROMV-Modus ist (d. h. der dynamische Referenz-Bewegungsvektor-Modus, der vom REFMV-Modus identifiziert wird), wird zwischen den Referenz-Bewegungsvektoren wie oben abgehandelt, eine Entscheidung getroffen. Der zugeordnete Kontext ist, wie viele Referenz-Bewegungsvektoren in die Kandidatenliste eingeschlossen werden und, wenn zutreffend, ihre Gewichtungskoeffizienten, die für die zusammengesetzte Vorhersage verwendet werden.
-
8 ist ein Flussdiagramm eines Prozesses 800 zum Dekodieren eines kodierten Videostreams unter Verwendung von Referenz-Bewegungsvektoren gemäß Implementierungen dieser Offenbarung. Der Prozess 800 kann zum Beispiel als Softwareprogramm, das durch Computergeräte wie zum Beispiel die Übertragungsstation 102 oder die Empfangsstation 106 ausgeführt werden kann, implementiert werden. Das Softwareprogramm kann zum Beispiel maschinenlesbare Anweisungen, die in einem Speicher wie zum Beispiel Speicher 204 oder 214 gespeichert werden können, und die, wenn sie von einem Prozessor, wie zum Beispiel CPU 202 ausgeführt werden, das Computergerät veranlassen können, den Prozess 800 durchzuführen, beinhalten. Der Prozess 800 kann unter Verwendung spezieller Hardware oder Firmware implementiert werden. Wie zuvor erläutert, können einige Computergeräte mehrere Speicher oder Prozessoren haben und die im Prozess 800 beschriebenen Tätigkeiten können unter Verwendung mehrerer Prozessoren, Speicher, oder von beidem, verbreitet werden.
-
Zur Vereinfachung der Erläuterung gilt, dass der Prozess 800 als eine Reihe von Schritten oder Tätigkeiten dargestellt und beschrieben wird. Die Schritte oder Tätigkeiten gemäß dieser Offenbarung können in verschiedenen Reihenfolgen und/oder gleichzeitig stattfinden. Zusätzlich können andere Schritte und Tätigkeiten, die hier nicht explizit dargestellt und beschrieben sind, auftreten. Darüber hinaus können nicht alle illustrierten Schritte oder Tätigkeiten erforderlich sein, um ein Verfahren in Übereinstimmung mit dem offenbarten Gegenstand zu implementieren.
-
Bei 802 stellt der Dekodierer fest, ob der aktuelle Block unter Verwendung einfacher oder zusammengesetzter Vorhersage kodiert wurde. Diese Information kann durch Lesen und Dekodieren von Bits eines kodierten Video-Bitstreams, die anzeigen, dass ein oder mehrere Bewegungsvektoren für das Kodieren des aktuellen Blocks verwendet wurden, kommuniziert werden. Der kodierte Bitstream (oder die kodierten Videodaten) können von einem Dekodierer eines Computergeräts in einer Reihe von Weisen, wie zum Beispiel durch Empfangen der Videodaten über ein Netzwerk, über ein Kabel, oder durch Lesen der Videodaten von einem Primärspeicher oder einem anderen Speichergerät, einschließlich einer Festplatte oder entfernbarer Medien, wie zum Beispiel einer DVD, einer CompactFlash(CF)-Karte, einer Secure Digital(SD)-Karte oder allen anderen Geräten, die in der Lage sind, Videodaten zu kommunizieren, empfangen werden. Diese Informationen können zum Beispiel in einem Header, der einem aktuellen Block zugeordnet ist, oder einem Bild-Header enthalten sein. In dieser Erklärung wird angenommen, dass der aktuelle Block mit Inter-Vorhersage vorhergesagt wird. Anderenfalls wird kein Referenzbild in Verbindung mit dem aktuellen Block in den Bitstream kodiert und der aktuelle Block war mit Intra-Vorhersage vorhergesagt.
-
In Kenntnis des/der Referenzbildes/er, können die Bewegungsvektorkandidaten auf ähnliche Weise wie in Bezugnahme auf Prozess 600 von 6 beschrieben, gereiht werden. Das heißt, Kodierer und Dekodierer können Regeln für die Erzeugung von Kandidatenlisten für Referenz-Bewegungsvektoren gemeinsam benutzen, sodass der Dekodierer, wenn er Header-Informationen über den Inter-Vorhersage-Modus, der zum Kodieren des aktuellen Blocks (z. B. NEWMV, NEARESTMV, NEARMV, etc.) verwendet wurde, empfängt, den/dieselben Referenz-Bewegungsvektor(en), die vom Kodierer verwendet wurden, feststellen kann. Zuerst können die Bewegungsvektorkandidaten von den zuvor bei 804 kodierten Blöcken auf dieselbe Weise wie sie bei 602 im Prozess 600 identifiziert wurden, identifiziert werden. Während der Prozess 600 die Bewegungsvektorkandidaten unter Verwendung aller verfügbaren Referenzbilder und Kombinationen von Referenzbildern für das Ranking identifizieren kann, um den Inter-Vorhersage-Modus auszuwählen, muss der Prozess 800 nur die Bewegungsvektorkandidaten für das die Referenzbild(er) reihen, um den Block tatsächlich zu Kodieren.
-
Nachdem die Bewegungsvektorkandidaten bei 804 identifiziert wurden, werden sie bei 806 und 808 gereiht. Genauer ausgedrückt wird beim Reihen der Bewegungsvektorkandidaten, für jeden Bewegungsvektorkandidaten bei 806 die Distanz zwischen dem zuvor kodierten Block, der die Herkunft des Bewegungsvektors ist, und dem aktuellen Block festgestellt. Dies umfasst dieselben Tätigkeiten wie jene, die oben in Bezug auf die Bestimmung bei 604 im Prozess 600 beschrieben wurden. Das Ergebnis dieser Tätigkeit ist eine Liste der Bewegungsvektorkandidaten, gruppiert nach der Distanz in einer Implementierung. Danach erfolgt die Feststellung eines entsprechenden Beliebtheitswerts für den Bewegungsvektorkandidaten von den zuvor bei 804 kodierten Blöcken auf die gleiche Weise, wie die Feststellung bei 606 im Prozess 600. Das Ergebnis dieser Tätigkeit ist eine gereihte Liste von Bewegungsvektorkandidaten für das einzelne Referenzbild oder die kombinierten Referenzbilder, die in der Vorhersage des aktuellen Blocks verwendet wurden. In einer Implementierung wird der am höchsten eingestufte (z. B. wahrscheinlichste) Bewegungsvektor einem NEWMV-Modus zugeordnet, und die nächsten beiden Bewegungsvektoren beim Ranking werden jeweils den Referenz-Bewegungsvektor-Modi NEARESTMV und NEARMV des dynamischen Referenz-Bewegungsvektor(REFMV)-Modus zugeordnet. Alle weiteren Referenz-Bewegungsvektoren werden in der nachfolgenden Sequenz zugeordnet.
-
Bei 810 wird der Inter-Vorhersage-Modus, der für die Kodierung des aktuellen Blocks verwendet wurde, identifiziert. In einer Implementierung wird der Inter-Vorhersage-Modus durch Dekodierung der Bits, die im Bitstream, der im Inter-Vorhersage-Modus beinhaltet ist, identifiziert. Der Inter-Vorhersage-Modus kann zum Beispiel der neue Bewegungsvektor-Modus, der Null-Bewegungsvektor-Modus oder der dynamische Referenz-Bewegungsvektor-Modus sein. Wenn der Inter-Vorhersage-Modus der dynamische Referenz-Bewegungsvektor-Modus ist, kann der bestimmte verwendete Referenz-Bewegungsvektor-Modus auf die gleiche Weise bestimmt werden, z. B. von Bits, die im/in den Header(n) im Bitstream beinhaltet sind.
-
Bei 812 wird der bei 810 identifizierte Inter-Vorhersage-Modus verwendet, um den aktuellen Block bei 812 zu dekodieren, wie zum Beispiel durch den Dekodierungsprozess, der in Bezugnahme auf 5 beschrieben ist. Wenn der Inter-Vorhersage-Modus zum Beispiel einen differenziell- kodierten Bewegungsvektor umfasst, kann der Referenz-Bewegungsvektor verwendet werden, um den Bewegungsvektor, der verwendet wurde, um den aktuellen Block vorherzusagen, zu dekodieren. Alternativ dazu kann der Inter-Vorhersage-Modus den Bewegungsvektor unter Bezugnahme auf die Liste angeben. Ungeachtet der Herkunft des einen oder mehreren Bewegungsvektors/en, wird der Vorhersageblock unter Verwendung des/der Bewegungsvektors/en generiert und zum Restwert für den aktuellen Block, der vom Bitstream dekodiert wurde, hinzugefügt.
-
Der Prozess 800 kann für jeden Block wiederholt werden, das heißt kodiert unter Verwendung der Inter-Vorhersage um einen rekonstruierten Block zu generieren. Das Bild wird unter Verwendung der rekonstruierten Blöcke und der unter Verwendung der Intra-Vorhersage rekonstruierten Blöcke rekonstruiert. Durch Dekodierung einer Vielzahl von Bildern kann ein Ausgabevideostream, wie zum Beispiel der Ausgabevideostream 516, dargestellt in 5, rekonstruiert werden.
-
Die Verwendung der Syntax innerhalb des Bitstream für den REFMV-Modus deutet darauf hin, dass der effektive Bewegungsvektor von der Referenzierung der Kodierinformation benachbarter Blöcke kommt. Im Hinblick auf das Referenzbild wird eine Liste solcher möglicher Referenz-Bewegungsvektorkandidaten entsprechend ihrer relativen Distanz zum aktuellen Block und dem relativen Gebrauch gereiht. Diese Technik generalisiert den REFMV-Modus (zum Beispiel NEARESTMV und NEARMV) und verbessert die Effizienz der Entropie-Kodierung. Außerdem können die zusätzlichen Bewegungsvektorkandidaten zu weiteren Kompressionsgewinnen führen.
-
Die oben erläuterten Aspekte der Kodierung und Dekodierung veranschaulichen einige der Kodierungs-/Dekodierungstechniken. Jedoch sollte bedacht werden, dass die Verwendung der Begriffe Kodierung und Dekodierung in den Ansprüchen für Komprimierung, Dekomprimierung, Transformation oder jegliche andere Verarbeitung oder Änderung von Daten stehen kann.
-
Das Wort „Beispiel“, „Aspekt“ oder „Implementierung“ wie hierin verwendet, dient als ein Beispiel, eine Instanz oder eine Veranschaulichung. Jeder Aspekt oder Design hierin mit einem oder mehreren dieser Wörter beschrieben, ist nicht notwendigerweise als bevorzugt oder vorteilhaft gegenüber anderen Aspekten oder Designs auszulegen. Vielmehr soll die Verwendung des Wortes „Beispiel“, „Aspekt“ oder „Implementierung“ Konzepte konkret darstellen. Wie in dieser Anmeldung verwendet, ist der Begriff „oder“ eher als ein integratives „oder“ als ein exklusives „oder“ zu verstehen. Das heißt, sofern nicht anders Seite 16 --- (DE, CL) angegeben oder klar aus dem Kontext hervorgeht, „beinhaltet X A oder B“ und ist als eine der natürlichen inklusiven Permutationen zu verstehen. Das heißt, wenn X A beinhaltet; beinhaltet X B; oder wenn X sowohl A als auch B beinhaltet, beinhaltet „X A oder B“ unter Bezug auf ein beliebiges vorstehendes Beispiel. Zusätzlich sollten die in dieser Anmeldung und den anhängenden Ansprüchen verwendeten Artikel „ein“ und „eine“ im Allgemeinen als „ein/e oder mehrere“ verstanden werden, sofern nichts Anderes angegeben oder klar aus dem Zusammenhang zu einer singulären Form abgeleitet werden kann. Darüber hinaus soll die Verwendung des Begriffs „Implementierung“ oder „eine Implementierungen“ nicht als dieselbe Ausführungsform, derselbe Aspekt oder dieselbe Implementierung angesehen werden, es sei denn, dies ist ausdrücklich so beschrieben.
-
Implementierungen von Übertragungsstation 102 und/oder Empfangsstation 106 (und die darauf einschließlich auf Enkoder 400 und Dekoder 500 gespeicherten und/oder ausgeführten Algorithmen, Verfahren, Anweisungen usw.) können in Hardware, Software oder einer beliebigen Kombination davon verwirklicht werden. Die Hardware kann beispielsweise Computer, Intellectual Property (IP) Kerne, anwendungsspezifische integrierte Schaltkreise (ASICs), programmierbare Logikarrays, optische Prozessoren, programmierbare Logiksteuerungen, Mikrocodes, Mikrocontroller, Server, Mikroprozessoren und digitale Signalprozessoren oder jede andere geeignete Schaltung beinhalten. In den Ansprüchen sollte der Begriff „Prozessor“ als jede der vorgenannten Hardware entweder einzeln oder in Kombination verstanden werden. Die Begriffe „Signal“ und „Daten“ werden austauschbar verwendet. Weiterhin müssen Abschnitte von Übertragungsstation 102 und Empfangsstation 106 nicht notwendigerweise auf dieselbe Art implementiert werden.
-
Weiterhin können in einem Aspekt Übertragungsstation 102 oder Empfangsstation 106 unter Verwendung eines Universalcomputers oder Universalprozessors mit einem Computerprogramm, das, wenn es ausgeführt wird, jedes der jeweiligen Verfahren, Algorithmen und/oder Anweisungen ausführt, wie hierin beschrieben, implementiert werden. Zusätzlich oder alternativ kann beispielsweise ein spezieller Computer/Prozessor verwendet werden, der spezialisierte andere Hardware zur Durchführung eines der hierin beschriebenen Verfahren, Algorithmen oder Anweisungen beinhalten kann.
-
Die Übertragungsstation 102 und die Empfangsstation 106 können z. B. auf Computer in einem Videokonferenzsystem implementiert werden. Alternativ kann die Übertragungsstation 102 auf einem Server implementiert sein und die Empfangsstation 106 kann auf einem vom Server getrennten Gerät, wie beispielsweise einem Handkommunikationsgerät implementiert sein. In diesem Fall kann die Übertragungsstation 102 Inhalte unter Verwendung des Kodierers 400 in ein kodiertes Videosignal kodieren und das kodierte Videosignal an das Kommunikationsgerät übertragen. Im Gegenzug kann das Gerät dann das kodierte Videosignal unter Verwendung des Dekodierers 500 dekodieren. Alternativ kann das Kommunikationsgerät den Inhalt dekodieren, der lokal auf dem Kommunikationsgerät gespeichert ist, z. B. Inhalt, der nicht von der Sendestation 102 übertragen wurde. Andere Implementierungsschemata für die Übertragungsstation 102 und die Empfangsstation 106 sind verfügbar. So kann beispielsweise die Empfangsstation 106 auch ein allgemein ortsfester PC anstatt eines mobilen Kommunikationsgerätes sein und/oder das Gerät mit dem eingebetteten Kodierer 400 kann auch einen Dekodierer 500 enthalten.
-
Weiterhin können alle oder ein Teil der Implementierungen der vorliegenden Offenbarung die Form eines Computerprogrammproduktes annehmen, auf das z. B. von einem materiellen, vom Computer zu nutzenden oder computerlesbaren Medium aus zugegriffen werden kann. Ein vom Computer zu nutzendes oder computerlesbares Medium kann jegliches Gerät sein, das z. B. das Programm für die Nutzung durch oder in Zusammenhang mit einem Prozessor greifbar enthalten, speichern, kommunizieren oder transportieren kann. Bei dem Medium kann es sich z. B. um ein elektronisches, magnetisches, optisches, elektromagnetisches oder ein Halbleitergerät handeln. Andere geeignete Medien sind ebenfalls vorhanden.
-
Die vorstehend beschriebenen Ausführungsformen, Implementierungen und Aspekte wurden beschrieben, um ein leichtes Verständnis der Anwendung zu ermöglichen und sind nicht einschränkend. Ganz im Gegenteil soll die Erfindung verschiedene Änderungen und ähnliche Arrangements umfassen, die im Umfang der beigefügten Ansprüche beinhaltet sind, und der Umfang soll im weitest möglichen Sinn ausgelegt werden, sodass er all jene Änderungen und entsprechende Strukturen umfasst, wie nach dem Gesetz zulässig sind.