-
HINTERGRUND
-
Digitale Videodatenströme stellen in der Regel Videos unter Verwendung einer Sequenz von Frames oder Standbilddateien dar. Jeder Frame kann eine Anzahl von Blöcken beinhalten, die wiederum Informationen umfassen können, die den Wert der Farbe, der Helligkeit oder sonstiger Pixelattribute beschreiben. Die Datenmenge eines Videodatenstroms ist hoch und die Übertragung und Speicherung von Video kann dementsprechend hohe Rechen- und Kommunikationskapazitäten in Anspruch nehmen. Aufgrund der großen Datenmenge, die in Verbindung mit Videodaten in Anspruch genommen wird, ist ein leistungsstarkes Komprimierungsverfahren für sowohl deren Übertragung als auch deren Speicherung erforderlich. In blockbasierten Codecs umfasst das Vorhersagetechniken, einschließlich der Vorhersage unter der Verwendung von Bewegungsvektoren. Unter Schutz gestellt werden und Gegenstand des Gebrauchsmusters sind dabei, entsprechend den Vorschriften des Gebrauchsmustergesetzes, lediglich Vorrichtungen wie in den beigefügten Schutzansprüchen definiert, jedoch keine Verfahren. Soweit nachfolgend in der Beschreibung gegebenenfalls auf Verfahren Bezug genommen wird, dienen diese Bezugnahmen lediglich der beispielhaften Erläuterung der in den beigefügten Schutzansprüchen unter Schutz gestellten Vorrichtung oder Vorrichtungen.
-
ZUSAMMENFASSUNG
-
Diese Offenbarung betrifft im Allgemeinen das Kodieren und das Dekodieren visueller Daten, wie etwa Videostream-Daten, unter Verwendung einer Bewegungsvektoraufteilung des letzten Frames, die der Aufteilung des gegenwärtigen Frames erlaubt, auf der Aufteilung eines vorhergehenden Frames, der von einem oder mehreren Bewegungsvektoren eingestellt worden ist, basiert zu werden. Generell ausgedrückt, wird ein Block für eine Vorhersage in separate Bereiche aufgeteilt, indem die vorhergehenden Frame-Aufteilungen von einem der Bewegungsvektoren, die vom Bewegungsvektor des neuen Blocks abgedeckt werden, verschoben werden.
-
Ein Aspekt eines Verfahrens für das hierin durchgeführte Kodieren oder Dekodieren eines Videosignals beinhaltet das Ermitteln einer ersten Aufteilung mindestens eines Abschnitts eines Frames, das sich vor einem gegenwärtigen Frame in einer Videosequenz befindet. Das Videosignal beinhaltet Frames, welche die Videosequenz definieren, wobei der Frame in mindestens eine über Pixel verfügende Region aufgeteilt wird. Das Verfahren beinhaltet auch das Modifizieren der ersten Aufteilung zu einer zweiten Aufteilung unter der Verwendung eines Bewegungsvektors, der zumindest einen Prädiktions-Unterbereich eines ersten Bereichs aus der ersten Aufteilung vorhersagt, und die zweite Aufteilung verwendet, um einen gegenwärtigen Bereich des gegenwärtigen Frames zu kodieren oder zu dekodieren.
-
Ein Aspekt einer hierin beschriebenen Vorrichtung umfasst einen Prozessor und einen nicht-transitorischen Speicher, der Anweisungen speichert, welche den Prozessor dazu veranlassen, ein Verfahren, einschließlich der Ermittlung einer ersten Aufteilung mindestens eines Abschnitts eines Frames, das sich vor einem gegenwärtigen Frame in einer Videosequenz befindet, durchzuführen, wobei die erste Aufteilung zu einer zweiten Aufteilung unter der Verwendung eines Bewegungsvektors modifiziert wird, der zumindest einen Prädiktions-Unterbereich eines ersten Bereichs aus der ersten Aufteilung vorhersagt, und die zweite Aufteilung dazu verwendet, um einen gegenwärtigen Bereich des gegenwärtigen Frames zu kodieren oder zu dekodieren.
-
Ein weiterer Aspekt einer sich hierin befindlichen Vorrichtung besteht in einer Vorrichtung zur Kodierung eines Videosignals, wobei das Videosignal Frames beinhaltet, die eine Videosequenz definieren, wobei jeder Frame in Blöcke aufgeteilt ist, und jeder Block über Pixel verfügt. Die Vorrichtung umfasst einen Prozessor und einen nicht-transitorischen Speicher, der Anweisungen speichert, welche den Prozessor dazu veranlassen, ein Verfahren, einschließlich der Ermittlung einer ersten Aufteilung mindestens eines Abschnitts eines Frames, das sich vor einem gegenwärtigen Frame in einer Videosequenz befindet, durchzuführen, wobei die erste Aufteilung zu einer zweiten Aufteilung modifiziert wird, indem ein Standort, der die Grenzen des ersten Blocks identifiziert, von einem Vektor, der einen Prädiktions-Unterblock des ersten Blocks vorhersagt, innerhalb des Frames bewegt wird, um einen neuen Block zu identifizieren und wobei die erste Aufteilung, die innerhalb der Grenzen des neuen Blocks am Standort enthalten ist, von einem Bewegungsvektor eines Prädiktions-Unterblocks des Frames modifiziert wird, und dabei zumindest abschnittsweise den neuen Block unter Verwendung eines Bewegungsvektors, der mindestens einen Prädiktions-Unterblock des ersten Blocks, der von der ersten Aufteilung definiert wird, sowie unter Verwendung der zweiten Aufteilung, zur Kodierung eines gegenwärtigen Blocks des gegenwärtigen Frames, wobei der gegenwärtige Block sich innerhalb des ersten Blocks befindet, überlagert.
-
Diese und sonstige Aspekte der vorliegenden Offenbarung werden in der folgenden detaillierten Beschreibung, den beiliegenden Ansprüchen und den beiliegenden Figuren mit zusätzlichen Einzelheiten beschrieben.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
Die vorliegende Beschreibung nimmt Bezug auf die beiliegenden Zeichnungen, die nachfolgend beschrieben werden, wobei gleiche Referenzzahlen dieselben Teile für die verschiedenen Ansichten bezeichnen.
-
1 ist ein Schaltplan eines Videokodierungs- und -dekodierungssystems.
-
2 ist ein Blockdiagramm eines Beispiels eines Computergeräts, das eine Übertragungsstation oder eine Empfangsstation implementieren kann.
-
3 ist ein Diagramm eines Videodatenstroms, der kodiert, und dann im Anschluss daran, dekodiert werden soll.
-
4 ist ein Blockdiagramm eines Videokomprimierungssystems gemäß einem Aspekt der sich hierin befindlichen Lehren.
-
5 ist ein Blockdiagramm eines Videodekomprimierungssystems gemäß einem anderen Aspekt der sich hierin befindlichen Lehren.
-
6 ist ein Flussdiagramm eines Verfahrens für das Kodieren oder das Dekodieren eines Bereichs unter Verwendung einer Bewegungsvektoraufteilung des letzten Frames.
-
Bei den 7A–7C sind Diagramme eines Beispiels, das verwendet wird, um das Verfahren aus 6 zu erläutern.
-
Bei den 8A und 8B sind Diagramme eines anderen Beispiels, das verwendet wird, um das Verfahren aus 6 zu erläutern.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Ein Videodatenstrom kann von einer Vielzahl von Techniken komprimiert werden, um die Bandbreite zu reduzieren, die erforderlich ist, um den Videodatenstrom zu übermitteln oder zu speichern. Ein Videodatenstrom kann in einen Bitstream, der eine Kompression umfassen kann, kodiert werden, und kann dann an eine Dekodiervorrichtung übermittelt werden, die den Videodatenstrom dekodieren und dekomprimieren kann, um ihn auf eine Ansicht oder eine weitere Verarbeitung vorzubereiten. Das Kodieren eines Videodatenstroms kann Parameter umfassen, die Kompromisslösungen zwischen der Videoqualität und der Bitstream-Größe finden, wobei das Erhöhen der wahrgenommenen Qualität eines dekodierten Videodatenstroms die Anzahl der erforderlichen Bits zur Übertragung oder zur Speicherung des Bitstreams erhöhen.
-
Eine weitere Technik zur Erzielung einer überlegenen Kompressionsleistung nutzt die räumliche und zeitliche Wechselbeziehung des Videosignals über eine räumliche und/oder bewegungskompensierte Vorhersage aus. Die Interprädiktion bedient sich zum Beispiel eines Bewegungsvektors, um einen zuvor kodierten und dekodierten Block zu identifizieren, der einem gegenwärtigen Block, der kodiert werden soll, ähnelt. Und durch das Kodieren des Bewegungsvektors und aufgrund des Unterschieds zwischen den zwei Blöcken kann eine Dekodiervorrichtung den gegenwärtigen Block erneut erstellen.
-
Es ist oft wünschenswert, einen möglichst großen Block zu kodieren, um die Datenmenge, die Teil der Header des Bitstreams ist, das verwendet wird, um den Block zu dekodieren, auf ein Mindestmaß zu senken. Große Blöcke können jedoch dazu führen, dass ein größeres Verzerrungsausmaß als wünschenswert in Erscheinung tritt, und zwar insbesondere in denjenigen Fällen, in denen ein hoher Bewegungsanteil innerhalb des Blocks verzeichnet wird. Aus diesem Grund und um in der Lage zu sein. Objekte innerhalb eines Blocks besser miteinander abzugleichen, können größere Blocks in mehrere kleinere Blocks unterteilt werden. Zum Beispiel können Blocks von mindestens 16×16 Pixel im Frame einer Vorhersage in zwei Blöcke unterteilt werden, wobei die Größe eines Blocks infolge dieser Maßnahme auf jeweils 4×4 Pixel reduziert werden kann. Das Aufteilen von Frames unter Verwendung sonstiger Techniken, wie etwa Masken, Keile, usw. zeigt dieselben Qualitäten auf. Die Beschreibung der Aufteilung mit sich hierin befindlichen Blöcken ist demzufolge lediglich ein Beispiel der Ausgabe der Frameaufteilung.
-
Derzeit wird jeder Frame von Grund auf aufgeteilt – d. h. ohne Berücksichtigung der Aufteilung des vorhergehenden Frames. Im Gegensatz dazu beschreiben die sich hierin befindlichen Regeln eine Option, im Frame derer die Aufteilung des letzten Frames von Bewegungsvektoren im Frame verschoben wird, um eher eine neue Aufteilung zu generieren, als einen gesamten Frame jedes Mal aufs Neue aufteilen zu müssen. Im Allgemeinen werden Blöcke (oder vorhergehende Bereiche, die bereits von einem Frame aufgeteilt worden sind) in getrennte Bereiche aufgeteilt, indem eine vorhergehende Frameaufteilung (vorhergehende Frameaufteilungen) verschoben wird (werden), z. B. von einem der Bewegungsvektoren, der vom Bewegungsvektor der neuen Region oder des neuen Blocks abgedeckt wird. Jede der neuen Bereiche kann über seinen eigenen Bewegungsvektor verfügen und dies ermöglicht den Einsatz getrennter Modi und Bewegungsvektoren für nicht viereckige Bereiche eines Frames. Durch die Verwendung eines Bewegungsvektors, um vorhergehende Aufteilungen des Frames zu ändern, um eine Gültigkeit für den neuen Frame zu erzielen, besteht die Möglichkeit Vorhersagekosten (einschließlich Rechenzeit) zu verringern. Weitere Details werden nach einer anfänglichen Besprechung der Umgebung, in der die hierin aufgeführten Lehren verwendet werden können, besprochen.
-
1 ist ein Schaltplan eines Videokodierungs- und -dekodierungssystems 100. Bei einer Übertragungsstation 102 kann es sich zum Beispiel um einen Computer handeln, der über eine interne Konfiguration von Hardware, wie diejenige, die in 2 beschrieben wird, verfügt. Sonstige geeignete Implementierungen der Übertragungsstation 102 sind jedoch möglich. Zum Beispiel kann die Verarbeitung der Daten von der Übertragungsstation 102 auf mehrere Geräte verteilt werden.
-
Ein Netzwerk 104 kann die Übertragungsstation 102 mit einer Empfangsstation 106 zur Kodierung und Dekodierung des Videodatenstroms verbinden. Insbesondere kann der Videodatenstrom in der Übertragungsstation 102 kodiert werden und der kodierte Videodatenstrom kann in der Empfangsstation 106 dekodiert werden. Bei Netzwerk 104 kann es sich zum Beispiel um das Internet handeln. Bei Netzwerk 104 kann es sich auch um ein lokales Netzwerk (LAN), ein Weitverkehrsnetzwerk (WAN), ein virtuelles privates Netzwerk (VPN), ein Mobilfunknetz oder um jedes andere Mittel für das Übertragen des Videodatenstroms von der Übertragungsstation 102 auf die Empfangsstation 106, wie in diesem spezifischen Beispiel dargestellt, handeln.
-
Bei der Empfangsstation 106 kann sich in einem Beispiel um einen Computer handeln, der über eine interne Konfiguration von Hardware verfügt, wie etwa derjenigen, die in 2 beschrieben wird. Dennoch sind sonstige geeignete Implementierungen der Empfangsstation 106 möglich. Zum Beispiel kann die Verarbeitung der Daten von der Empfangsstation 106 auf mehrere Geräte verteilt werden.
-
Sonstige Implementierungen des Videokodierungs- und Dekodierungssystems 100 sind möglich. Zum Beispiel kann eine Implementierung das Netzwerk 104 auslassen. In einer anderen Implementierung kann ein Videodatenstrom kodiert werden und dann zum Zwecke einer zu einem späteren Zeitpunkt stattfindenden Übertragung auf die Empfangsstation 106 oder auf jedes andere Gerät, das über einen Speicher verfügt, gespeichert werden. In einer Implementierung erhält die Empfangsstation 106 (z. B. über das Netzwerk 104, einen Computerbus und/oder einige Kommunikationspfade) den kodierten Videodatenstrom und speichert den Videodatenstrom für ein späteres Dekodieren. In einer exemplarischen Implementierung wird ein Echtzeit-Transportprotokoll (RTP) zur Übertragung des kodierten Videos über das Netzwerk 104 verwendet. In einer anderen Implementierung kann ein Transportprotokoll, zu dem das RTP nicht gehört, verwendet werden z. B. ein Hypertext-Übertragungsprotokoll(HTTP)-basiertes Videostreaming-Protokoll.
-
Wenn die Übertragungsstation 102 und/oder die Empfangsstation 106 beispielsweise in einem Videokonferenzsystem verwendet werden, können sie über die Fähigkeit verfügen, einen Videodatenstrom, wie unten beschrieben, sowohl zu kodieren als auch zu dekodieren. Zum Beispiel kann es sich bei der Empfangsstation 106 um einen Videokonferenzteilnehmer handeln, der einen kodierten Videobitstream von einem Videokonferenz-Server erhält (z. B. die Übertragungsstation 102), um diesen zu dekodieren und ihn sich anzusehen und ferner sein eigenes Videobitstream an den Videokonferenz-Server übermittelt, um von anderen Teilnehmern dekodiert und angesehen zu werden.
-
2 ist ein Blockdiagramm eines Beispiels eines Computergeräts 200, das eine Übertragungsstation oder eine Empfangsstation implementieren kann. Zum Beispiel kann das Computergerät 200 sowohl die Übertragungsstation 102 als auch die Empfangsstation 106 aus 1 implementieren. Das Computergerät 200 kann in Form eines Computersystems, einschließlich mehreren Computergeräten, oder in Form eines einzelnen Computergeräts, zum Beispiel eines mobilen Telefons, eines Tablet-Computers, eines Laptop-Computers, eines Notebook-Computers, eines Desktop-Computers usw. zur Verfügung stehen.
-
Bei einer CPU 202 in Computergerät 200 kann es sich um eine zentrale Verarbeitungseinheit handeln. Alternativ dazu, kann es sich bei der CPU 202 um jede andere Art von Gerät handeln, oder um mehrere Geräte, die in der Lage sind, Informationen, die noch nicht existieren, oder erst zu einem späteren Zeitpunkt entwickelt werden, zu manipulieren und zu verarbeiten. Obwohl die offengelegten Implementierungen mit einem einzelnen Prozessor, wie ersichtlich, durchgeführt werden können, z. B. die CPU 202, können Vorteile hinsichtlich der Geschwindigkeit und des Wirkungsgrads unter Verwendung von mehr als einem Prozessor erzielt werden.
-
Bei einem Speicher 204 in Computergerät 200 kann es sich um ein Nur-Lese-Speicher-(ROM)-Gerät oder um ein Direktzugriff-Speicher-(RAM)-Gerät in einer Implementierung handeln. Jede andere geeignete Art von Speichergerät kann als der Speicher 204 verwendet werden. Der Speicher 204 kann Code und Daten 206 beinhalten, auf die, die CPU 202 unter Verwendung eines Busses 212 zugreifen kann. Der Speicher 204 kann ferner ein Betriebssystem 208 und Anwendungsprogramme 210 beinhalten, wobei die Anwendungsprogramme 210 das mindestens eine Programm beinhalten, welches der CPU 202 die Erlaubnis erteilt, die hier beschriebenen Verfahren durchzuführen. Zum Beispiel können Anwendungsprogramme 210 Anwendungen 1 bis N beinhalten, die ferner eine Videokodierungsanwendung beinhalten, welche dich hier beschriebenen Verfahren durchführt. Das Computergerät 200 kann auch eine zweite Speichervorrichtung 214 beinhalten, bei der es sich zum Beispiel um eine Speicherkarte handeln kann, die mit einem mobilen Computergerät verwendet wird. Da die Videokommunikationssitzungen unter Umständen eine beträchtliche Informationsmenge beinhalten können, können sie vollständig oder teilweise im sekundären Speicher 214 gespeichert werden und wenn sie zur Weiterverarbeitung erforderlich sind, auf den Speicher 204 geladen werden.
-
Das Computergerät 200 kann auch ein oder mehrere Ausgabegeräte, wie etwa ein Display 218, beinhalten. Bei Display 218 kann es sich in einem Beispiel um ein berührungsempfindliches Display handeln, das ein Display mit einem berührungsempfindlichen Element kombiniert, das während seines Betriebs in der Lage ist, Berührungseingaben wahrzunehmen. Das Display 218 kann an die CPU 202 über den Bus 212 gekoppelt sein. Sonstige Ausgabegeräte, die es einem Benutzer erlauben, das Computergerät 200 zu programmieren und auf sonstige Weise zu verwenden, können zusätzlich zum Display 218 oder als Alternative dazu, bereitgestellt werden. Wenn es sich bei dem Ausgabegerät um ein Display handelt oder dieses ein Display beinhaltet, kann das Display auf verschiedene Arten, einschließlich anhand einer Flüssigkristallanzeige (LCD), eines Kathodenstrahlröhren-(CRP)-Displays, oder eines Leuchtdioden-(LED)-Displays, wie etwa eines organischen LED(OLED)-Displays, implementiert werden.
-
Das Computergerät 200 kann auch eine Bildwahrnehmungsvorrichtung 220, wie zum Beispiel eine Kamera, oder jede andere Bildwahrnehmungsvorrichtung 220, die bereits existiert oder zu einem späteren Zeitpunkt entwickelt werden wird, die ein Bild, wie etwa ein Bild eines Benutzers, der das Computergerät 200 betreibt, wahrnehmen kann, beinhalten oder sich in Kommunikation damit befinden. Die Bildwahrnehmungsvorrichtung 220 kann so positioniert werden, dass sie dem Benutzer, der das Computergerät 200 betreibt, direkt zugewandt ist. In einem Beispiel kann die Position und die optische Achse der Bildwahrnehmungsvorrichtung 220 so konfiguriert werden, dass das Sichtfeld einen Bereich, der direkt an das Display 218 angrenzt, und von dem aus, das Display 218 sichtbar ist, beinhaltet.
-
Das Computergerät 200 kann auch eine Lautewahrnehmungsvorrichtung 222, wie zum Beispiel ein Mikrofon oder jede andere Lautewahrnehmungsvorrichtung, die bereits existiert, oder zu einem späteren Zeitpunkt entwickelt werden wird, und die in der Lage ist, Laute in der Nähe eines Computergeräts 200 wahrzunehmen, miteinbeziehen oder sich damit in Kommunikation befinden. Die Lautewahrnehmungsvorrichtung 222 kann so positioniert werden, dass sie dem Benutzer, der das Computergerät 200 betreibt, zugewendet ist, und kann konfiguriert werden, um Laute, wie zum Beispiel Sprechlaute oder sonstige von Äußerungen ausgehende Laute, zu empfangen, die vom Benutzer gemacht werden, während der Benutzer das Computergerät 200 betreibt.
-
Obwohl die CPU 202 und der Speicher 204 des Computergeräts 200 in 2, als innerhalb einer einzelnen Einheit integriert, abbildet werden, können auch andere Konfigurationen verwendet werden. Die Operationen der CPU 202 können über mehrere Maschinen (wobei jede Maschine über einen oder mehrere Prozessoren verfügt) verteilt werden, die direkt bzw. über ein lokales Netzwerk oder ein sonstiges Netzwerk aneinandergekoppelt werden können. Der Speicher 204 kann über mehrere Maschinen, wie etwa netzwerkbasierte Speicher oder Speicher innerhalb mehrerer Maschinen, welche die Operationen des Computergeräts 200 durchführen, verteilt werden. Obwohl der Bus 212 des Computergeräts 200 hier als ein einzelner Bus abgebildet wird, kann er aus mehreren Bussen bestehen. Ferner kann der sekundäre Speicher 214 direkt an die anderen Komponenten des Computergeräts 200 gekoppelt werden oder kann über ein Netzwerk zugänglich gemacht werden und kann eine einzelne integrierte Einheit, wie etwa eine Speicherkarte oder mehrere Einheiten, wie etwa mehrere Speicherkarten umfassen. Das Computergerät 200 kann somit in einer breiten Vielfalt von Konfigurationen implementiert werden.
-
3 ist ein Diagramm eines Beispiels eines Videodatenstroms 300, der kodiert und dann im Anschluss daran, dekodiert werden soll. Der Videodatenstrom 300 beinhaltet eine Videosequenz 302. Auf der nächsten Ebene beinhaltet die Videosequenz 302 eine Anzahl an angrenzenden Frames 304. Während drei Frames als die angrenzenden Frames 304 abgebildet werden, kann die Videosequenz 302 jede Anzahl von angrenzenden Frames 304 beinhalten. Die angrenzenden Frames 304 können dann weiter in einzelne Frames, z. B. ein Frame 306, unterteilt werden. Auf der nächsten Ebene kann der Frame 306 in eine Serie von Ebenen oder Segmenten 308 unterteilt werden. Die Segmente 308 können Teilmengen von Frames sein, die zum Beispiel eine Parallelverarbeitung erlauben. Die Segmente 308 können auch Teilmengen von Frames sein, welche die Videodaten in unterschiedliche Farben trennen können. Zum Beispiel kann der Frame 306 von Farbvideodaten eine Leuchtdicke-Ebene und zwei Chrominanz-Ebenen beinhalten. Die Segmente 308 können bei verschiedenen Auflösungen abgetastet werden.
-
Unabhängig davon, ob der Frame 306 in die Segmente 308 unterteilt ist oder nicht, kann der Frame 306 ferner in Blöcke 310 unterteilt werden, welche Daten umfassen, die zum Beispiel 16×16 Pixel im Frame 306 entsprechen. Die Blöcke 310 können auch angeordnet werden, um Daten von einer oder mehreren Ebenen an Pixeldaten zu enthalten. Die Blöcke 310 können auch über jede andere geeignete Größe, wie etwa 4×4 Pixel, 8×8 Pixel, 16×8 Pixel, 8×16 Pixel, 16×16 Pixel oder größer, verfügen. Die Blöcke 310 oder sonstige Bereiche, die sich aus der Aufteilung der Frame 306 ergeben, können gemäß den hierin aufgeführten Lehren, wie nachfolgend detaillierter abgehandelt, aufgeteilt werden. Das bedeutet, dass es sich bei den zu kodierenden Bereichen um größere Bereiche handeln kann, die in kleinere Unterblöcke oder Bereiche aufgeteilt werden. Genauer gesagt kann ein gegenwärtiger zu kodierender Bereich in kleinere Gruppen von Pixeln aufgeteilt werden, die z. B. unter Verwendung unterschiedlicher Vorhersagemodi kodiert werden. Diese Gruppen von Pixeln können hierin als Prädiktions-Unterblöcke, Prädiktions-Unterbereiche oder Prädiktions-Einheiten bezeichnet werden. In einigen Fällen gibt es nur einen einzigen Prädiktions-Unterbereich, der den gesamten zu kodierenden Bereich als denjenigen Bereich umfasst, der unter Verwendung eines lediglich einzigen Vorhersagemodus kodiert wird. Sofern nicht anders angegeben, gilt die Beschreibung der Kodierung und der Dekodierung eines Blocks in den nachstehenden 4 und 5 in gleicher Weise für Prädiktions-Unterblöcke, Prädiktions-Unterbereiche oder Prädiktions-Einheiten eines größeren Bereichs.
-
4 ist ein Blockdiagramm einer Kodiervorrichtung 400 gemäß einer Implementierung. Die Kodiervorrichtung 400 kann, wie vorstehend beschrieben, in der Übertragungsstation 102 implementiert werden, wie etwa durch das Bereitstellen eines Computersoftwareprogramms, das im Speicher, wie zum Beispiel dem Speicher 204, gespeichert ist. Das Computersoftwareprogramm kann Maschinenanweisungen beinhalten, die, wenn sie von einem Prozessor, wie etwa der CPU 202, ausgeführt werden, die Übertragungsstation 102 dazu veranlassen, Videodaten auf die in 4 beschriebene Weise zu kodieren. Die Kodiervorrichtung 400 kann auch als eine spezialisierte Hardware implementiert werden, die zum Beispiel Teil der Übertragungsstation 102 darstellt. Die Kodiervorrichtung 400 verfügt über die folgenden Stadien, um die verschiedenen Funktionen in einem Vorwärtspfad (anhand der durchgezogenen Verbindungslinien dargestellt) durchzuführen, um einen kodierten oder komprimierten Bitstream 420 unter Verwendung des Videodatenstroms 300 als Eingabe zu erstellen: ein Intra/Inter-Prädiktionsstadium 402, ein Transformationsstadium 404, ein Quantifizierungsstadium 406, und ein Entropiekodierungs-Stadium 408. Die Kodiervorrichtung 400 kann auch einen Rekonstruktionspfad (von der punktierten Verbindungslinie dargestellt) beinhalten, um einen Frame für das Kodieren von zukünftigen Blöcken zu rekonstruieren. In 4 verfügt die Kodiervorrichtung 400 über die folgenden Stadien, um die verschiedenen Funktionen im Rekonstruktionspfad durchzuführen: ein Dequantifizierungsstadium 410, ein inverses Transformationsstadium 412, ein Rekonstruktionsstadium 414, ein Loopfiltering-Stadium 416. Sonstige strukturelle Variationen der Kodiervorrichtung 400 können verwendet werden, um den Videodatenstrom 300 zu kodieren.
-
Wenn der Videodatenstrom 300 zur Kodierung präsentiert wird, kann jeder Frame 306 in Pixeleinheiten (z. B. Blocks), wie etwa beispielsweise Blocks, verarbeitet werden. Im Intra/Inter-Prädiktionsstadium 402 kann ein Block unter Verwendung einer Intra-Frameprädiktion (auch Intra-Prädiktion genannt) oder einer Inter-Frameprädiktion (hierin auch Interprädiktion, Inter-Prädiktion oder Inter-Vorhersage genannt) kodiert werden. In jedem Fall kann ein Prädiktionsblock (oder Prädiktor) ausgebildet werden. Im Falle einer Intra-Prädiktion kann ein Prädiktionsblock aus Proben des gegenwärtigen Frames ausgebildet werden, die zuvor schon kodiert und rekonstruiert worden sind. Im Falle einer Intra-Prädiktion kann ein Prädiktionsblock aus Proben ausgebildet werden, die sich in einem oder mehreren der zuvor schon konstruierten Referenzframes befinden.
-
Danach, und immer noch unter Bezugnahme auf 4, kann der Prädiktionsblock vom gegenwärtigen Block im Intra/Inter-Prädiktionsstadium 402 subtrahiert werden, um einen Restblock zu erzeugen (auch ein Rest genannt). Das Transformationsstadium 404 wandelt den Rest in Transformationskoeffizienten um – zum Beispiel in die Frequenz-Domain unter der Verwendung blockbasierter Transformationen. Derartige blockbasierte Transformationen beinhalten zum Beispiel die diskrete Kosinus-Transformation (DCT) die asymmetrische diskrete Sinus-Transformation (ADST). Sonstige blockbasierte Transformationen sind ebenfalls möglich. Ferner können Kombinationen verschiedener Transformationen auf einen einzigen Rest angewendet werden. In einem Beispiel einer Anwendung einer Transformation verwandelt die DCT den Restblock in den Frequenzbereich, innerhalb dessen die Koeffizientenwerte der Transformation auf der Ortsfrequenz basieren. Der niedrigste Frequenz-(DC)-Koeffizient im oberen linken Bereich der Matrix und der höchste Frequenzkoeffizient im unteren rechten Bereich der Matrix. Es ist erwähnenswert, dass die Größe eines Prädiktions-Blocks, und somit des sich daraus ergebenden Restblocks, sich von der Größe des Transformationsblocks unterscheiden kann. Zum Beispiel kann der Restblock oder der Bereich in kleinere Blockbereiche aufgeteilt werden, auf die separate Transformationen angewendet werden.
-
Das Quantifizierungsstadium 406 wandelt die Transformationskoeffizienten unter Verwendung eines vom Quantisierer ausgegebenen Wertes oder einer Quantisierungsstufe in diskrete Quantum-Werte, die als quantifizierte Transformationskoeffizienten bezeichnet werden, um. Zum Beispiel können die Transformationskoeffizienten durch den vom Quantisierer ausgegebenen Wert geteilt werden und trunkiert werden. Die quantifizierten Transformationskoeffizienten werden dann im Entropiekodierungsstadium 408 entropiekodiert. Entropiekodierungen können unter Verwendung einer beliebigen Anzahl von Techniken, einschließlich Token und binären Bäumen, durchgeführt werden. Die entropiekodierten Koeffizienten werden dann zusammen mit sonstigen Informationen, die verwendet werden, um den Block zu dekodieren, und die zum Beispiel die Art der Prädiktion, die verwendet wird, die Transformationsart, Bewegungsvektoren und den vom Quantisierer ausgegebenen Wert beinhalten, am komprimierten Bitstream 420 ausgegeben. Der komprimierte Bitstream 420 kann auch als ein kodierter Videodatenstrom oder ein kodierter Video-Bitstream bezeichnet werden, und die Begriffe können hierin austauschbar verwendet werden.
-
Der Rekonstruktionspfad in 4 (dargestellt mittels der punktierten Verbindungslinie) kann verwendet werden, um sicherzustellen, dass sowohl die Kodiervorrichtung 400 als auch die Dekodiervorrichtung 500 (im Folgenden beschrieben) denselben Referenzframe verwenden, um den komprimierten Bitstream 420 zu dekodieren. Der Rekonstruktionspfad führt Funktionen durch, die über ähnliche Eigenschaften wie Funktionen verfügen, die während des Dekodierverfahrens stattfinden, und auf die im Folgenden näher eingegangen wird, einschließlich der Dequantifizierung der quantifizierten Transformationskoeffizienten im Dequantifizierungsstadium 410 und der inversen Transformation der dequantifizierten Transformationskoeffizienten im inversen Transformationsstadium 412, um einen derivativen restlichen Block zu erzeugen (auch als ein derivativer Rest bezeichnet). Im Rekonstruktionsstadium 414 kann der Prädiktionsblock, der im Intra/Inter-Prädiktionsstadium 402 prognostiziert wurde, zum derivativen Rest zugefügt werden, um einen rekonstruierten Block zu erzeugen. Das Loopfiltering-Stadium 416 kann auf den rekonstruierten Block angewendet werden, um eine Verzerrung, wie etwa Sperrartefakte, zu reduzieren.
-
Andere Variationen der Kodiervorrichtung 400 können verwendet werden, um den komprimierten Bitstream 420 zu kodieren. Zum Beispiel kann eine nicht transformbasierte Kodiervorrichtung 400 das restliche Signal direkt und ohne das Transformationsstadium 404 für bestimmte Blöcke oder Frames quantisieren. In einer anderen Implementierung kann die Kodiervorrichtung 400 über ein Quantifizierstadium 406 und ein Dequantifizierstadium 410 verfügen, die in einem einzigen Stadium kombiniert sind. Gemäß dieser Technik kann die Kodiervorrichtung 400 Pixelgruppen jeder beliebigen Größe oder Form kodieren. Die zu kodierenden Pixelgruppen können demzufolge ganz allgemein auch als Bereiche bezeichnet werden.
-
5 ist ein Blockdiagramm einer Dekodiervorrichtung 500 in Übereinstimmung mit einer anderen Implementierung. Die Dekodiervorrichtung 500 kann in der Empfangsstation 106 implementiert werden, zum Beispiel durch das Bereitstellen eines Computersoftwareprogramms, das in Speicher 204 gespeichert ist. Das Computersoftwareprogramm kann Maschinenanweisungen beinhalten, die, wenn sie von einem Prozessor, wie etwa einer CPU 202, ausgeführt werden, die Empfangsstation 106 dazu veranlassen, Videodaten auf diejenige Weise, die in 5 besprochen worden ist, zu dekodieren. Die Dekodiervorrichtung 500 kann auch in Hardware implementiert werden, die zum Beispiel in der Übertragungsstation 102 oder der Empfangsstation 106 enthalten ist.
-
Die Dekodiervorrichtung 500, die über ähnliche Eigenschaften wie der Rekonstruktionspfad der Kodiervorrichtung 400, die vorstehend besprochen wird, verfügt, beinhaltet ein Beispiel der folgenden Stadien, um verschiedene Funktionen durchzuführen, um einen Ausgabe-Videodatenstrom 516 vom komprimierten Bitstream 420 zu erzeugen: ein Entropie-Dekodierstadium 502, ein Dequantifizierungsstadium 504, ein inverses Transformationsstadium 506, eine Intra/Inter-Prädiktionsstadium 508, ein Rekonstruktionsstadium 510, ein Loopfiltering-Stadium 512, und ein Deblockier-Filtering-Stadium 514. Sonstige strukturelle Variationen der Dekodiervorrichtung 500 können verwendet werden, um den komprimierten Bitstream 420 zu dekodieren.
-
Wenn der komprimierte Bitstream 420 zur Dekodierung präsentiert wird, können Datenelemente innerhalb des komprimierten Bitstreams 420 vom Entropie-Dekodierstadium 502 dekodiert werden, um einen Satz quantisierter Transformationskoeffizienten zu erzeugen. Im Dequantifizierungsstadium 504 werden die quantifizierten Transformationskoeffizienten (z. B. durch das Multiplizieren der quantifizierten Transformationskoeffizienten mit dem vom Quantisierer ausgegebenen Wert) dequantifiziert und im inversen Transformationsstadium 506 werden die dequantifizierten Transformationskoeffizienten unter Verwendung des ausgewählten Tranformationstyps invers transformiert, um einen derivativen Rest zu erzeugen, der mit demjenigen Rest, der im inversen Transformationsstadium 412 in der Kodiervorrichtung 400 erzeugt wurde, identisch ist. Unter Verwendung der Header-Informationen, die vom komprimierten Bitstream 420 dekodiert worden sind, kann die Dekodiervorrichtung 500 das Intra/Inter-Prädiktionsstadium 508 verwenden, um denselben Prädiktionsblock, der in der Kodiervorrichtung 400 erzeugt worden ist, z. B. im Intra/Inter-Prädiktionsstadium 402, zu erzeugen. Im Rekonstruktionsstadium 510 kann der Prädiktionsblock zum derivaten Rest hinzugefügt werden, um einen rekonstruierten Block zu erzeugen. Das Loopfiltering Stadium 512 kann auf den rekonstruierten Block angewendet werden, um blockierende Artefakte zu reduzieren. Sonstige Filtervorgänge können auf den rekonstruierten Block angewendet werden. In diesem Beispiel wird das Deblockier-Filtering-Stadium 514 auf den rekonstruierten Block angewendet, um die Blockierverzerrung zu reduzieren, und das Ergebnis wird als ein Ausgabe-Videodatenstrom 516 ausgegeben. Der Ausgabe-Videodatenstrom 516 kann auch als ein dekodierter Videostream bezeichnet werden, und die Begriffe können austauschbar verwendet werden.
-
Sonstige Variationen der Dekodiervorrichtung 500 können verwendet werden, um den komprimierten Bitstream 420 zu dekodieren. Zum Beispiel kann die Dekodiervorrichtung 500 den Ausgabe-Videodatenstrom 516 ohne das Deblockier-Filtering-Stadium 514 erzeugen. Obwohl die Dekodiervorrichtung 500 der Einfachheit halber unter Bezugnahme auf die Blöcke beschrieben wird, ist sie gemäß dieser Technik in der Lage, Pixelgruppen (z. B. Bereiche) jeder Größe oder Form zu dekodieren.
-
Wie bereits vorstehend kurz angeführt, kann ein Frame oder ein Bereich eines Frames zum Zwecke der Kodierung oder der Dekodierung von der Bewegungsvektoraufteilung des letzten Frames aufgeteilt werden – d. h. mittels der Anpassung der letzten Aufteilung des Frames unter Verwendung eines Bewegungsvektors. Im Allgemeinen wird ein Bereich in separate Bereiche geteilt, indem die vorhergehenden Frameaufteilungen von einem der Bewegungsvektoren, der vom Bewegungsvektor des neuen Bereichs abgedeckt wird, verschoben werden.
-
6 ist ein Flussdiagramm eines Verfahrens 600 für das Kodieren oder das Dekodieren eines Bereichs mittels einer Bewegungsvektoraufteilung des letzten Frames gemäß einer Implementierung dieser Offenbarung. Die Methode oder das Verfahren 600 können in einem System, wie etwa dem Computergerät 200, implementiert werden, um die Kodierung oder die Dekodierung eines Videodatenstroms zu unterstützen. Das Verfahren 600 kann zum Beispiel als ein Softwareprogramm implementiert werden, das von einem Computergerät, wie etwa der Übertragungsstation 102 oder der Empfangsstation 106, ausgeführt wird. Das Softwareprogramm kann maschinenlesbare Anweisungen beinhalten, die in einem Speicher, wie etwa dem Speicher 204 gespeichert werden, der, wenn er von einem Prozessor, wie etwa der CPU 202 ausgeführt wird, das Computergerät dazu veranlasst, das Verfahren 600 durchzuführen. Das Verfahren 600 können auch unter Verwendung von Hardware vollständig oder teilweise implementiert werden. Wie vorstehend erklärt, können einige Computergeräte über mehrere Speicher und mehrere Prozessoren verfügen und die Schritte oder die Operationen des Verfahrens 600 können in derartigen Fällen unter der Verwendung verschiedener Prozessoren und Speicher verteilt werden. Die Verwendung der Begriffe „Prozessor” und „Speicher” im Singular, umfasst hierin sowohl Computergeräte, die lediglich über einen Prozessor oder einen Speicher verfügen, als auch Computergeräte, die über mehrere Prozessoren oder Speicher verfügen, die jeweils bei der Durchführung einiger aber nicht notwendigerweise aller angegebenen Schritte verwendet werden.
-
Zur Vereinfachung der Erklärung wird das Verfahren 600 in einer Serie von Schritten oder Operationen abgebildet und beschrieben. Schritte und Operationen in Übereinstimmung mit dieser Offenbarung können jedoch in verschiedenen Reihenfolgen und/oder gleichzeitig erfolgen. Darüber hinaus können Schritte oder Operationen, in Übereinstimmung mit dieser Offenbarung, zusammen mit anderen Schritten oder Operationen, die hierin weder präsentiert noch beschrieben werden, erfolgen. Des Weiteren sind nicht alle veranschaulichten Schritte oder Operationen unbedingt notwendig, um ein Verfahren gemäß dem offenbarten Gegenstand zu implementieren. Das Verfahren 600 kann für jeden Block jedes Frames des Eingabesignals wiederholt werden. In einigen Implementierungen werden nur einige Blöcke des einen oder der mehreren Frames gemäß dem Verfahren 600 verarbeitet. Zum Beispiel können Blöcke bei der Durchführung von Verfahren 600, die unter Verwendung der Intra-Prädiktionsmodi kodiert werden, ausgespart werden.
-
Wenn es sich bei dem Verfahren 600 um ein Kodierungsverfahren handelt, kann es sich bei dem Eingabesignal zum Beispiel um den Videodatenstrom 300 handeln. Das Eingabesignal kann vom Computer, der das Verfahren 600 auf beliebige Art und Weise durchführt, empfangen werden. Zum Beispiel kann das Eingabesignal von der Bildwahrnehmungsvorrichtung 220 erfasst werden oder mittels einer anderen Vorrichtung über eine Eingabe, die mit dem Bus 212 verbunden ist, empfangen werden. Das Eingabesignal könnte in einer anderen Implementierung vom sekundären Speicher 214 abgerufen werden. Sonstige Arten des Empfangs und andere Quellen des Eingabesignals sind möglich. Wenn es sich zum Beispiel beim Verfahren 600 um ein Dekodierungsverfahren handelt, kann es sich bei dem Eingabesignal um einen kodierten Bitstream, wie etwa dem komprimierten Bitstream 420, handeln.
-
Unter der Verwendung des Eingabesignals wird eine erste Aufteilung eines Bereichs bei 602 ermittelt. Dies kann das Ermitteln einer ersten Aufteilung mindestens eines Abschnitts eines Frames, das sich vor einem gegenwärtigen Frame in einer Videosequenz befindet, beinhalten.
-
Wenn es sich bei Verfahren 600 um ein Kodierungsverfahren handelt, kann das Ermitteln der ersten Aufteilung die Verwendung von Berechnungen der Ratenverzerrung einschließen. Wenn es sich beim Frame zum Beispiel um den ersten Frame in der Videosequenz handelt, kann die erste Aufteilung durch das Aufteilen des Frames in Blocks und das Ermitteln des besten Vorhersagemodus für die Blöcke aus einer Vielzahl verfügbarer Vorhersagemodi, wie z. B. vom niedrigsten Ratenverzerrungswert gemäß dem Kodierungsverfahren aus 4 ermittelt, durchgeführt werden. In einem Beispiel handelt es sich bei dem Block um einen 16×16 Pixel Block und die verfügbaren Vorhersagemodi können mehrere Intra-Prädiktionsmodi und Inter-Prädiktionsmodi für den Block und für die Unterblöcke des Blocks, deren Größen 8×16 Pixel, 16×8 Pixel, 8×8 Pixel, 8×4 Pixel, 4×8 Pixel, und 4×4 Pixel betragen, beinhalten. In einem anderen Beispiel handelt es sich bei dem Frame nicht um den ersten Frame in der Videosequenz. In einem derartigen Fall kann die erste Aufteilung, wie hierin beschrieben wird, auf Basis der Aufteilung des vorhergehenden Frames, z. B. des letzten Frames in der sich vor dem Frame befindlichen Videosequenz, ermittelt werden.
-
Wenn es sich bei Verfahren 600 um ein Dekodierungsverfahren handelt, kann das Ermitteln der ersten Aufteilung, das Ermitteln des Frames eines kodierten Video-Bitstreams, wie etwa demjenigen, der mit Bezug auf 5 beschrieben wird, beinhalten. Der dekodierte Frame wird gemäß der Aufteilung, die von der Kodiervorrichtung in einer Implementierung ermittelt wird, dekodiert.
-
Unabhängig davon, ob es sich bei Verfahren 600 um ein Kodierungs- oder Dekodierungsverfahren handelt, definiert die erste Aufteilung mindestens einen Prädiktions-Unterbereich eines ersten Framebereichs. Die erste Aufteilung wird bei 604 unter Verwendung eines Bewegungsvektors modifiziert. In einer Implementierung beinhaltet das Modifizieren der ersten Aufteilung das Modifizieren der ersten Aufteilung zu einer zweiten Aufteilung unter Verwendung eines Bewegungsvektors, der mindestens einen Prädiktions-Unterbereich eines ersten Bereichs aus der ersten Aufteilung vorhersagt. In einigen Fällen wird dies durch das Bewegen des Standorts des ersten Bereichs mittels des Bewegungsvektors innerhalb des Frames und anschließend durch das Modifizieren der ersten sich innerhalb der Grenzen der neuen Bereichsposition befindlichen Aufteilung mittels mindestens eines Bewegungsvektors eines Prädiktions-Unterbereichs erreicht, der zumindest zum Teil eine Überlappung mit dem neuen Bereich aufweist. In anderen Fällen wird dies durch das Modifizieren der ersten sich innerhalb der Grenzen des ersten Bereichs befindlichen und mittels des Bewegungsvektors durchgeführten Aufteilung erreicht.
-
Die 7A–7C sind Diagramme eines Beispiels, das verwendet wird, um das Verfahren 600 aus 6 zu erklären. Genauer gesagt erklären die 7A–7C das Modifizieren der ersten bei 604 stattfindenden Aufteilung des Verfahrens 600. Dieses Beispiel zeigt eine Aufteilung, die dazu führt, dass Bereiche die Form von Blöcken annehmen, weswegen der Begriff Block verwendet wird. Die Beschreibung des Verfahrens 600 mit Bezugnahme auf die 7A–7C könnte jedoch sowohl auf viereckige als auch auf nicht viereckige Bereiche angewendet werden.
-
7A stellt einen Abschnitt einer ersten Aufteilung 700 eines Frames dar, das sich vor einem gegenwärtigen Frame in einer Videosequenz befindet. In diesem Beispiel einer blockbasierten Aufteilung wird der erste Block 702 in nur einen einzigen Prädiktions-Unterblock unterteilt. Das bedeutet, dass der erste Block 702 aus 7A unter Verwendung eines einzelnen Bewegungsvektors, der von einem sich innerhalb der Grenzen des ersten Blocks 702 befindlichen Pfeils dargestellt wird, vorhergesagt wird. Mehrere andere Prädiktions-Unterblöcke der ersten Aufteilung 700 werden in 7A dargestellt. Insbesondere werden Prädiktion-Unterblöcke drei anderer Blöcke nach Beispiel beschriftet.
-
Der Block oberhalb des ersten Blocks 702 wird in vier gleich große Prädiktions-Unterblöcke aufgeteilt, von denen zwei als Prädiktions-Unterblock 706 und Prädiktions-Unterblock 708 gekennzeichnet werden. Der Prädiktions-Unterblock 706 wird unter Verwendung eines Bewegungsvektors vorhergesagt, der vom Pfeil dargestellt wird, der sich innerhalb der Grenzen des Prädiktions-Unterblocks 706 aus 7A befindet, während der Prädiktions-Unterblock 708 unter Verwendung eines Bewegungsvektors vorhergesagt wird, der von einem Pfeil dargestellt wird, der sich innerhalb der Grenzen des Prädiktionsblocks 708 aus 7A befindet. Die Bewegungsvektoren der Prädiktions-Unterblöcke 706, 708 unterscheiden sich voneinander oder der Abschnitt des Blocks, den sie darstellen, würde als ein einzelner Unterblock dargestellt werden. Die verbliebenen zwei Unterblöcke des sich oberhalb des ersten Blocks 702 befindlichen Blocks werden unter Verwendung verschiedener Vorhersagemodi und/oder verschiedener Bewegungsvektoren kodiert.
-
Der Block zur Rechten des obenstehenden Blocks wird auch in vier gleich große Prädiktions-Unterblöcke unterteilt, von denen einer als Prädiktions-Unterblock 710 gekennzeichnet ist. Wie durch den Punkt, der sich innerhalb der Grenzen des Prädiktions-Unterblocks 710 aus 7A befindet, dargestellt, wird der Prädiktions-Unterblock 710 unter Verwendung einer Intra-Prädiktion vorhergesagt. Die verbliebenen Prädiktions-Unterblöcke werden in diesem Beispiel nicht deswegen nicht gekennzeichnet, weil sie hier nicht verwendet werden, sondern weil sie jeweils unter Verwendung unterschiedlicher Prädiktionsmodi und/oder unterschiedlicher Bewegungsvektoren kodiert worden sind.
-
Der Block zur Rechten des ersten Blocks 702 wird in zwei gleich große Prädiktions-Unterblöcke unterteilt, von denen einer als Prädiktions-Unterblock 712 gekennzeichnet ist. Wie durch den Punkt, der sich innerhalb der Grenzen des Prädiktions-Unterblocks 712 aus 7A befindet, dargestellt, wird der Prädiktions-Unterblock 712 unter Verwendung einer Intra-Prädiktion vorhergesagt. Der verbliebene Prädiktions-Unterblock dieses Blocks wird in diesem Beispiel nicht deswegen nicht gekennzeichnet, weil er hier nicht verwendet wird, sondern weil er unter Verwendung eines unterschiedlichen Prädiktionsmodus kodiert worden ist.
-
Bei dem ersten Block 702 kann es sich um einen Block von 16×16 Pixel, einen Block von 32×32 Pixel oder einen Block einer anderen Größe handeln. Wenn es sich bei dem ersten Block 702 zum Beispiel um einen Block von 16×16 Pixel handelt, umfassen die Prädiktions-Unterblöcke 706, 708, 710 jeweils 8×8 Pixel und der Prädiktions-Unterblock 712 verfügt über 8×16 Pixel.
-
Wie bereits vorstehend erwähnt, kann die erste Aufteilung unter Verwendung eines Bewegungsvektors, der mindestens einen Prädiktions-Unterbereiche eines ersten Bereichs aus der ersten Aufteilung vorhersagt, zu einer zweiten Aufteilung modifiziert werden. Im Beispiel der 7A–7C wird dies durch das Bewegen des Standorts des ersten Bereichs (hier ein Block) mittels des Bewegungsvektors innerhalb des Frames und anschließend durch das Modifizieren der ersten sich innerhalb der Grenzen der neuen Bereichsposition befindlichen Aufteilung mittels mindestens eines Bewegungsvektors eines Prädiktions-Unterbereichs erreicht, der zumindest zum Teil eine Überlappung mit der neuen Position aufweist. Wie in 7A ersichtlich, wird der erste Block 702 zum Standort, der vom neuen Block 704 angegeben wird, bewegt. Die erste Aufteilung, die sich innerhalb der Grenzen des neuen Blocks 704 befindet, beinhaltet Abschnitte des ersten Blocks 702, der Prädiktions-Unterblöcke 706, 708, 710 und des Prädiktions-Unterblocks 712. Die Bewegungsvektoren der Prädiktions-Unterblöcke die zumindest zum Teil eine Überlappung mit dem neuen Block 704 aufweisen, beinhalten Bewegungsvektoren für den ersten Block 702 und die Prädiktions-Unterblöcke 706, 708. 7B stellt die Modifikation der ersten Aufteilung dar, wobei Grenzen, die von den Scheitelpunkten 720, 722 definiert werden, die sich zwischen angrenzenden Prädiktionsblöcken oder Unterblöcken innerhalb der Grenzen des neuen Blocks 704 befinden, von einem anderen Bewegungsvektor angepasst werden. Bei dem verwendeten Bewegungsvektor könnte sich um den einzigen der verfügbaren Bewegungsvektoren handeln, wie etwa den größten oder kleinsten Bewegungsvektor, und es könnte sich um eine Kombination der verfügbaren Bewegungsvektoren handeln, wie etwa einem Durchschnitt oder einem gewichteten Durchschnitt. Ein gewichteter Durchschnitt kann auf dem Abschnitt des neuen Blocks 704 (z. B. der Anzahl der Pixel im Bereich als Ganzes) basieren, der unter Verwendung jedes der Bewegungsvektoren vorhergesagt worden ist. 7C stellt die sich ergebende zweite Aufteilung 730 des neuen Blocks 704 dar, der fünf Prädiktions-Unterblöcke 732–740 beinhaltet.
-
Allgemeiner ausgedrückt, stellen die 7A–7C ein Verfahren dar, gemäß dem das Modifizieren der ersten Aufteilung das Anpassen der äußeren Grenzen des ersten Bereichs an eine aktualisierte Position innerhalb des Frames unter Verwendung des Bewegungsvektors umfasst, im Frame dessen die aktualisierte Position sich mit Abschnitten der Bereiche des Frames überschneidet (z. B. Abschnitte der Prädiktions-Unterbereiche). Dann werden die Scheitelpunkte (und mit ihnen die Grenzen) der Abschnitte der Bereiche innerhalb der aktualisierten Position vom selben Bewegungsvektor (oder einem unterschiedlichen Bewegungsvektor) bewegt, um die erste Aufteilung zu einer zweiten Aufteilung zu modifizieren.
-
Bei den 8A und 8B sind Diagramme eines anderen Beispiels, das verwendet wird, um das Verfahren 600 aus 6 zu erklären. In diesem Fall wird das Modifizieren der ersten Aufteilung unter Verwendung eines Bewegungsvektors durch das Modifizieren der ersten sich innerhalb der Grenzen des ersten Bereichs befindlichen und mittels des Bewegungsvektors durchgeführten Aufteilung erreicht. Aufgrund der Tatsache, dass die 8A und 8B eine Aufteilung in Blöcke darstellen, werden die Bereiche als Blöcke bezeichnet. Wie in 8A dargestellt, wird Block 800 in vier Prädiktions-Unterblöcke unterteilt, aus denen einer unter Verwendung eines Bewegungsvektors 802 vorhergesagt wird und die restlichen drei anhand einer Intraprädiktion vorhergesagt werden. In diesem Fall wird die modifizierte zweite Aufteilung für einen Block 810 dargestellt, im Falle dessen, wie in 7B ersichtlich, die Schnittstelle (Scheitelpunkt) zwischen den Prädiktions-Unterblöcken vom Bewegungsvektor 802 bewegt wird, um die erste Aufteilung seiner zweiten Aufteilung zu modifizieren.
-
Die Auswahl zwischen Bewegungsvektoren, die verwendet werden, um die Aufteilung zu modifizieren kann heuristisch, basierend auf, z. B. Vorhersagemodi oder Bewegungsvektor-Werten oder auf experimentelle Art und Weise durch das Testen verschiedener Techniken oder das Auswählen der einen Technik, die am besten für den Block (und den Frame), der gerade kodiert wird, geeignet ist, ermittelt werden. Die Technik, die verwendet wird, um die Aufteilung für jeden Block des Frames zu modifizieren, der gemäß 6 verarbeitet wird, kann von einer Flagge oder einem Identifikator identifiziert werden, der sich innerhalb des Bitstreams befindet, so dass die Dekodiervorrichtung dieselbe Aufteilung des nachfolgenden Frames generiert. Dies könnte in einem Frame-Header in dem Umfang gesendet werden, in dem dieselbe Technik für den Frame verwendet wird. Alternativ dazu und zusätzlich dazu kann der Bewegungsvektor, der verwendet wird, um die Aufteilung auf Basis eines Bereichs oder eines Segments zu modifizieren, in einen Bereich (z. B. einen Block) oder einen Segmentheader gesendet werden, um von der Dekodiervorrichtung verwendet werden. In einigen Implementierungen nur ein Modus-Identifikator von der Kodiervorrichtung gesendet werden, um anzugeben, dass die Aufteilung einer Region, eines Segments oder eines Frames unter Verwendung der Bewegungsvektoraufteilung des letzten Frames durchgeführt wurde, damit der Kodiervorrichtung in der Lage ist, die neue Aufteilung zu generieren. In einer Variation dieser Implementierungen wird das Verfahren 600 gemäß 5 nur an der Kodiervorrichtung durchgeführt und die Dekodiervorrichtung kann die aufgeteilten Bereiche, die sich innerhalb des Bitstreams befinden, dekodieren.
-
Sobald die modifizierte, zweite Aufteilung ermittelt wird, wird sie verwendet, um einen gegenwärtigen Bereich des gegenwärtigen Frames bei 606 zu kodieren oder zu dekodieren. Der gegenwärtige Bereich kann mit dem ersten Bereich ortsgleich sein. Zum Beispiel kann es sich beim gegenwärtigen Bereich und dem ersten Bereich ortsgleiche Blöcke handeln. Ortsgleiche Bereiche können über dieselben Koordinaten innerhalb unterschiedlicher Frames verfängen. Alternativ dazu kann der gegenwärtige Bereich innerhalb des gegenwärtigen Frames aus der ersten Bereichsposition von einem Bewegungsvektor, wie etwa dem Bewegungsvektor für den ersten Block 702 in einem Beispiel, verschoben werden. Das Kodieren des gegenwärtigen Bereichs beinhaltet das Kodieren der Prädiktions-Unterbereiche der zweiten Aufteilung durch das Generieren von Resten für die Prädiktions-Unterbereiche des gegenwärtigen Bereichs und das Kodieren der Rechte in den kodierten Bitstream mit erforderlichen Informationen für das Dekodieren des gegenwärtigen Bereichs. Zum Beispiel kann das Kodierungsverfahren die Verarbeitung der Reste unter Verwendung des Transformationsstadiums 404, des Quantifizierungsstadiums 406, und des Entropiekodierungsstadiums 408, wie mit Bezugnahme auf 4 beschrieben, beinhalten. Die Reste für jeden Prädiktions-Unterbereich können unter Verwendung unterschiedlicher Vorhersagemodi generiert werden, die mittels aufwendiger Tests an den verfügbaren Vorhersagemodi ermittelt werden, um den besten Modus für jeden von ihnen zu ermitteln, bzw. können anhand einer kleineren Liste von Vorhersagemodi auf Basis des vorhergehenden Vorhersagemodus für den ersten Bereich, ermittelt werden.
-
Wenn es sich bei Verfahren 600 um ein Dekodierverfahren handelt, kann die modifizierte Aufteilung verwendet werden, um die Größe der Reste für jeden Prädiktions-Unterbereich des gegenwärtigen Bereichs zur Dekodierung der Reste zu ermitteln und dann um einen Vorhersagebereich ähnlicher Größe für jeden davon zu generieren, um die Reste hinzuzufügen, um den gegenwärtigen Bereich zu rekonstruieren. Zum Beispiel kann das Dekodierungsverfahren die Verarbeitung des Rests unter Verwendung des Entropie-Dekodierstadiums 502, des Quantifizierungsstadiums 504, und des inversen Transformationsstadiums 506, wie mit Bezugnahme auf 5 beschrieben, beinhalten. Im Anschluss daran könnte der gegenwärtige Bereich am Rekonstruktionsstadium 510, wie auch mit Bezugnahme auf 5 beschrieben, rekonstruiert werden.
-
Während das Verfahren 600 mit Bezug auf bestimmte Beispiele mit Prädiktions-Unterblöcke von rechteckiger Form beschrieben worden ist, die unter Verwendung einer blockbasierten Aufteilungstechnik ausgebildet worden sind, kann das Verfahren 600 mit Bereichen verwendet werden, die sich aus verschiedenen Aufteilungstechniken für einen Frame ergeben. Das Verfahren 600 funktioniert sehr gut mit Masken, zum Beispiel mittels der Verwendung der Maske für den letzten Frame, der von einem Bewegungsvektor verschoben worden ist. Mit einer Maske, die über eine Grenze zwischen zwei im Allgemeinen angrenzenden und separat vorhergesagten Pixelbereichen verfügt, würde die erste Aufteilung zwei Prädiktions-Unterbereiche des ersten Bereichs definieren und die zweite Aufteilung würde zwei aktualisierte Prädiktions-Unterbereiche beinhalten, wobei eine Grenze zwischen den aktualisierten Prädiktions-Unterbereichen eine Grenze zwischen den ursprünglichen Prädiktions-Unterbereichen darstellt, die von einem Bewegungsvektor innerhalb des ersten Bereichs bewegt worden sind. Das bedeutet zum Beispiel, dass eine erste Aufteilung zwei Prädiktions-Unterbereiche eines ersten Bereichs unter Verwendung einer Maske definieren kann, wobei jeder der zwei Prädiktions-Unterbereiche eine gegenüberliegende Seite einer Grenze innerhalb der Maske darstellt. Dann beinhaltet das Modifizieren der ersten Aufteilung das Bewegen der Grenze zwischen der Maske mittels des Bewegungsvektors, um eine aktualisierte Grenze zur Vorhersage zu generieren, so dass die zweite Aufteilung zwei aktualisierte Prädiktions-Unterbereiche auf gegenüberliegenden Seiten der aktualisierten Grenze beinhaltet, wenn die aktualisierte Maske zur Vorhersage verwendet wird. Bereiche, die sich aus der Aufteilungstechnik ergeben, die beispielsweise Wedge, Farbe, Reste und drei Bewegungsvektormodi-Masken verwenden, könnten, gemäß Verfahren 600, insgesamt von der Bewegungsvektoraufteilung des letzten Frames profitieren.
-
Durch das Verwenden eines Bewegungsvektors, um eine vorhergehende Aufteilung des Frames zu ändern, um eine Gültigkeit für den neuen Frame zu erzielen, kann die Errechnung im Zusammenhang mit der Aufteilung bei der Kodierung eines neuen Frames auf ein Mindestmaß gesenkt werden. Die hierin aufgeführten Lehren stellen eine Option zur Vermeidung einer erneuten Aufteilung des gesamten Frames mit der Flexibilität bereit, den neu definierten Bereichen des Frames die Erlaubnis zu erteilen, über ihre eigenen Bewegungsvektoren und/oder Kodierungsmodi zu verfügen und separate Modi und Bewegungsvektoren für nicht viereckige Blöcke von Pixeln zu erlauben. Dies trägt zur Bereitstellung einer guten Vorhersage für die Kompression bei.
-
Die Aspekte der Kodierung und Dekodierung, die vorstehend beschrieben werden, veranschaulichen einige Beispiele von Kodierungs- und Dekodierungstechniken. Es ist jedoch selbstverständlich, dass das Kodieren und das Dekodieren, gemäß der Verwendung dieser Begriffe in den Ansprüchen, Komprimierung, Dekomprimierung, Transformation oder jede andere Verarbeitung oder Änderung von Daten bedeuten könnte.
-
So wie es hierin verwendet ist, bedeutet das Wort „Beispiel” „als ein Beispiel, eine Konkretisierung oder Darstellung dienend”. Jeglicher Gesichtspunkt oder Entwurf, der hierin als „Beispiel” beschrieben ist, ist nicht notwendigerweise als vorzugsweise oder vorteilhaft gegenüber sonstigen Gesichtspunkten oder Entwürfen aufzufassen. Das Ziel der Verwendung des Wortes „Beispiel” besteht darin, Konzepte auf eine konkrete Art und Weise präsentieren. Wie in dieser Anmeldung benutzt, soll der Begriff „oder” ein einschließendes „oder” und nicht ein ausschließendes „oder” bedeuten. Das heißt, wenn nicht anders angegeben oder aus dem Zusammenhang deutlich hervorgehend, soll der Ausdruck „X beinhaltet A oder B” alle der natürlichen einschließenden Permutationen bedeuten. Das heißt, wenn X A beinhaltet; X B beinhaltet; oder X sowohl A als auch B beinhaltet, dann ist unter allen der vorherigen Instanzen „X beinhaltet A oder B” erfüllt. Darüber hinaus kann die Verwendung des Artikels „ein” und „eine” in dieser Anmeldung und den beigefügten Ansprüchen generell so interpretiert werden, dass wenn nicht anders angegeben oder aus dem Zusammenhang deutlich „ein oder mehrere” gemeint ist, was in einer Singular-Form ausgedrückt wird. Außerdem soll die durchgängige Verwendung des Begriffs „eine Implementierung” oder „die Implementierung” nicht dasselbe wie Ausführungsform oder Implementierung bedeuten, es sei denn er wird ausdrücklich als eine solche bezeichnet.
-
Implementierungen der Übertragungsstation 102 und/oder der Empfangsstation 106 (und die Algorithmen, Verfahren, Anweisungen, usw., die darauf gespeichert sind und/oder davon ausgeführt werden, einschließlich von der Kodiervorrichtung 400 und der Dekodiervorrichtung 500) können mittels Hardware, Software oder einer Kombination davon realisiert werden. Die Hardware kann zum Beispiel Computer, Intellectual Property(IP)-Kerne, anwendungsspezifische integrierte Schaltungen (ASIC), programmierbare logische Anordnungen, optische Prozessoren, programmierbare logische Steuerungen, Mikrocode, Microcontroller, Server, Mikroprozessoren, digitale Signalprozessoren und alle sonstigen geeigneten Schaltungen beinhalten. In den Ansprüchen sollte der Begriff „Prozessor” als jede der vorstehend genannten Hardware umfassend, und zwar unabhängig davon, ob einzeln oder in Kombination, verstanden werden. Die Begriffe „Signal” und „Daten” werden austauschbar verwendet. Ferner müssen die Abschnitte der Übertragungsstation 102 und der Empfangsstation 106 nicht notwendigerweise auf dieselbe Weise implementiert werden.
-
Ferner können die Übertragungsstation 102 oder die Empfangsstation 106, zum Beispiel, gemäß einem Aspekt, unter Verwendung eines Allzweck-Computers oder eines Allzweck-Prozessors mit einem Computerprogramm implementiert werden, das, sofern es ausgeführt wird, alle entsprechenden Verfahren, Algorithmen und/oder Anwendungen, die hierin beschrieben werden, ausführt. Darüber hinaus oder alternativ dazu, kann zum Beispiel ein für einen bestimmten Zweck vorgesehener Computer/Prozessor verwendet werden, der eine andere Hardware umfassen kann, um jegliche der hierin beschriebenen Verfahren, Algorithmen oder Anweisungen auszuführen.
-
Die Übertragungsstation 102 und die Empfangsstation 106 können zum Beispiel auf Computer in einem Videokonferenzsystem implementiert werden. Alternativ dazu kann die Übertragungsstation 102 auf einem Server implementiert werden und die Empfangsstation 106 kann auf einem vom Server separaten Gerät, wie etwa einem handgehaltenen Kommunikationsgerät, implementiert werden. Im vorliegenden Fall kann die Übertragungsstation 102 Inhalte, die eine Kodiervorrichtung 400 verwenden, in ein kodiertes Videosignal kodieren und das kodierte Videosignal zum Kommunikationsgerät übermitteln. Im Gegenzug kann das Kommunikationsgerät dann das kodierte Videosignal unter Verwendung einer Dekodiervorrichtung 500 dekodieren. Alternativ dazu kann das Kommunikationsgerät Inhalte, die lokal auf dem Kommunikationsgerät gespeichert werden, wie zum Beispiel Inhalte, die nicht von der Übertragungsstation 102 übermittelt worden sind, dekodieren. Andere geeignete übertragende oder empfangende Implementierungsschemas stehen zur Verfügung. Zum Beispiel kann es sich bei der Empfangsstation 106 im Allgemeinen eher um einen stationären Personal Computer als um ein tragbares Kommunikationsgerät handeln und/oder ein Gerät, einschließlich einer Kodiervorrichtung 400 kann auch eine Dekodiervorrichtung 500 beinhalten.
-
Ferner können sämtliche oder ein Abschnitt der Implementierungen der vorliegenden Erfindung die Form eines Computerprogrammprodukts annehmen, auf das zum Beispiel von einem physisch greifbaren computerverwendbaren oder computerlesbaren Medium zugegriffen werden kann. Bei einem computerverwendbaren oder computerlesbaren Medium kann es sich um jedes Gerät handeln, welches das Programm zum Beispiel auf physisch greifbare Weise enthalten, speichern, kommunizieren oder transportieren kann, damit es von jedem beliebigen Prozessor oder in Verbindung mit jedem beliebigen Prozessor verwendet werden kann. Bei dem Medium kann es sich zum Beispiel um ein elektronisches, magnetisches, optisches, elektromagnetisches oder ein Halbleitergerät handeln. Andere geeignete Medien stehen ebenfalls zur Verfügung.
-
Die vorstehend beschriebenen Ausführungsformen, Implementierungen und Aspekte wurden beschrieben, um ein einfaches Verständnis der vorliegenden Erfindung zu ermöglichen und schränken die vorliegende Erfindung nicht ein. Die Erfindung soll im Gegenteil verschiedene Modifizierungen und äquivalente Anordnungen innerhalb des Umfangs der angehängten Ansprüche abdecken, deren Schutzbereich die breiteste Interpretation erfahren soll, um so alle solche Modifikationen und äquivalenten Aufbauten zu umfassen, wie es unter dem Gesetz vorgesehen ist.