DE60310800T2 - Approximierter Kubikfilter - Google Patents

Approximierter Kubikfilter Download PDF

Info

Publication number
DE60310800T2
DE60310800T2 DE60310800T DE60310800T DE60310800T2 DE 60310800 T2 DE60310800 T2 DE 60310800T2 DE 60310800 T DE60310800 T DE 60310800T DE 60310800 T DE60310800 T DE 60310800T DE 60310800 T2 DE60310800 T2 DE 60310800T2
Authority
DE
Germany
Prior art keywords
filter
pixel
values
bicubic
interpolation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60310800T
Other languages
English (en)
Other versions
DE60310800D1 (de
Inventor
Sridhar Seattle Srinivasan
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Application granted granted Critical
Publication of DE60310800D1 publication Critical patent/DE60310800D1/de
Publication of DE60310800T2 publication Critical patent/DE60310800T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/523Motion estimation or motion compensation with sub-pixel accuracy
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B66HOISTING; LIFTING; HAULING
    • B66CCRANES; LOAD-ENGAGING ELEMENTS OR DEVICES FOR CRANES, CAPSTANS, WINCHES, OR TACKLES
    • B66C13/00Other constructional features or details
    • B66C13/04Auxiliary devices for controlling movements of suspended loads, or preventing cable slack
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B66HOISTING; LIFTING; HAULING
    • B66CCRANES; LOAD-ENGAGING ELEMENTS OR DEVICES FOR CRANES, CAPSTANS, WINCHES, OR TACKLES
    • B66C1/00Load-engaging elements or devices attached to lifting or lowering gear of cranes or adapted for connection therewith for transmitting lifting forces to articles or groups of articles
    • B66C1/10Load-engaging elements or devices attached to lifting or lowering gear of cranes or adapted for connection therewith for transmitting lifting forces to articles or groups of articles by mechanical means
    • B66C1/12Slings comprising chains, wires, ropes, or bands; Nets
    • B66C1/16Slings with load-engaging platforms or frameworks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Mechanical Engineering (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Picture Signal Circuits (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Polarising Elements (AREA)
  • Networks Using Active Elements (AREA)
  • Electric Double-Layer Capacitors Or The Like (AREA)
  • Control Of Motors That Do Not Use Commutators (AREA)
  • Filters And Equalizers (AREA)

Description

  • GEBIET DER TECHNIK
  • Im Folgenden werden Verfahren und Systeme für das annähernd bikubische Filtern beschrieben. So verwendet beispielsweise ein Videokodierer oder -dekodierer ein annähernd bikubisches Filter beim Berechnen von Pixelwerten an Viertelpixel-Positionen in Bezugs-Videobildern.
  • HINTERGRUND DER TECHNIK
  • Digitalvideo verbraucht große Mengen an Speicher- und Übertragungskapazität. Eine typische unverarbeitete Videosequenz enthält 15 oder 30 Videobilder (Frames) pro Sekunde. Jeder Frame kann zehntausende oder hunderttausende Pixel (auch Bildpunkte genannt) enthalten. Jedes Pixel repräsentiert ein winziges Element des Bildes. In unverarbeiteter Form stellt ein Computer im Allgemeinen ein Pixel mit 24 Bits dar. So kann ein Pixel beispielsweise einen 8-Bit-Luminanzwert (auch Luma-Wert genannt), der die Graustufenkomponente des Pixels definiert, und zwei 8-Bit-Chrominanzwerte (auch Chroma-Werte genannt) umfassen, die die Farbkomponente des Pixels definieren. Dementsprechend kann die Anzahl von Bits pro Sekunde, oder die Bitrate, einer typischen unverarbeiteten Videosequenz 5 Millionen Bits pro Sekunde oder mehr betragen.
  • Viele Computer und Computernetzwerke verfügen nicht über die Ressourcen zum Verarbeiten von unverarbeitetem Digitalvideo. Aus diesem Grund nutzen Techniker Kompression (auch Kodierung oder Enkodierung genannt), um die Bitrate von Digitalvideo zu reduzieren. Die Kompression kann verlustfrei sein, in diesem Fall wird die Qualität des Videos zwar nicht gemindert, jedoch ist die Reduzierung der Bitrate durch die Komplexität des Videos begrenzt. Die Kompression kann auch verlustbehaftet sein, in diesem Fall kommt es zwar zur Minderung der Qualität des Videos, es können jedoch drastische Reduzierungen der Bitrate erreicht werden. Die Dekompression ist der umgekehrte Vorgang der Kompression.
  • Im Allgemeinen umfassen Verfahren zur Videokompression Intraframe-Kompression und Interframe-Kompression. Bei Verfahren der Intraframe-Kompression werden einzelne Frames, typischerweise I-Frames oder Key-Frames genannt, komprimiert. Bei Verfahren der Interframe-Kompression werden Frames mit Bezug auf vorangehende und/oder nachfolgende Frames, die typischerweise vorhergesagte Frames, P-Frames oder B-Frames genannt werden, komprimiert.
  • Windows Media Video, Version 8 („WMV8") der Microsoft Corporation, umfasst einen Videokodierer und einen Videodekodierer. Der WMV8 Kodierer wendet Intraframe- und Interframe-Kompression an, und der WMV8 Dekodierer wendet Intraframe- und Interframe-Dekompression an. Die Interframe-Kompression in dem WMV8 Kodierer verwendet eine blockbasierte Vorhersagekodierung mit Bewegungskompensation gefolgt von einer Transformationskodierung des Restfehlers.
  • In WMV8 wird ein Frame durch drei Pixelebenen repräsentiert: eine Luminanz- (Y) Ebene der Luminanz-Pixelwerte und zwei Chrominanz- (U, V) Ebenen der Chrominanz-Pixelwerte. Die Auflösung der Y-Ebene ist doppelt so hoch wie die Auflösung der U- und V-Ebene in horizontaler und vertikaler Richtung. Dementsprechend hat ein Frame mit 320 × 240 Pixeln eine Y-Ebene mit 320 × 240 Pixeln und eine U- und V-Ebene mit je 160 × 120 Pixeln.
  • Der WMV8 Kodierer unterteilt einen vorhergesagten Frame in 8 × 8 große Pixelblöcke. Gruppen von vier 8 × 8-Luminanzblöcken und zwei an der gleichen Stelle angeordneten 8 × 8-Chrominanzblöcken (einer für die Chrominanz- (U) Ebene, und einer für die Chrominanz- (V) Ebene) bilden 16 × 16 große Makroblöcke. Dementsprechend enthält ein jeder 16 × 16 großer Makroblock vier 8 × 8-Luminanzblöcke und zwei 8 × 8 große Chrominanzblöcke.
  • Der WMV8 Kodierer führt für einen Makroblock eines vorhergesagten Frames Bewegungsschätzung durch. Die Bewegungsschätzung aproximiert die Bewegung eines Makroblockes in einem vorhergesagten Frame durch Suchen eines Makroblockes von einem Bezugs-Videobild und Anpassen dieses Makroblockes mit dem Makroblock in dem vorhergesagten Frame. In 1 berechnet der WMV8 Kodierer beispielsweise einen Bewegungsvektor für einen Makroblock (115) in dem vorhergesagten Frame (110). Um den Bewegungsvektor zu berechnen, durchsucht der Kodierer einen Suchbereich (135) eines Bezugsframes (130). Innerhalb des Suchbereiches (135) vergleicht der Kodierer die Luminanzwerte des Makroblockes (115) von dem vorhergesagten Frame (110) mit den Luminanzwerten von verschiedenen in Frage kommenden Blöcken von dem Bezugsframe (130), um eine gute Übereinstimmung zu finden. Der WMV8 Kodierer kann die Bewegungsvektorgenauigkeit einschalten und kann einen Suchbereich und Bewegungsvektoren mit Ganzpixel-, Halbpixel- oder Viertelpixel-Auflösung in horizontaler Richtung und mit Vollpixel- oder Halbpixel-Auflösung in vertikaler Richtung verwenden. Mit subpixelgenauen Bewegungsvektoren kann der WMV8 Kodierer die Subpixel-Bewegung in einer Videosequenz annähern.
  • Während der Bewegungskompensation verwendet der WMV8 Kodierer die Bewegungsvektoren für Makroblöcke des vorhergesagten Frames, um die Prädiktoren für die Makroblöcke von dem Bezugsframe zu bestimmen. Der WMV8 Kodierer berechnet für jeden der bewegungsvorhergesagten Makroblöcke die Differenz (Rest oder Restfehler genannt) zwischen dem ursprünglichen Makroblock und seinem Prädiktor. Der WMV8 Kodierer unterteilt den Rest in Blöcke und führt verlustbehaftete Kompression der Restfehlerblöcke durch. Um die bewegungsvorhergesagten Makroblöcke für den vorhergesagten Frame zu rekonstruieren, führt der WMV8 Kodierer eine Dekompression der Restfehler durch und addiert diese für die jeweiligen Makroblöcke zu den Prädiktoren hinzu.
  • Auch der WMV8 Dekodierer verwendet die Bewegungsvektoren für Makroblöcke des vorhergesagten Frames, um die Prädiktoren für die Makroblöcke des Bezugsframes zu bestimmen. Um die bewegungsvorhergesagten Makroblöcke des vorhergesagten Frames zu bestimmen, führt der WMV8 Dekodierer Dekompression der Restwerte durch und addiert diese für die Makroblöcke zu den Prädiktoren hinzu.
  • Während der Bewegungsschätzung oder der Bewegungskompensation muss der WMV8 Kodierer oder Dekodierer, wenn ein Bewegungsvektor eine Subpixelgenauigkeit (das heißt, Halbpixel- oder Viertelpixel) aufweist, Pixelwerte an Subpixel-Positionen in dem Bezugsframe bestimmen. Der WMV8 Kodierer oder Dekodierer erzeugt unter Verwendung von Interpolationsfiltern Werte für die Subpixel-Positionen. 2 zeigt die Subpixel-Abtastwert-Positionen H0, H1, H2, die Werte besitzen, die durch Interpolation von Ganzpixel-Werten a1 b1 c1 ... p berechnet werden.
  • Wenn mit Halbpixelgenauigkeit der Bewegungsvektoren gearbeitet wird, lauten die Interpolationsfilter für die Luminanz-Pixelwerte an den drei unterschiedlichen Halbpixel-Positionen H0, H1, H2 wie folgt: H0 = (f + g + R2) >> 1 (1) H1 = (f + j + R2) >> 1 (2) und H2 = (f + g + j + k + R1) >> 2 (3),
  • Wobei R1 und R2 Rundungs-Steuerungswerte sind, die durch ein 1-Bit-Rundungssteuerungs-Flag gesteuert werden, das den Rundungsmodus für einen bestimmten Frame anzeigt. Wenn das Rundungssteuerungs-Flag auf den Wert 0 eingestellt wird, dann ist R1 = 2 und R2 = 1. Wenn das Rundungssteuerungs-Flag auf 1 eingestellt wird, dann ist R1 = R2 = 0. Der Wert des Rundungssteuerungs-Flags wechselt zwischen 1 und 0 für jeden P-Frame. Bei jedem I-Frame wird der Wert des Rundungssteuerungs-Flags auf den Wert 0 zurückgesetzt. Dementsprechend arbeitet die Rundungssteuerung frameweise.
  • Die Gleichungen 1, 2 und 3 sind Beispiele für bilineare Interpolation. Die bilineare Interpolation ist ein schneller Vorgang und tendiert dazu, Pixelwerte zu glätten. Das Glätten kann wünschenswerte Effekte haben (so wie beispielsweise das Verringern der Wahrnehmbarkeit von Quantisierungsrauschen), es kann jedoch auch zu dem Verlust von gültigen Pixelinformationen führen.
  • Wenn mit Viertelpixelgenauigkeit der Bewegungsvektoren gearbeitet wird, wendet der WMV8 Kodierer oder Dekodierer zunächst bikubische Filter zum Interpolieren der Luminanz-Pixelwerte an Halbpixel-Positionen an. Der Vorgang der bikubischen Interpolation ist zwar langsamer als die bilineare Interpolation, tendiert jedoch dazu, Kantenwerte zu behalten und resultiert in einem geringeren Verlust von gültigen Pixelinformationen. Die bikubischen Filter für die drei unterschiedlichen Halbpixel-Positionen lauten wie folgt: H0 = (–e + 9f + 9g – h + 8) >> 4 (4), H1 = (–b + 9f + 9j – n + 8) >> 4 (5) und H2 = (–t0 + 9t1 + 9t2 – t3 +8) >> 4 (6),
  • Wobei t0, t1, t2, t3 wie folgt berechnet werden: t0 = (–a + 9b + 9c – d + 8) >> 4 (7), t1 = (–e + 9f + 9g – h + 8) >> 4 (8), t2 = (–i + 9j + 9k – i + 8) >> 4 (9) und t3 = (–m + 9n + 9o – p + 8) >> 4 (10).
  • Die Gleichungen (4) bis (10) können in Ausgaben außerhalb des Bereiches der Eingabewerte resultieren. So produziert beispielsweise in jeder der Gleichungen (4) bis (10) die Reihe der Werte 0 255 255 0 für die 8-Bit-Eingabe (Bereich 0 ... 255) einen Ausgabewert von 287. Dementsprechend führt der Kodierer oder der Dekodierer ein Begrenzen (oder „Beschneiden") des Ausgabewertes einer jeglichen der Gleichungen (4) bis (10) durch, damit dieser innerhalb des gültigen Bereiches liegt. So werden beispielsweise für 8-Bit-Ausgabewerte Werte, die kleiner als 0 sind, auf 0 abgeändert, und Werte, die größer als 255 sind, werden auf 255 abgeändert. Begrenzen geht zwar das Problem des Überschreitens der Bereiche an, verlangsamt jedoch den Rechenprozess. Darüber hinaus resultiert das Begrenzen in einem Verlust der Genauigkeit.
  • Anschließend berechnet der WMV8 Kodierer oder Dekodierer in einer darauffolgenden Interpolationsstufe die Pixelwerte an bestimmten Viertelpixel-Positionen. Diese Viertelpixel-Positionen befinden sich in horizontaler Richtung entweder zwischen zwei Halbpixel-Positionen oder zwischen einer Ganzpixel-Position und einer Halbpixel-Position. Für diese Viertelpixel-Positionen wendet der WMV8 Kodierer oder Dekodierer bilineare Interpolation (das heißt (x + y +1) >> 1) unter Verwendung der zwei in horizontaler Richtung benachbarten Halbpixel-/Ganzpixel-Positionen ohne Rundungssteuerung an.
  • Wenn die Luminanz-Bewegungsvektoren berechnet sind, leitet der WMV8 Kodierer oder Dekodierer an der gleichen Position vorhandene Chrominanz-Bewegungsvektoren her. Da eine Chrominanzebene in WMV8 sowohl in horizontaler als auch in vertikaler Rich tung halb so groß wie eine Luminanzebene ist, müssen die Werte der Luminanz-Bewegungsvektoren zu geeigneten Werten von Chrominanz-Bewegungsvektoren skaliert werden. In WMV8 umfasst dieser Umwandlungsprozess das Halbieren der Luminanz-Bewegungsvektoren und das Runden der resultierenden Chrominanz-Bewegungsvektoren mit Halbpixelgenauigkeit. Demzufolge werden Luminanz-Bewegungsvektoren mit einer Halbpixelgenauigkeit nicht in Chrominanz-Bewegungsvektoren mit einer Viertelpixelgenauigkeit umgewandelt. Darüber hinaus arbeitet das Chrominanz-Runden in WMV8 in einem einzigen Modus und kann nicht durch den Benutzer modifiziert oder ausgewählt werden.
  • In WMV8 können die Pixelwerte an den Subpixel-Positionen in einem Bezugsframe mitunter einen Unterlauf oder einen Überlauf erfahren. So kann beispielsweise der Luminanz-Pixelwert an einer Viertelpixel-Position 271 sein (wobei der Wert außerhalb des Bereiches 0 ... 255 liegt), wenn der Wert der benachbarten Ganzpixel-Position 255 ist und der Wert der benachbarten Halbpixel-Position 287 ist (0 + 9·255 + 9·255 – 0 + 8 >> 4 = 287) (255 + 287 + 1 >> 1 = 271). Um dieses Problem anzugehen, führen der WMV8 Kodierer und Dekodierer gegebenenfalls nach dem Addieren der Restfehlerblöcke zu dem Prädiktor für einen Makroblock ein Begrenzen der rekonstruierten Werte für den Makroblock durch, um innerhalb des Bereiches 0 ... 255 zu bleiben.
  • Neben WMV8 beziehen sich mehrere internationale Standards auf die Videokompression und -dekompression. Zu diesen Standards gehören die Standards 1, 2 und 4 der Motion Picture Experts Group [„MPEG"] sowie die Standards H.261, H.262 und H.262 der Internationalen Fernmeldeunion [„ITU" International Telecommunication Union]. Wie auch WMV8 verwenden diese Standards eine Kombination von Intraframe- und Interframe-Kompression, obgleich die Standards typischerweise hinsichtlich der Einzelheiten der angewendeten Kompressionsverfahren von WMV8 abweichen.
  • Es gibt mehrere Standards (beispielsweise MPEG 4 und H.263), die sich mit Halbpixel-Bewegungsschätzung und -kompensation unter Verwendung von bilinearen Filtern und allgemeiner Rundungssteuerung beschäftigen. Darüber hinaus werden laut H.262 die Chrominanz-Bewegungsvektoren, die typischerweise eine Viertelpixelauflösung aufweisen (das heißt, eine Hälfte der Auflösung der Halbpixel-Luminanz-Bewegungsvektoren) auf entweder Halbpixelgenauigkeit oder Ganzpixelgenauigkeit gerundet, so dass keine Viertelpixel-Werte im Chrominanzraum zugelassen sind. Für zusätzliche Einzelheiten zur Bewegungsschätzung und -kompensation in den Standards wird auf die Spezifikationen der Standards selbst verwiesen.
  • Bei der Bewegungsschätzung und -kompensation handelt es sich um effektive Kompressionsverfahren, jedoch weisen die verschiedenen bisherigen Verfahren zur Bewegungsschätzung und -kompensation (so wie laut WMV8 und den oben erwähnten Standards) mehrere Nachteile auf, einschließlich der folgenden:
    • (1) Wenn Pixelwerte an Subpixel-Positionen in Bezugsframes berechnet werden, verlieren die Kodierer und Dekodierer unnötigerweise an Genauigkeit bei den Zwischenwerten. Wenn beispielsweise der Pixelwert für eine Viertelpixel-Position in WMV8 berechnet wird, werden die Zwischenwerte an den Halbpixel-Positionen trotz der Tatsache, dass möglicherweise eine größere Bit-Tiefe zur Verfügung steht, um vier Bits nach rechts verschoben. Darüber hinaus führen der WMV8 Kodierer/Dekodierer ein Begrenzen der Zwischenwerte während der zweistufigen Interpolation der Viertelpixel-Positionen durch, wodurch der Rechenprozess verlangsamt und ein unnötiger Verlust von Genauigkeit verursacht wird.
    • (2) In vielen Fällen ist die Interpolation für Pixelwerte bei der Bewegungsschätzung- und kompensation für Viertelpixel uneffizient. So erfordert beispielsweise in WMV8 die Berechnung einer eindimensionalen Viertelpixel-Position die Verwendung eines Filters für eine Halbpixel-Position gefolgt von der Verwendung eines bilinearen Filters.
    • (3) Die Kodierer und Dekodierer begründen die Anhäufung von Rundungsfehlern, die in der mehrstufigen Interpolation zustande kommen kann, nicht. Rundungsfehler treten beispielsweise dann auf, wenn Pixelwerte in einer Videosequenz wiederholt von Frame zu Frame abgerundet werden. Dieser Rundungsfehler kann zu wahrnehmbaren Artefakten in Videosequenzen mit einer geringen Qualität und einer niedrigen Bitrate führen. Wenn beispielsweise der WMV8 Kodierer und Dekodierer Interpolation für einen Pixelwert an einer Viertelpixel-Position in mehreren Stufen durchführen, wird keine Rundungssteuerung verwendet. Stattdessen werden die Ergebnisse einer jeden Stufe auf die gleiche Weise in einer jeden Interpolationsstufe (und ohne Rundungssteuerung) gerundet; und
    • (4) Chrominanz-Runden wird nicht mit Viertelpixelgenauigkeit durchgeführt, und es erfolgt keine Steuerung hinsichtlich der Rundungsoptionen für Chrominanz-Bewegungsvektoren. So runden beispielsweise der WMV8 Kodierer und Dekodierer sämtliche Chrominanz-Bewegungsvektoren auf einen Halbpixel-Wert und arbeiten in lediglich einem einzigen Modus.
  • In Anbetracht der überaus großen Bedeutung von Bewegungsschätzung und -kompensation für Digitalvideo, ist es kein Zufall, dass Bewegungsschätzung und -kompensation stark entwickelte Bereiche sind. Wie auch immer die Vorteile der bisherigen Verfahren zu Bewegungsschätzung und -kompensation sein mögen, weisen sie nicht die Vorteile der folgenden Verfahren und Systeme auf.
  • Dokument 2 343 579 A beschreibt ein hybrides linear-bikubisches Interpolationsverfahren und entsprechende Vorrichtung.
  • Dokument US 5.929.940 beschreibt ein Verfahren und eine Vorrichtung zur Bewegungsschätzung zwischen Bildern sowie ein System zum Kodieren von segmentierten Bildern.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Es ist die Aufgabe der Erfindung, ein System und ein Verfahren bereitzustellen, die die Effektivität der Bewegungsschätzung verbessern.
  • Diese Aufgabe wird durch die Erfindung gemäß den unabhängigen Ansprüchen erfüllt.
  • Bevorzugte Ausführungsformen werden durch die abhängigen Ansprüche definiert.
  • Zusammengefasst formuliert, bezieht sich die ausführliche Beschreibung auf verschiedene Verfahren und Systeme für das annähernd bikubische Filtern. In Videokodierungs- und -dekodierungsanwendungen verwenden ein Videokodierer und -dekodierer beispielsweise ein oder mehrere annähernd bikubische Filter für das Berechnen von Pixelwerten an Subpixel-Positionen in Bezugs-Videobildern. Dadurch wird die Effektivität der Bewegungsschätzung unter Verwendung der berechneten Pixelwerte verbessert. Gleichzeitig ist das annähernd bikubische Filtern hinsichtlich des Rechenaufwandes relativ effizient.
  • Eine Komponente wie beispielsweise ein Videokodierer oder -dekodierer berechnet unter Verwendung eines annähernd bikubischen Filters einen Wert an einer Position. Das annähernd bikubische Filter funktioniert im Wesentlichen wie ein bikubisches Filter, was wünschenswert ist, es weist jedoch für eine einfachere Berechnung andere Filterkoeffizienten und/oder ein geringere Auflösung auf. So haben beispielsweise die Filterkoeffizienten des annähernd bikubischen Filters eine Summe von 64 (und nicht 128) für ein Filter einer geringeren Auflösung für Viertelpixel-Abtastwertpositionen.
  • Ein Videokodierer oder -dekodierer kann unter Verwendung eines annähernd bikubischen Filters Pixelwerte an verschiedenen Subpixel-Positionen in Bezugs-Videobildern berechnen. Die Subpixel-Positionen sind beispielsweise um Viertelpixel (oder Dreiviertel-Pixel) verschobene Positionen in einer Dimension oder in zwei Dimensionen.
  • Die verschiedenen Verfahren und Systeme können in Kombination oder einzeln verwendet werden. Zusätzliche Leistungsmerkmale und Vorteile werden anhand der folgenden ausführlichen Beschreibung offensichtlich, die in Bezug auf die beigefügten Zeichnungen gegeben wird.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist ein Diagramm, das die Bewegungsschätzung in einem Videokodierer in Übereinstimmung mit dem Stand der Technik darstellt.
  • 2 ist ein Schema, das die Subpixel-Positionen für die Interpolation bei der Subpixel-Bewegungsschätzung und -kompensation in Übereinstimmung mit dem Stand der Technik darstellt.
  • 3 ist ein Blockdiagramm einer geeigneten Rechenumgebung, in der verschiedene beschriebene Ausführungsformen umgesetzt werden können.
  • 4 ist ein Blockdiagram eines allgemeinen Video-Kodiersystems, das in verschiedenen beschriebenen Ausführungsformen verwendet wird.
  • 5 ist ein Blockdiagramm eines allgemeinen Video-Dekodiersystems, das in verschiedenen Ausführungsformen verwendet wird.
  • 6 ist ein Schema, das die Positionen für die Interpolation von Pixelwerten während der Subpixel-Bewegungsschätzung und -kompensation darstellt.
  • 7 ist ein Schema, das Ganzpixel-Positionen mit Pixelwerten darstellt, welche zum Berechnen der interpolierten Pixelwerte für Subpixel-Positionen verwendet werden.
  • 8 ist ein Diagramm, das ein zweistufiges Interpolationsverfahren für das Interpolieren von Werten an Subpixel-Positionen darstellt.
  • 9 ist ein Schema, das eine Halbpixel-Abtastwertposition in horizontaler Richtung, eine Halbpixel-Abtastwertposition in vertikaler Richtung und die Zwischenwerte an Subpixel-Positionen darstellt, die zum Berechnen des Wertes an der Abtastwertposition verwendet werden.
  • 10 ist ein Schema, das eine Viertelpixel-Abtastwertposition in horizontaler Richtung, eine Halbpixel-Abtastwertposition in vertikaler Richtung und eine Halbpixel-Abtastwertposition in horizontaler Richtung, eine Viertelpixel-Abtastwertposition in vertikaler Richtung sowie die Zwischenwerte an Subpixel-Positionen darstellt, die zum Berechnen des Wertes an den Abtastwertpositionen verwendet werden.
  • 11 ist ein Schema, das eine Viertelpixel-Abtastwertposition in horizontaler Richtung, eine Viertelpixel-Abtastwertposition in vertikaler Richtung und die Zwischenwerte an Subpixel-Positionen darstellt, die zum Berechnen des Wertes an der Abtastwertposition verwendet werden.
  • 12 ist ein Diagramm, das ein mehrstufiges Interpolationsverfahren mit Zwischenwerten mit einem verbesserten dynamischen Bereich (in Bits) darstellt.
  • 13 ist ein Diagramm, dass ein mehrstufiges Interpolationsverfahren mit übersprungenem „Clamping" (Begrenzen) darstellt.
  • 14 ist ein Diagramm, das ein mehrstufiges Interpolationsverfahren mit Bit-Verschiebungsaufschiebung darstellt.
  • 15 ist ein Diagramm, das ein mehrstufiges Interpolationsverfahren unter Verwendung einer mit den Stufen wechselnden Rundungssteuerung darstellt.
  • 16 ist ein Ablaufplan, der ein Verfahren zum Auswählen aus mehreren Modi des Chrominanz-Rundens und der Interpolation darstellt.
  • 17 ist eine Tabelle, die einen ersten Modus für Chrominanz-Runden darstellt.
  • 18 ist eine Tabelle, die einen zweiten Modus für Chrominanz-Runden darstellt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die beschriebenen Ausführungsformen beziehen sich auf Verfahren und Systeme für die Subpixel-Interpolation bei der Bewegungsschätzung- und kompensation. Verschiedene Ausführungsformen beziehen sich auf Verfahren und Systeme zum Beibehalten von Genauigkeit in der mehrstufigen Interpolation durch Aufschieben von Begrenzen und/oder Bit-Verschiebung (Operationen, die in dem Verlust von Genauigkeit resultieren können) bis auf spätere Stufen in der Interpolation. Andere Ausführungsformen beziehen sich auf effiziente Filter oder Rundungsoperationen für mehrstufige Interpolation.
  • Ein Kodierer oder Dekodierer führt Subpixel-Interpolation in einem Bezugsframe oder in einem Abschnitt eines Frames, wie beispielsweise einem oder mehreren Blöcken oder Makroblöcken durch. Der Kodierer/Dekodierer berechnet Pixelwerte an Subpixel-Positionen innerhalb des Bezugsframes. Anschließend kann der Kodierer/Dekodierer unter Verwendung der subpixelgenauen Bewegungsvektoren Bewegungsschätzung durchführen.
  • In einigen Ausführungsformen führt ein Videokodierer oder Videodekodierer die Subpixel-Interpolation in einer Videokodierungs- oder dekodierungsanwendung durch. Alternativ dazu führt ein andere Kodierer oder Dekodierer oder ein anderer Typ von Komponente die Subpixel-Interpolation oder ein anderes im Folgenden beschriebenes Verfahren in einem anderen Typ von Anwendung durch.
  • Als eine Alternative zum Durchführen der Subpixel-Interpolation in Bezugsframes führt in einigen Ausführungsformen ein Kodierer/Dekodierer die Subpixel-Interpolation in Halbbildern, Objektschichten oder anderen Bildern durch.
  • In einigen Ausführungsformen kommt es zu Subpixel-Interpolation durch Berechnen von Pixelwerten in den Luminanz- und Chrominanzebenen eines Bezugsframes im YUV-Farbraum. Alternativ dazu ist der Farbraum ein anderer (zum Beispiel YIQ oder RGB).
  • Die verschiedenen Verfahren und Systeme können in Kombination oder einzeln verwendet werden. Verschiedene Ausführungsbeispiele setzen ein oder mehrere der gewünschten Verfahren und Systeme um. Obgleich die Operationen für diese Verfahren im Sinne einer verständlichen Darstellung typischerweise in einer bestimmten, sequenziellen Reihenfolge beschrieben werden, wird darauf hingewiesen, dass diese Art und Weise der Beschreibung geringfügige Umordnungen in der Reihenfolge der Beschreibung umfasst, es sei denn, es ist eine ganz bestimmte Reihenfolge erforderlich. So können beispielsweise Operationen, die in einer bestimmten Reihenfolge beschrieben sind, in einigen Fällen eine neugeordnete Reihenfolge haben oder gleichzeitig ausgeführt werden. Darüber hinaus zeigen der Einfachheit halber Ablaufpläne typischerweise nicht die verschiedenen Arten und Weisen, in denen bestimmte Verfahren zusammen mit anderen Verfahren angewendet werden können.
  • In einigen Ausführungsformen verwenden ein Videokodierer und -dekodierer verschiedene Flags und Signale in einem Bitstrom. Während spezifische Flags und Signale beschrieben werden, sollte beachtet werden, dass diese Art und Weise der Beschreibung verschiedene herkömmliche Vorgehensweisen (zum Beispiel 0en eher als 1en) für die Flags und Signale umfasst.
  • I. Rechenumgebung
  • 3 stellt ein verallgemeinertes Beispiel einer geeigneten Rechenumgebung (300) dar, in der verschiedene der beschriebenen Ausführungsformen umgesetzt werden können. Die Rechenumgebung (300) ist nicht im restriktiven Sinne des Umfangs der Verwendung oder der Funktionalität zu erachten, da die Verfahren und Systeme in verschiedenen Universal- oder Spezialrechenumgebungen umgesetzt werden können.
  • In Bezug auf 3 enthält die Rechenumgebung (300) wenigstens eine Verarbeitungseinheit (310) und einen Speicher (320). In 3 ist diese Konfiguration in ihrer allgemeinsten Form (330) innerhalb einer gestrichelten Linie dargestellt. Die Verarbeitungseinheit (310) führt durch Computer ausführbare Befehle aus und kann ein realer oder virtueller Prozessor sein. In einem Simultanverarbeitungssystem führen mehrere Verarbeitungseinheiten durch Computer ausführbare Befehle durch, um die Verarbeitungsleistung zu steigern. Der Speicher (320) kann ein flüchtiger Speicher (beispielsweise ein Register, ein Cache-Speicher, ein Direktzugriffsspeicher RAM), ein nichtflüchtiger Speicher (beispielsweise ein Festwertspeicher ROM, ein elektronisch löschbarer programmierbarer Speicher EEPROM, ein Flash-Speicher, und so weiter) oder eine Kombination aus beiden sein. Der Speicher (320) speichert Software (380), die Subpixel-Interpolationsverfahren in einem Kodierer und/oder Dekodierer wie beispielsweise einem Videokodierer und/oder -dekodierer implementiert.
  • Eine Rechenumgebung kann zusätzliche Leistungsmerkmale aufweisen. So enthält die Rechenumgebung (300) beispielsweise eine Speichervorrichtung (340), ein oder mehrere Eingabegeräte (350), ein oder mehrere Ausgabegeräte (360) und eine oder mehrere Kommunikationsverbindungen (370). Ein Zusammenschaltmechanismus (nicht dargestellt) wie beispielsweise ein Bus, ein Controller oder ein Netzwerk schaltet die Komponenten der Rechenumgebung (300) zusammen. Typischerweise stellt eine Betriebssystemsoftware (nicht dargestellt) eine Betriebsumgebung für weitere Software bereit, die in der Rechenumgebung (300) arbeitet und koordiniert die Aktivitäten der Komponenten der Rechenumgebung (300).
  • Die Speichervorrichtung (340) kann entnehmbar oder nicht entnehmbar sein und umfasst Magnetplatten, Magnetbänder oder -kasetten, CD-ROMs, DVDs oder jedes ande re beliebige Medium, das zum Speichern von Informationen verwendet werden kann, und auf das innerhalb der Rechenumgebung (300) zugegriffen werden kann. Die Speichervorrichtung (340) speichert Anweisungen für die Software (380), die die Verfahren zur Subpixel-Interpolation implementiert.
  • Das/die Eingabegeräte kann/können ein Touch-Eingabegerät wie beispielsweise eine Tastatur, eine Maus, ein Pen oder ein Trackball, ein Sprach-Eingabegerät, ein Scanngerät, oder ein anderes Gerät sein, das eine Eingabe in die Rechenumgebung (300) bereitstellt. Für die Audio- oder Videokodierung, kann/können das/die Eingabegerät/e (350) eine Soundkarte, eine Videokarte, eine TV-Tunerkarte oder eine ähnliche Vorrichtung, die Audio- oder Videoeingaben in digitaler Form akzeptiert, oder eine CD-ROM oder eine CD-RW sein, die Audio- oder Videoabtastwerte in die Rechenumgebung (300) einliest. Das/die Ausgabegerät/e (360) kann ein Display, ein Drucker, ein Lautsprecher, ein CD-Schreiber oder eine andere Vorrichtung sein, die eine Ausgabe von einer Rechenumgebung (300) bereitstellt.
  • Die Kommunikationsverbindung(en) (370) ermöglichen die Kommunikation über ein Kommunikationsmedium zu einer anderen Recheneinheit. Das Kommunikationsmedium überträgt Informationen wie beispielsweise durch Computer ausführbare Anweisungen, Audio- oder Videoausgaben oder -eingaben, oder andere Daten in einem modulierten Datensignal. Ein moduliertes Datensignal ist ein Signal, von dem ein oder mehrere seiner Eigenschaften so eingestellt sind oder verändert werden, dass die Informationen in dem Signal kodiert werden. Im Sinne eines Beispiels und nicht im restriktiven Sinne zu erachten, umfassen die Kommunikationsmedien kabelbasierte oder drahtlose Verfahren, die mit einem elektrischen, einem optischen, einem HF-, einem Infrarot-, einem akustischen oder einem anderen Träger implementiert werden.
  • Die Verfahren und Systeme können in dem allgemeinen Kontext von computerlesbaren Medien beschrieben werden. Computerlesbare Medien sind jegliche verfügbaren Medien, auf die innerhalb einer Rechenumgebung zugegriffen werden kann. Im Sinne eines Beispiels und nicht im restriktiven Sinne zu erachten, umfassen mit der Rechenumgebung (300) die computerlesbaren Medien den Speicher (320), die Speichervorrichtung (340), Kommunikationsmedien und Kombinationen aus beliebigen der oben Genannten.
  • Die Verfahren und Systeme können in dem allgemeinen Kontext von durch Computer ausführbaren Befehlen beschrieben werden, so wie die, die in Programmmodulen enthalten sind und in einer Rechenumgebung oder auf einem realen oder virtuellen Zielprozessor ausgeführt werden. Im Allgemeinen umfassen Programmmodule Routinen, Programme, Bibliotheken, Objekte, Klassen, Komponenten, Datenstrukturen und so weiter, die bestimmte Aufgaben ausführen oder bestimmte abstrakte Datentypen implementieren. Die Funktionen der Programmmodule können kombiniert oder unter den Programmmodulen aufgeteilt werden, so wie dies in verschiedenen Ausführungsbeispielen beschrieben ist. Durch Computer ausführbare Befehle für Programmmodule können innerhalb einer lokalen oder einer verteilten Rechenumgebung ausgeführt werden.
  • Im Sinne einer verständlichen Darstellung verwendet die ausführliche Beschreibung Begriffe wie „bestimmen" und „auswählen", um Computeroperationen in einer Rechenumgebung zu beschreiben. Bei diesen Begriffen handelt es sich um Abstraktionen auf höchster Ebene für Operationen, die durch einen Computer ausgeführt werden, und sie sollten nicht mit durch eine Person durchgeführten Handlungen verwechselt werden. Die tatsächlichen Computeroperationen, die diesen Begriffen entsprechen, variieren in Abhängigkeit von der Implementierung.
  • II. Allgemeiner Videokodierer und -dekodierer
  • 4 ist ein Blockdiagramm eines allgemeinen Videokodierers (400), und 5 ist ein Blockdiagramm eines allgemeinen Videodekodierers (500).
  • Die Beziehungen, die zwischen den Modulen innerhalb des Kodierers und des Dekodierers dargestellt sind, zeigen den Hauptinformationsfluss in dem Kodierer und dem Dekodierer an; andere Beziehungen sind der Einfachheit halber nicht dargestellt. Insbesondere stellen die 4 und 5 für gewöhnlich keine Zusatzinformationen dar, die die Einstellungen, Modi, Tabellen und so weiter des Kodierers anzeigen, die für eine Videosequenz, einen Frame, einen Makroblock, einen Block und so weiter verwendet werden. Solche Zusatzinformationen werden in dem Ausgabebitstrom gesendet, typischerweise nach der Entropiekodierung der Zusatzinformationen. Das Format des Ausgabebitstroms kann ein Windows Media Video-Format oder ein anderes Format sein.
  • Der Kodierer (400) und der Dekodierer (500) sind blockbasiert und verwenden ein 4:2:0-Makroblockformat, wobei jeder Makroblock vier 8 × 8 große Luminanzblöcke (mitunter als ein 16 × 16 großer Makroblock behandelt) und zwei 8 × 8 große Chrominanzblöcke (beispielsweise einen U-Block, einen V-Block) enthält. Alternativ dazu sind der Kodierer (400) und der Dekodierer (500) objektbasiert, verwenden ein anderes Makroblock- oder Blockformat oder führen Operationen an Sätzen von Pixeln einer anderen Größe oder Konfiguration als die der 8 × 8 großen Blöcke und 16 × 16 großen Makroblöcke durch.
  • Je nach Implementierung und Typ von gewünschter Kompression können Module des Kodierers und des Dekodierers hinzugefügt, weggelassen, in mehrere Module aufgeteilt, mit anderen Modulen kombiniert und/oder durch gleiche Module ersetzt werden. In alternativen Ausführungsformen führen Kodierer und Dekodierer mit anderen Modulen und/oder Konfigurationen von Modulen ein oder mehrere der beschriebenen Verfahren durch.
  • A. Videokodierer
  • 4 ist ein Blockdiagramm eines allgemeinen Video-Kodiersystems (400). Das Kodiersystem (400) empfängt eine Sequenz von Videoframes einschließlich eines aktuellen Frames (405) und erzeugt komprimierte Videoinformationen (495) als Ausgabe. Bestimmte Ausführungsformen von Videokodierern verwenden typischerweise eine abgeänderte oder eine ergänzte Version des allgemeinen Videokodierers (400).
  • Das Kodiersystem (400) komprimiert vorhergesagte Frames und Key-Frames. Im Sinne einer verständlichen Darstellung zeigt 4 einen Pfad für Key-Frames durch das Kodiersystem (400) und einen Pfad für die vorwärts-vorhergesagten Frames. Viele der Komponenten des Kodiersystems (400) werden zum Komprimieren von sowohl den Key-Frames als auch den vorhergesagten Frames verwendet. Die genauen Operationen, die durch diese Komponenten durchgeführt werden, können je nach Typ der jeweils komprimierten Informationen variieren.
  • Ein vorhergesagter Frame [auch P-Frame, B-Frame für bidirektionale Vorhersage, oder interkodierter Frame genannt] wird in Bezug auf die Vorhersage (oder Differenz) von einem oder mehreren Frames repräsentiert. Ein Vorhersagerestfehler ist die Differenz zwischen dem, was vorhergesagt wurde, und dem ursprünglichen Frame. Im Gegensatz dazu wird ein Key-Frame [auch I-Frame, intrakodierter Frame genannt] ohne Bezug zu anderen Frames komprimiert.
  • Wenn der aktuelle Frame (405) ein vorwärts-vorhergesagter Frame ist, schätzt eine Bewegungs-Schätzeinrichtung (410) die Bewegung von Makroblöcken oder anderen Sätzen von Pixeln des aktuellen Frames (405) in Bezug auf einen Bezugsframe, bei dem es sich um den rekonstruierten vorangehenden Frame (425) handelt, der in dem Framespeicher (420) gespeichert ist. In alternativen Ausführungsformen ist der Bezugsframe ein späterer Frame, oder der aktuelle Frame wird bidirektional vorhergesagt. Die Bewegungs-Schätzeinrichtung (410) gibt als Zusatzinformationen Bewegungsinformationen (415) wie beispielsweise Bewegungsvektoren aus. Eine Bewegungs-Kompensationseinrichtung (430) wendet die Bewegungsinformationen (415) auf den rekonstruierten vorangehenden Frame (425) an, um einen bewegungsvorhergesagten aktuellen Frame (435) zu erzeugen. Die Vorhersage ist jedoch selten perfekt, und die Differenz zwischen dem bewegungsvorhergesagten aktuellen Frame (435) und dem ursprünglichen Frame (405) ist der Vorhersagerestfehler (445). Alternativ dazu wenden eine Bewegungs-Schätzeinrichtung und eine Bewegungs-Kompensationseinrichtung einen anderen Typ von Bewegungsschätzung-/kompensation an.
  • Eine Frequenz-Transformationseinrichtung (460) wandelt die räumlichen Bereichs-Videoinformationen in Frequenzbereichs- (das heißt, Spektral-) daten um. Für blockbasierte Videoframes wendet die Frequenz-Transformationseinrichtung (460) eine Diskrete Kosinustransformation [„DCT"] oder eine Variante der DCT auf Blöcke der Restfehlerdaten der Bewegungsschätzung an, wodurch Blöcke von DCT-Koeffzienten erzeugt werden. Alternativ dazu wendet die Frequenz-Transformationseinrichtung (460) eine andere herkömmliche Frequenztransformation wie beispielsweise ein Fourier-Transformation an, oder führt die Wavelet- oder Subband-Analyse durch. In einigen Ausführungsformen wendet die Frequenz-Transformationseinrichtung (460) eine Frequenztransformation auf Blöcke von Restfehlerdaten der räumlichen Schätzung für Key-Frames an. Die Frequenz-Transformationseinrichtung (460) kann eine Frequenztransformation einer 8 × 8-, einer 8 × 4-, einer 4 × 8- oder einer anderen Größe anwenden.
  • Eine Quantisierungseinrichtung (470) quantisiert anschließend die Blöcke aus Spektraldatenkoeffizienten. Die Quantisierungseinrichtung (470) wendet eine uniforme, skalare Quantisierung auf die Spektraldaten mit einer Schrittgröße an, die frameweise oder auf einer anderen Basis variiert. Alternativ dazu wendet die Quantisierungseinrichtung (470) einen anderen Typ von Quantisierung auf die Spektraldatenkoeffizienten, so zum Beispiel eine nicht-uniforme, Vektor-, oder nicht-adaptive Quantisierung an oder führt eine direkte Quantisierung der räumlichen Bereichsdaten in einem Kodiersystem durch, welches keine Frequenztransformation verwendet. Zusätzlich zu der adaptiven Quantisierung kann der Kodierer (400) Framedropping, adaptives Filtern oder andere Verfahren für die Ratesteuerung verwenden.
  • Wenn ein rekonstruierter aktueller Frame für die darauffolgende Bewegungsschätzung-/kompensation benötigt wird, führt eine Einrichtung für inverse Quantisierung (476) eine inverse Quantisierung der quantisierten Spektraldatenkoeffizienten durch. Eine Einrichtung für inverse Frequenztransformation (466) führt anschließend die Umkehrung der Operationen der Frequenz-Transformationseinrichtung (460) durch, wodurch ein rekonstruierter Vorhersagerestfehler (für einen vorhergesagten Frame) oder ein rekonstruierter Key-Frame erzeugt wird. Wenn der aktuelle Frame (405) ein Key-Frame war, wird der rekonstruierte Key-Frame als der rekonstruierte aktuelle Frame (nicht dargestellt) genommen. Wenn der aktuelle Frame (405) ein vorhergesagter Frame war, wird der rekonstruierte Vorhersagerestfehler zu dem bewegungsvorhergesagten aktuellen Frame (435) hinzugefügt, um den rekonstruierten aktuellen Frame zu erzeugen. Der Framespeicher (420) führt eine Zwischenspeicherung des rekonstruierten aktuellen Frames für die Verwendung bei der Vorhersage des nächsten Frames durch. In einigen Ausführungsformen wendet der Kodierer ein Deblocking-Filter auf den rekonstruierten Frame an, um Ungleichmäßigkeiten in den Blöcken des Frames adaptiv zu glätten.
  • Der Entropiekodierer (480) komprimiert die Ausgabe der Quantisierungseinrichtung (470) ebenso wie bestimmte Zusatzinformationen (beispielsweise Bewegungsinformationen (415), Quantisierungsschrittgröße). Typische Entropiekodierungsverfahren umfassen die Arithmetische Kodierung, die Differentialkodierung, die Huffman-Kodierung, die Lauflängenkodierung, die LZ-Kodierung, die Wörterbuch-Kodierung sowie Kombinationen der oben Genannten. Der Entropiekodierer (480) verwendet typischerweise verschiedene Kodierungsverfahren für verschiedene Arten von Informationen (beispiels weise DC-Koeffizienten, AC-Koeffizienten, verschiedene Arten von Zusatzinformationen), und kann innerhalb eines bestimmten Kodierungsverfahrens eine Auswahl aus mehreren Codetabellen treffen.
  • Der Entropiekodierer (480) gibt die komprimierten Videoinformationen (495) in den Zwischenspeicher (490) ein. Ein Zwischenspeicher-Statusindikator wird zu Bitrate-adaptiven Modulen zurückgeführt. Die komprimierten Videoinformationen (495) werden bei einer konstanten oder relativ konstanten Bitrate aus dem Zwischenspeicher (490) entfernt und für das darauffolgende Streaming mit dieser Bitrate gespeichert. Alternativ dazu führt das Kodiersystem (400) ein Streaming der komprimierten Videoinformationen unmittelbar nach der Kompression durch.
  • Vor oder nach dem Zwischenspeicher (490) können die komprimierten Videoinformationen (495) für die Übertragung über das Netzwerk Kanalkodierung unterzogen werden. Die Kanalkodierung kann Fehlererkennung und Korrekturdaten auf die komprimierten Videoinformationen (495) anwenden.
  • B. Videodekodierer
  • 5 ist ein Blockdiagramm eines allgemeinen Video-Dekodiersystems (500). Das Dekodiersystem (500) empfängt Informationen für eine komprimierte Sequenz aus Videoframes und erzeugt eine Ausgabe, die einen rekonstruierten Frame (505) enthält. Bestimmte Ausführungsformen von Videodekodierern verwenden typischerweise eine abgeänderte oder eine ergänzte Version des allgemeinen Videodekodierers (500).
  • Das Dekodiersystem (500) dekomprimiert vorhergesagte Frames und Key-Frames. Im Sinne einer verständlichen Darstellung zeigt 5 einen Pfad für die Key-Frames durch das Dekodiersystem (500) und einen Pfad für die vorwärts-vorhergesagten Frames. Viele der Komponenten des Dekodiersystems (500) werden für die Dekompression von sowohl Key-Frames als auch vorhergesagten Frames verwendet. Die genauen Operationen, die durch diese Komponenten durchgeführt werden, können von dem Typ von Informationen abhängen, die jeweils komprimiert werden.
  • Ein Zwischenspeicher (590) empfängt die Informationen (595) für die komprimierte Videosequenz und stellt die empfangenen Informationen dem Entropiedekodierer (580) zur Verfügung. Der Zwischenspeicher (590) empfängt die Informationen typischerweise bei einer Rate, die im Verlauf der Zeit relativ konstant ist, und er enthält einen Jitter-Buffer zum Glätten von kurzzeitigen Abweichungen in der Bandbreite oder der Übertragung. Der Zwischenspeicher (590) kann einen Wiedergabespeicher sowie weitere Zwischenspeicher enthalten. Alternativ dazu empfängt der Zwischenspeicher (590) Informationen bei einer variierenden Rate. Vor oder nach dem Zwischenspeicher (590) können die komprimierten Videoinformationen Kanaldekodierung unterzogen werden und für die Fehlererkennung und -korrektur verarbeitet werden.
  • Der Entropiedekodierer (580) führt Entropiedekodierung der entropiekodierten quantisierten Daten ebenso wie der entropiekodierten Zusatzinformationen (beispielsweise Bewegungsinformationen (515), Quantisierungsschrittgröße) durch, wobei er typischerweise eine Umkehrung des in dem Kodierer durchgeführten Entropiekodierens durchführt. Verfahren zur Entropiedekodierung umfassen die Arithmetische Dekodierung, die Differentialdekodierung, die Huffman-Dekodierung, die Lauflängendekodierung, die LZ-Dekodierung, die Wörterbuch-Dekodierung sowie Kombinationen aus den oben Genannten. Der Entropiedekodierer (580) verwendet häufig verschiedene Dekodierungsverfahren für verschiedene Arten von Informationen (beispielsweise DC-Koeffizienten, AC-Koeffizienten, verschiedene Arten von Zusatzinformationen) an und kann innerhalb eines bestimmten Dekodierverfahrens eine Auswahl aus mehreren Codetabellen treffen.
  • Wenn der zu rekonstruierende Frame (505) ein vorwärts-vorhergesagter Frame ist, wendet eine Bewegungs-Kompensationseinrichtung (530) Bewegungsinformationen (515) auf einen Bezugsframe (525) zum Erzeugen einer Vorhersage (535) des zu rekonstruierenden Frames (505) an. So verwendet die Bewegungs-Kompensationseinrichtung (530) beispielsweise einen Makroblock-Bewegungsvektor, um einen Makroblock in dem Bezugsframe (525) zu finden. Ein Framezwischenspeicher (520) speichert vorangehende rekonstruierte Frames für ihre Verwendung als Bezugsframes. Alternativ dazu wendet die Bewegungs-Kompensationseinrichtung einen anderen Typ von Bewegungskompensation an. Die Vorhersage durch die Bewegungs-Kompensationseinrichtung ist jedoch selten perfekt, dementsprechend rekonstruiert der Dekodierer (500) auch Vorhersagerestfehler.
  • Wenn der Dekodierer einen rekonstruierten Frame zur darauffolgenden Bewegungsschätzung benötigt, führt der Framespeicher (520) eine Zwischenspeicherung des rekonstruierten Frames für seine Verwendung in dem nächsten Frame durch. In einigen Ausführungsformen wendet der Kodierer ein Deblocking-Filter auf den rekonstruierten Frame an, um Ungleichmäßigkeiten in den Blöcken des Frames adaptiv zu glätten.
  • Eine Einrichtung für inverse Quantisierung (570) führt eine inverse Quantisierung der entropiedekodierten Daten durch. Im Allgemeinen wendet die Einrichtung für inverse Quantisierung eine uniforme, skalare inverse Quantisierung an den entropiedekodierten Daten mit einer Schrittgröße durch, die frameweise oder auf einer anderen Basis variiert. Alternativ dazu wendet die Einrichtung für inverse Quantisierung einen anderen Typ von inverser Quantisierung an den Daten, so zum Beispiel eine nicht-uniforme, Vektor-, oder nicht-adaptive Quantisierung an oder führt eine direkte inverse Quantisierung der räumlichen Bereichsdaten in einem Dekodiersystem durch, das keine inverse Frequenztransformation verwendet.
  • Eine Einrichtung für inverse Frequenztransformation (560) wandelt die quantisierten, Frequenzbereichsdaten in räumliche Bereichsvideoinformationen um. Für blockbasierte Videoframes wendet die Einrichtung für inverse Frequenztransformation (560) eine inverse DCT [„IDCT"] oder eine Variante der IDCT an Blöcken der DCT-Koeffzienten an, wodurch Restfehlerdaten der Bewegungsvorhersage erzeugt werden. Alternativ dazu wendet die Einrichtung für inverse Frequenztransformation (560) eine andere herkömmliche inverse Frequenztransformation wie beispielsweise eine Fourier-Transformation an oder führt eine Subband- oder Wavelet-Synthese durch. In einigen Ausführungsformen wendet die Einrichtung für inverse Frequenztransformation (560) eine inverse Frequenztransformation an Blöcken von Restfehlern der räumlichen Vorhersage für Key-Frames an. Die Einrichtung für inverse Frequenztransformation (560) kann eine inverse Frequenztransformation einer 8 × 8-, einer 8 × 4-, einer 4 × 8- oder einer anderen Größe anwenden.
  • III. Bewegungsschätzung- und Kompensation
  • Interframe-Kodierung nutzt zum Erzielen von Kompression temporäre Redundanzen zwischen Frames aus. Das Reduzieren von temporären Redundanzen verwendet vorangehend kodierte Frames als Prädiktoren für das Kodieren des aktuellen Frames. In den im Folgenden beschriebenen Ausführungsformen nutzt ein Videokodierer in typischen Videosequenzen temporäre Redundanzen aus, um die Informationen unter Verwendung einer kleineren Anzahl von Bits zu kodieren. Der Videokodierer wendet Bewegungsschätzung an, um die Bewegung eines Blockes, eines Makroblockes oder eines anderen Satzes von Pixeln eines vorhergesagten Frames relativ zu einem Bezugsframe (beispielsweise einen vorher kodierten, vorangehenden Frame) zu parameterisieren. Der Videokodierer (ebenso wie ein entsprechender Dekodierer) verwenden Bewegungskompensation, um den vorhergesagten Frame unter Verwendung von Bewegungsinformationen und dem Bezugsframe zu rekonstruieren.
  • Die Bewegungskompensation besteht in dem Prozess des Erstellens einer Vorhersage für einen Videoframe (das heißt, der vorhergesagte Frame) durch Verschieben des Bezugsframes. Wie oben bereits angemerkt wurde, wird die Vorhersage für einen Block, einen Makroblock oder einen anderen Satz von Daten von dem Bezugsframe erstellt. Darüber hinaus ist die Verschiebung typischerweise geradlinig und konstant über das gesamte Tile, das jeweils vorhergesagt wird. Solch eine Verschiebung wird durch einen Bewegungsvektor mit zwei Komponenten definiert, die der Verschiebung entlang der X- und der Y-Richtung entsprechen. Die X- (horizontale) und die Y- (vertikale) Bewegungsvektorkomponente stellen die Verschiebung zwischen dem Tile, das aktuell vorhergesagt wird und der entsprechenden Position in dem Bezugsframe dar. Positive Werte repräsentieren Positionen, die unterhalb und rechts von der aktuellen Position liegen. Negative Werte repräsentieren Positionen, die oberhalb und links von der aktuellen Position liegen.
  • In einer Implementierung ist ein Block ein 8 × 8 großer Tile von Pixeln, ein Makroblock ist ein 16 × 16 großer Tile von Pixeln, und die Bewegungsvektoren werden bis auf Viertelpixelgenauigkeit definiert. In anderen Implementierungen wenden der Kodierer und der Dekodierer ein oder mehrere der beschriebenen Verfahren auf Tiles unterschiedlicher Größen oder mit beliebig variierender Größe, mit unterschiedlicher Auflösung oder beliebig variierenden Bewegungsvektoren und/oder unter Verwendung von Bewegungsinformationen an, die andere als die Bewegungsvektoren sind.
  • Komponenten von Bewegungsvektoren werden für gewöhnlich hinsichtlich der Pixelverschiebungen definiert, oftmals mit Subpixelgenauigkeit. Subpixelverschiebungen werden durch Filtern des Bezugsframes unter Verwendung von auf geeignete Weise definierten Bewegungskompensationsfiltern realisiert. Für den Fall der Bewegungskompensation von geradliniger Subpixelbewegung werden die X- und die Y-Komponente als Festkommazahlen dargestellt. Der ganzzahlige Bestandteil dieser Zahlen wird die Ganzpixelverschiebung genannt, und der Bruchteil wird als Subpixelverschiebung bezeichnet. In den meisten Fällen wird dies als eine Blockkopie von dem Bezugsframe zum Erzeugen des Prädiktors implementiert (obgleich in der Theorie möglicherweise eine Form des Filterns angewendet werden kann). Wenn im Gegensatz dazu die Subpixelverschiebung einen Wert ergibt, der nicht Null ist, wird der Prädiktor durch Anwenden eines oder mehrerer Filter, die der Subpixelverschiebung entsprechen, auf Ganzpixel-Positionen in dem Bezugsframe erzeugt. Dementsprechend wird das Bewegungskompensationsfilter durch die Subpixelverschiebung bestimmt.
  • Um Subpixelverschiebungen als Filteroperationen durchzuführen, interpolieren Bewegungskompensationsfilter Datenpunkte an bruchzahligen Pixel-Positionen auf Basis von Bezugswerten an Ganzpixel-Positionen. Im Allgemeinen erhöht sich die Qualität der Interpolation mit der Unterstützung durch das Filter. Einige Ausführungsformen verwenden aufteilbare 2-Tap- und 4-Tap-Filter (in jeder Richtung), die den bilinearen und bikubischen Interpolatoren entsprechen.
  • In einigen Ausführungsformen verwenden die Bewegungskompensationsfilter Ganzzahlenarithmetik und -division, die als eine Bit-Verschiebung implementiert werden. Der Rundungssteuerungs-Parameter R nimmt den Wert 0 oder 1 an, und bestimmt die Richtung des Rundens für diese Divisionen. Dieser Rundungssteuerungs-Parameter kann durch externes Signalisieren auf eine Konstante eingestellt werden, oder kann implizit anhand von vorher kodierten Informationen hergeleitet werden.
  • 8 zeigt Positionen von Ganzpixeln und Subpixeln in einem Bezugsframe (600), der während der Subpixel-Bewegungsschätzung- und kompensation in einigen Ausführungsformen verwendet wird. Der Bezugsframe (600) enthält an Viertelpixel-Intervallen in jeder Richtung Subpixel-Positionen, für die ein Kodierer oder ein Dekodierer Pixelwer te für eine bestimmte Verschiebung interpolieren kann. Die ganzzahligen Positionen a-p des Bezugsframes (600) sind in 6 als schattierte Kreise dargestellt, wobei die Viertelpixel- und die Halbpixelpositionen, die zwischen den ganzzahligen Positionen angeordnet sind, als unschattierte Kreise dargestellt sind. Die Positionen P0 bis P8 zeigen die neun repräsentativen Subpixel-Positionen, wie dies in Tabelle 1 dargestellt ist.
  • Figure 00240001
    Tabelle 1: Repräsentative Subpixel-Positionen.
  • Die Dreiviertelpixel-Position, die als Beispiel von P8 dargestellt ist, kann als ein Sonderfall der Viertelpixel-Positionen betrachtet werden; sie ist eine Viertelpixel-Verschiebung von einer Ganzpixel-Position entfernt. Andere Dreiviertelpixel-Positionen sind möglich, jedoch sind diese nicht dargestellt. Auf die Subpixel-Positionen P0 bis P8 wird in späteren Beschreibungen der Interpolationsfilter Bezug genommen. In alternativen Ausführungsformen interpolieren der Kodierer und der Dekodierer Werte an zusätzlichen oder anderen Subpixel-Positionen, beispielsweise jene an einem Intervall, das ein anderes ist als das Viertelpixel in jeder Richtung.
  • A. Annähernd bikubische Interpolationsfilter
  • Für die Subpixelinterpolation verwenden in einigen Ausführungsformen ein Videokodierer und ein -dekodierer lineare/bilineare Filter und/oder kubische/bikubische Filter, die wie folgt definiert werden.
  • Ein linearer Interpolator ist ein lineares Polynom, oder ein Polynom der ersten Ordnung, in einer Dimension, das bekannte Werte an den zwei Rasterpunkten verwendet, die dem Punkt, der interpoliert wird, am nächsten liegen. Der Wert der linearen Funktion an dem Punkt, der interpoliert wird, ist die lineare Interpolation. Die Multiplizierer der linearen Polynome werden durch Lösen eines linearen Systems von Gleichungen berechnet, wobei die Koeffizienten des linearen Filters bestimmt werden. Ein linearer Interpolator wird durch zwei Filtertaps definiert. Ein bilinearer Interpolator ist ein linearer Interpolator, der in zwei Dimensionen aufteilbar ist.
  • Ein kubischer Interpolator ist ein kubisches Polynom, oder ein Polynom der dritten Ordnung, in einer Dimension, der bekannte Werte an den vier Rasterpunkten verwendet, die dem Punkt, der interpoliert wird, am nächsten liegen. Der Wert der kubischen Funktion an dem Punkt, der interpoliert wird, ist die kubische Interpolation. Die Multiplizierer der kubischen Polynome werden durch Lösen eines Systems von Gleichungen berechnet, wobei die Koeffizienten des kubischen Filters bestimmt werden. Ein kubischer Interpolator wird durch vier Filtertaps definiert. Ein bikubischer Interpolator ist ein kubischer Interpolator, der in zwei Dimensionen aufteilbar ist.
  • Die Begriffe „linear" und „bilinear" werden im Bereich der Videokompression und -dekompression austauschbar verwendet. In einer normalen zweidimensionalen Interpolation wird eine Interpolationsoperation, die in einer Dimension durchgeführt wird, in der anderen Dimension wiederholt, und dementsprechend wird jede Filterungsstufe als bilineares Filtern bezeichnet. Die Begriffe „kubisch" und „bikubisch" sind auf ähnliche Weise untereinander austauschbar.
  • In diesem Dokument werden die Begriffe „linear" und „bilinear" austauschbar verwendet, um das Filtern in einer, zwei oder mehr Dimensionen zu beschreiben. Auf ähnliche Weise werden die Begriffe „kubisch" und „bikubisch" austauschbar verwendet, um das Filtern in einer, zwei oder mehr Dimensionen zu beschreiben. So definieren beispielsweise die Gleichungen (11) bis (13) Typen von kubischen Filtern, und werden dennoch als bikubische Filter bezeichnet, da die Filter in geläufigen Anwendungen der zweistufigen Interpolation von Bezugs-Videobildern in Operationen verwendet werden, die für beide Dimensionen der zweistufigen Interpolation wiederholt werden. Noch allgemeiner, ist die Dimensionalität des Filterns anhand des Kontextes bekannt.
  • In einigen Ausführungsformen verwenden ein Kodierer und ein Dekodierer annähernd bikubische Filter zum Interpolieren von Werten an Subpixel-Positionen. So verwenden der Kodierer und der Dekodierer beispielsweise die folgenden Filter (von denen F1 ein bikubisches Filter und F2 und F3 annähernd bikubische Filter sind) an möglichen Verschiebungspositionen in einem Bezugsframe, wie beispielsweise dem, der in 6 dargestellt ist. Halbpixel-Verschiebung F1: [–1 9 9 –1] (11), Viertelpixel-Verschiebung F2: [–4 53 18 –3] (12) und Dreiviertelpixel-Verschiebung F3: [–3 18 53 –4] (13).
  • In der Praxis enthalten die Filter auch eine Rechts-Verschiebung (beispielsweise um 4 Bits für F1 und um 6 Bits für F2 und F3) um Expansion, die möglicherweise durch die Filterkoeffizienten verursacht wurde, auszugleichen. Der Operator >> ist ein Rechts-Verschiebungs-Operator. Bei der Operation der Rechts-Verschiebung werden die Bits einer binären Zahl nach rechts verschoben, wobei das am wenigsten signifikante Bit fallen gelassen wird und eine 0 als das am meisten signifikante Bit hinzuaddiert wird. Die Operation resultiert in einer einfachen Division durch 2 hoch der Anzahl von verschobenen Bits (beispielsweise resultiert eine Rechts-Verschiebung um 3 in einer Teilung durch 23 = 8) wobei der Rest fallengelassen wird.
  • Die Filterkoeffizienten für F2 und F3 basieren lose auf dem wahren bikubischen Viertelpixel-Interpolator, der ein 4-Tap-Filter ist. Die folgende Gleichung zeigt das Ergebnis des Anwendens des wahren bikubischen Viertelpixel-Interpolators für die Position P0: (–7e + 105f + 35g – 5h) >> 7 (14)
  • Die Koeffizientenwerte ergeben die Summe von 128, und das Produkt des Filterns wird um 7 Bits nach rechts verschoben. Die annähernd bikubischen Filter F2 und F3 nähern sich an das reine bikubische Filter hinsichtlich der Leistung an, weisen jedoch eine geringere Auflösung, so wie dies in der folgenden Gleichung dargestellt ist, auf. (–7e + 105f + 35g – 5h) >> 7 = (–3,5e + 52,5f + 17,5g – 2,5h) >> 6 ≈ (–4e + 53f + 18g – 3h) >> 6 (15).
  • In vielen Fällen resultiert die Verwendung eines rein bikubischen Filters in einem Verlust von Genauigkeitsbits in der mehrstufigen Interpolation, so dass der Normalisierungsfaktor für das annähernd bikubische Filter um wenigstens die Hälfte (1/2) reduziert wird (das heißt, die Rechts-Verschiebung wird um 1 Bit oder mehr verringert). Die Filterkoeffizienten, die für das annähernd bikubische Filter aus Gleichung (15) ausgewählt wurden, basieren auf dem Runden des wahren bikubischen Filters, nach dem Berücksichtigen des Frequenzbereichsverhaltens (beispielsweise, um Hochfrequenz-Informationen zu behalten) und des empirischen Verhaltens (beispielsweise, um die geringstmögliche Verzerrung in Anbetracht einer bestimmten Bitrate zu erhalten). Genauer gesagt, enthalten die Filter F2 und F3 immer noch vier Filterkoeffizienten. (Im Allgemeinen beschleunigt das Verwenden von weniger Filterkoeffizienten in einem Filter die Implementierung, es sollten dennoch ausreichend Filterkoeffizienten verwendet werden, um Rauschen in einem angrenzenden Pixel in Angriff nehmen zu können). Die Werte der Filterkoeffizienten werden so angepasst, dass sie die Summe von 64 ergeben, wodurch die Implementierung unter Verwendung einer 16-Bit-Arithmetik erleichtert wird, während eine Annäherung an das bikubische Filter mit der höheren Auflösung erfolgt. Es können auch andere Werte von Filterkoeffizienten verwendet werden, die die Summe von 64 ergeben, während immer hoch eine Annäherung an das bikubische Filter erfolgt. Ein Filter, das im Wesentlichen wie ein rein bikubisches Filter arbeitet, aber eine geringere Unterstützung und/oder eine geringere Auflösung aufweist, wird als „annähernd" bikubisches Filter bezeichnet. Eine Möglichkeit des objektiven Messens, ob ein Filter im Wesentlichen wie ein rein bikubisches Filter funktioniert, besteht darin, zu überprüfen, ob das annähernd bikubische Filter gut mit dem rein bikubischen Filter (das heißt, innerhalb eines definierten Schwellenwertes) korreliert. In einer Implementierung wird die Korrelation durch den Kosinus des Winkels zwischen den Vektoren der Filter (die sich wünschenswerterweise so nahe wie möglich bei 1 befinden) gemessen, und der Schwellenwert beträgt, 95. Andere objektive oder subjektive Messungen, andere Korrelationsmessungen und/oder Schwellenwerte können ebenfalls verwendet werden. So können beispielsweise die Filterkoeffizienten des annähernd bikubischen Filters so ausgewählt werden, dass ihre Summe einen anderen Wert ergibt, der eine effiziente Fourier-Transformation oder eine andere mathematische Manipulation ermöglicht.
  • Wie dies im Folgenden noch ausführlicher beschrieben wird, zeigt 7 im Allgemeinen die Ganzpixel-Positionen mit Pixelwerten, die zum Berechnen der interpolierten Pixel für jeden der Fälle, die den in den Gleichungen (11) bis (13) dargestellten Filtern entsprechen, verwendet werden. P bezeichnet die Subpixel-Position, für die ein Pixelwert berechnet wird. I1, I2, I3, und I4 repräsentieren die Ganzpixel-Positionen entlang der Dimension der Interpolation. 7b zeigt die horizontale Interpolation, jedoch treffen dieselben Operationen und dieselbe Anordnung der Positionen auch auf die vertikale Interpolation zu.
  • In alternativen Ausführungsformen verwenden ein Kodierer und ein Dekodierer andere und/oder zusätzliche Interpolationsfilter. So verwenden der Kodierer und der Dekodierer beispielsweise bilineare (das heißt, ein 2-Tap-) Filter zum Interpolieren des Wertes. So können beispielsweise mit Bezug auf die Subpixel-Positionen in 6 die Interpolationsfilter, die zum Bestimmen der Werte von P1, P5 und P7 verwendet werden, die in den Gleichungen (1) bis (3) dargestellten Filter sein.
  • B. Eindimensionale Interpolation
  • Für verschiedene Subpixel-Positionen berechnen der Kodierer und der Dekodierer einiger Ausführungsformen einen interpolierten Wert in lediglich einer Dimension. So wie dies in 7 dargestellt ist, zeigen die folgenden Gleichungen die Funktionsweise der Filter F1 (Halbpixel-Verschiebung), F2 (Viertelpixel-Verschiebung) und F3 (Dreiviertelpixel-Verschiebung) beim Durchführen von Interpolation zwischen Ganzpixeln. F1: (–1I1 + 9I2 + 1I4 + 8 –r) >> 4 (16), F2: (–4I1 + 53I2 + 18I3 – 3I4 + 32 – r) >> 6 (17) und F3: (-3I1 + 18I2 – 53I3 – 4I4 + 32 – r) >> 6 (18). wobei der Wert r das Runden steuert. Der Wert r hängt von dem binären Rundungssteuerungs-Parameter R der Frameebene und der Interpolationsrichtung wie folgt ab:
    Figure 00290001
  • Zur weiterführenden Illustration der eindimensionalen Interpolation zeigen P1 und P5 von 6 Halbpixel-Positionen in dem Bezugsframe (600), die Interpolation in lediglich einer Dimension erfordern (das heißt, die horizontale Richtung für P1 und die vertikale Richtung für P5). Die folgenden Gleichungen zeigen die Funktionsweise des Filters F1 (Halbpixel-Verschiebung) beim Interpolieren zwischen Ganzpixeln für P1 und P5: P1 = (–1e + 9f + 9g – 1h + 8 – r) >> 4 (20) und P5 = (–1b + 9f + 9j – 1n + 8 – r) >> 4 (21).
  • Auf ähnliche Weise zeigen P0 und P2 aus 6 Viertelpixel-Positionen in dem Bezugsframe (600), die Interpolation in lediglich einer Dimension erfordern. Die folgenden Gleichungen zeigen die Funktionsweise des Filters F2 (Viertelpixel-Verschiebung) beim Interpolieren zwischen Ganzpixeln für P0 und P2: P0 = (–4e + 53f + 18g – 3h + 32 – r) >> 6 (22) und P2 = (–4b + 53f + 18j – 3n + 32 – r) >> 6 (23).
  • Das annähernd bikubische Viertelpixel-Filter F2 kann ebenfalls mit lediglich einer kleinen Änderung zum Berechnen der Dreiviertelpixel-Positionen verwendet werden. So zeigt beispielsweise die folgende Gleichung die Funktionsweise des Filters F3 (Dreiviertelpixel-Verschiebung) beim Interpolieren zwischen Ganzpixeln für die Position P8: P8 = (–3b + 18f + 53j – 4n + 32 – r) >> 6 (24).
  • Alternativ dazu verwenden ein Kodierer und ein Dekodierer andere und/oder zusätzliche Interpolationsfilter für um Halbpixel, Viertelpixel oder Dreiviertelpixel verschobene Positionen in einer Dimension. So verwenden der Kodierer und der Dekodierer beispielsweise Filter mit mehr oder weniger Filterkoeffizienten, anderen Filterkoeffizienten, einem anderen Runden oder gar keinem Runden.
  • C. Mehrdimensionale Interpolation
  • In einigen Ausführungsformen wird die Interpolation für Subpixel-Positionen durchgeführt, die in zwei Dimensionen angeordnet sind. So sind beispielsweise in 8 P3, P4, P6 und P7 Positionen, für die Interpolation sowohl in der horizontalen als auch in der vertikalen Dimension erfolgt.
  • In einer Ausführungsform, die dem in 8 dargestellten Interpolationsverfahren entspricht, werden zweidimensionale Subpixel-Positionen zuerst entlang der vertikalen Richtung und anschließend entlang der horizontalen Richtung interpoliert. Wie im Folgenden weiter beschrieben wird, wird die Interpolation unter Verwendung von einem oder mehreren der Filter F1, F2 oder F3, die in den obenstehenden Gleichungen (16) bis (18) spezifiziert sind, durchgeführt. In der in 8 dargestellten Ausführungsform wird das Runden sowohl nach dem vertikalen Filtern als auch nach dem horizontalen Filtern angewendet. Die Bit-Verschiebung in der Rundungsregel stellt das Beibehalten von Genauigkeit sicher, die durch die 16-Bit-Arithmetik in den Zwischenergebnissen ermöglicht wird.
  • In 8 wird zunächst das vertikale Filtern durchgeführt, gefolgt von dem horizontalen Filtern. Das Beginnen mit dem vertikalen Filtern verbessert die Leistung in einigen Architekturen. In anderen Ausführungsformen ist die Reihenfolge des Filterns eine andere. So wird beispielsweise Interpolation in der horizontalen Richtung vor der Interpolation in der vertikalen Richtung durchgeführt. Oder es werden verschiedene andere Kombinationen von Interpolationsfiltern verwendet (beispielsweise mehrere horizontale und/oder mehrere vertikale Filter und so weiter).
  • Die Eingabe- und Ausgabepixelwerte (811, 838) haben eine Bit-Tiefe von 8 Bits, und sie weisen einen dynamischen Bereich mit 256 Werten auf. Die Zwischenwerte (820) haben eine Bit-Tiefe von 16 Bits für einen dynamischen Bereich mit 65.536 Werten. In alternativen Ausführungsformen haben die Eingabe-, die Ausgabe- und die Zwischenwerte eine andere (beispielsweise eine höhere) Bit-Tiefe.
  • In einer ersten Stufe (819) wird ein geeignetes vertikales Filter (Fv) auf den/die 8-Bit-Eingabe-Pixelwert(e) (811) angewendet (812). Welches vertikale Filter angewendet wird, hängt davon ab, ob die ausgewählte Subpixel-Position um ein Viertelpixel, ein Halbpixel oder ein Dreiviertelpixel verschoben wird, und es kann die Form eines der oben beschriebenen bikubischen Filter annehmen.
  • Die Rundungsregel nach dem vertikalen Filtern wird wie folgt definiert: (S + Rv) >> VerschiebungV (25),wobei S das vertikal gefilterte Ergebnis ist und RV = 2VerschiebungV-1 – 1 + R ist. R ist ein Rundungssteuerungswert, der frameweise abwechselnd den Wert 0 und 1 annimmt. Dementsprechend umfasst die Rundungsregel das Runden mit einer mit den Stufen wechselnden Rundungssteuerung (813) und einer Bit-Verschiebung (814).
  • Die Rechts-Verschiebung verursacht möglicherweise eine Verringerung der Auflösung, dementsprechend wird wenigstens ein Teil der Rechts-Verschiebung bis auf spätere Stufen der Interpolation aufgeschoben. Der Wert für die Rechts-Verschiebung für VerschiebungV hängt von der jeweils interpolierten Subpixel-Position ab. Genauer gesagt ist VerschiebungV = {5, 3, 3, 1} für P3, P4, P6 und P7. Die Menge der Verschiebung ist kleiner als die, die erforderlich ist, um Expansion aufgrund von Filterkoeffizienten der ersten Stufe auszugleichen (beispielsweise ist die Verschiebung kleiner als 6-Bits für das annähernd bikubische Filter), aber sie ist ausreichend genug, um zu garantieren, dass die Zwischenergebnisse des darauffolgenden Filterns innerhalb des dynamischen Bereiches für die Zwischenwerte bleiben (beispielsweise 65.536 mögliche Werte für 16-Bit-Wörter). Verglichen mit der Voll-Verschiebung, wird durch diese verkürzte Verschiebung die Genauigkeit der Zwischenpixelwerte (820) nach der ersten Stufe (810) der Interpolation behalten. Die Zwischenpixelwerte (820) haben einen dynamischen Bereich von y Bits, wobei y größer als 8 Bits ist. Die Menge der Verschiebung, die in der ersten Stufe durchgeführt wird, kann von der verfügbaren Bit-Tiefe und den Koeffizienten der Interpolationsfilter abhängen. So sind beispielsweise in der exemplarischen hierin beschriebenen Implementierung die Zwischenwerte auf eine Wortgrenze von 16 Bits beschränkt.
  • Betrachtet werden soll Punkt P3 in 6 sowie die Eingabewerte in dem Bereich 0 ... 255 (8 Bits). Der Bereich der Zwischenwerte vom Anwenden der Koeffizienten des an nähernd bikubischen Filters [–4 53 18 –3] auf die 8-Bit-Eingabewerte liegt zwischen –1785 und 18.105 (ungefähr 14,3 Bits, was auf 15 Bits für die Implementierung aufgerundet wird) aufgrund des Expansionsfaktors von den Filterkoeffizienten. Das darauffolgende horizontale Filtern, bei dem die Koeffizienten des annähernd bikubischen Filters (mit zusätzlicher Expansion) auf die Zwischenwerte angewendet werden, kann Werte erzeugen, die außerhalb des dynamischen 16-Bit-Bereiches liegen, wodurch ein Unterlauf oder ein Überlauf hervorgerufen wird. Die Zwischenwerte werden dementsprechend so ausreichend verschoben, dass sichergestellt wird, dass das darauffolgende horizontale Filtern in einem Wert resultiert, der innerhalb des dynamischen 16-Bit-Bereiches liegt. Für P3 beträgt die erste Verschiebungsmenge fünf Bits, und der dynamische Bereich der verschobenen Zwischenwerte liegt anschließend zwischen –55 und 565 (ungefähr 9,3 Bits, was für die Implementierung auf 10 Bits aufgerundet wird). Der Bereich der Ausgabe vom Anwenden der Koeffizienten des annähernd bikubischen Filters auf die verschobenen Zwischenwerte liegt anschließend zwischen –7.860 und 40.500, was einen dynamischen Bereich von weniger als 16 Bits darstellt. Dementsprechend wird die verkürzte Verschiebung so berechnet, dass die 16-Bit-Wortgrenze vollständig ausgenutzt wird, aber auch so, dass garantiert wird, dass sie während der zweiten Stufe (830) der Interpolation nicht überschritten wird.
  • In der zweiten Stufe (830) wird ein geeignetes Filter (FH) zum Interpolieren des Wertes an einer zweidimensionalen Subpixel-Position von den durch das vertikale Filter bestimmten Werten (820) angewendet (832). Die Rundungsregel nach dem horizontalen Filtern lautet wie folgt: (S + 64 – R) >> 7 (26),wobei S das horizontal gefilterte Ergebnis und R der Rundungssteuerungswert ist, der von Frame zu Frame einen sich ändernden Wert annimmt. Wie die Rundungsregel der ersten Stufe, umfasst die Rundungsregel der zweiten Stufe das Runden mit einer mit den Stufen wechselnden Rundungssteuerung (833) und eine Bit-Verschiebung (834). Aufgrund der Verschiebungs-Aufschiebung in der ersten Stufe überschreitet die Verschiebungsmenge in der zweiten Stufe typischerweise die Menge, die normalerweise für das ausgewählte horizontale Filter erwartet wird, und wird berechnet, um einen Wert auszugeben, der den gewünschten dynamischen Bereich aufweist.
  • Alle der Fälle des bikubischen Filterns können möglicherweise ein interpoliertes Pixel erzeugen, dessen Wert negativ ist, oder dessen Wert größer ist als das Maximum für den Bereich (beispielsweise 255 für eine 8-Bit-Ausgabe). In diesen Fällen der angestrebten 8-Bit-Ausgabewerte beschneiden der Kodierer und der Dekodierer den Ausgabewert (836), so dass er innerhalb des akzeptierten Bereiches liegt. Genauer gesagt, werden Unterläufe auf den Wert 0 und Überlaufe auf den Wert 255 eingestellt. Nach dem Beschneiden wird ein interpolierter 8-Bit-Wert (838) ausgegeben.
  • In 8 beträgt die Verschiebung der zweiten Stufe 7 Bits. Dementsprechend wird ein gefilterter Ausgabewert, der 9 Bits hat, behalten. So liegt beispielsweise durch Fortsetzen des vorangegangenen Beispiels für P3 der Bereich des gefilterten Ausgabewertes zwischen –81 und 316, der einen dynamischen Bereich von ungefähr 8,6 Bits hat (was für die Implementierung auf 9 Bits aufgerundet wird). Obgleich der gültige Bereich der interpolierten Daten lediglich 8 Bits beträgt, stellt das eine Extrabit an Headroom Überlauf- und Unterlaufinformationen bereit. Mit anderen Worten bedeutet dies, dass, wenn das signifikanteste Bit (das heißt, das „Zeichen"-Bit) eingestellt wird, ist ein Unterlauf oder ein Überlauf vorhanden. Welcher der beiden genau eingetreten ist, kann durch Betrachten der übriggebliebenen 8 „Mantisse"-Bits hergeleitet werden.
  • Die 9 bis 11 illustrieren weiterhin die zweidimensionale Interpolation, die oben beschrieben wurde und in 8 dargestellt ist. 9 zeigt eine Subpixel-Position P7 (Halbpixel horizontal, Halbpixel vertikal) des Bezugsframes (800) von 6. Zum Interpolieren des Wertes von P7 werden zwei bikubische Halbpixel-Interpolationsfilter verwendet. In der ersten Phase werden die Zwischenwerte V1 – V4 von den nahen Ganzpixel-Positionen unter Verwendung eines bikubischen Halbpixel-Filters berechnet, der die folgende allgemeine Form aufweist: Vinter ≈ (–1x1 + 9x2 + 9x3 – 1x4) (27).
  • Dementsprechend ergibt sich: V1 = (–1a + 9e + 9l – 1m) (28), V2 = (–1b + 9f + 9j – 1n) (29), V3 = (–1c + 9g + 9k – 1o) (30) und V4 = (–1d + 9h + 9l – 1p) (31).
  • Nachdem der geeignete Wert von Rv hinzuaddiert ist, werden die Ergebnisse um ein Bit verschoben. In der zweiten Stufe werden die Zwischenergebnisse V1 bis V4 durch ein Halbpixelfilter zum Berechnen des Pixelwertes an der Position P7 verwendet. Insbesondere wird ein Halbpixelfilter mit der folgenden Form verwendet: P7 = (–1V1 + 9V2 + 9V3 – 1V4) (32).
  • Wie oben diskutiert wurde, wird das Ergebnis der zweiten Stufe um sieben Bits nach rechts verschoben, um einen 9-Bit-Wert zu erhalten. Der 9-Bit-Wert enthält acht Mantissa-Bits und ein Zeichen-Bit. Nachdem notwendiges Beschneiden durchgeführt wurde, um den Überlauf oder den Unterlauf auszugleichen, wird ein abschließender interpolierter 8-Bit-Wert ausgegeben.
  • 10 zeigt die Subpixel-Position P4 (Halbpixel horizontal, Viertelpixel vertikal) des Bezugsframes aus 6. Zum Interpolieren des Wertes von P4 werden ein bikubischer Viertelpixel-Interpolationsfilter und ein Halbpixelfilter verwendet. In der ersten Stufe werden die Zwischenwerte V1 bis V4 von den nahen ganzzahligen Pixelpositionen unter Verwendung eines bikubischen Viertelpixelfilters berechnet, das die folgende allgemeine Form aufweist: Vinter. = (–4x1 + 53x2 + 18x3 – 3x4) (33).
  • Dieses Filter wird auf die ganzzahligen Pixelwerte des Bezugsframes (600) auf dieselbe Weise angewendet, wie dies oben in Bezug auf das Berechnen von P7 beschrieben wurde. Nachdem der geeignete Wert von Rv hinzuaddiert ist, werden die Ergebnisse um drei Bits nach rechts verschoben. In der zweiten Stufe werden die Zwischenwerte V1 bis V4 durch ein Halbpixelfilter zum Berechnen des Pixelwertes an der Position P4 verwendet. Genauer gesagt, wird ein Halbpixelfilter verwendet, das die folgende Form aufweist: P4 = (–1V1 + 9V2 + 9V3 – 1V4) (34).
  • Das Ergebnis der zweiten Stufe wird um sieben Bits nach rechts verschoben, um einen 9-Bit-Wert zu erhalten, notwendiges Beschneiden wird durchgeführt, und ein abschließender interpolierter 8-Bit-Wert wird ausgegeben.
  • 10 zeigt auch eine Subpixel-Position P6 (Viertelpixel horizontal, Halbpixel vertikal). Um den Wert von P6 zu interpolieren, wird das Verfahren zum Interpolieren von P4 mit lediglich einer kleinen Modifizierung verwendet. In dem modifizierten Verfahren wird in der ersten Stufe ein bikubisches Halbpixelfilter verwendet, um die Zwischenwerte zu bestimmen. Die Zwischen-Pixelpositionen werden in 10 auf V5 bis V8 gezeigt. Während der zweiten Stufe verwendet ein bikubisches Viertelpixelfilter die Zwischenwerte zum Berechnen des Wertes von P6. Genauer gesagt, wird ein bikubisches Viertelpixelfilter verwendet, das die folgende Form aufweist: P6 = (–4V5 + 53V6 + 18V7 – 1V8) (35).
  • Die Menge der Verschiebung in der ersten und in der zweiten Stufe ist dieselbe wie in dem Verfahren zum Berechnen von P4 (das heißt, die Verschiebung der ersten Stufe ist drei, und die Verschiebung der zweiten Stufe ist sieben).
  • 11 zeigt eine Subpixel-Position P3 (Viertelpixel horizontal, Viertelpixel vertikal) des Bezugsframes (600) aus 6. Zum Interpolieren des Wertes von P3 werden zwei bikubische Viertelpixel-Interpolationsfilter verwendet. In der ersten Stufe werden die Zwischenwerte V1 bis V4 von den nahen ganzzahligen Pixelpositionen unter Verwendung eines bikubischen Viertelpixelfilters berechnet, das die folgende allgemeine Form aufweist: Vinter. = (–4x1 + 53x2 + 18x3 – 3x4) (36).
  • Dieses Filter wird auf die gleiche Weise auf die ganzzahligen Pixelwerte des Bezugsframes (600) angewendet, wie dies oben in Bezug auf das Berechnen der Position P4 beschrieben wurde. Nachdem der geeignete Wert von Rv hinzuaddiert ist, werden die Ergebnisse um fünf Bits nach rechts verschoben. In der zweiten Stufe werden die Zwischenergebnisse V1 bis V4 durch ein weiteres bikubisches Viertelpixelfilter verwendet, um den Pixelwert an der Position P3 zu berechnen. Genauer gesagt, wird ein Viertelpixelfilter verwendet, das die folgende Form aufweist: P3 = (–4V1 + 53V2 + 18V3 – 3V4) (37).
  • Das Ergebnis der zweiten Stufe wird um sieben Bits nach rechts verschoben, um einen 9-Bit-Wert zu erhalten, jegliches notwendige Beschneiden wird durchgeführt, und es wird ein abschließender interpolierter 8-Bit-Wert ausgegeben.
  • Obgleich dies nicht in den 9 bis 11 dargestellt ist, können die Werte der Subpixel-Positionen, die eine Dreiviertelpixel-Verschiebung in einer oder beiden der Dimensionen aufweisen, ebenfalls berechnet werden. Um eine solche Subpixel-Position zu berechnen, können die oben beschriebenen Verfahren unter Verwendung der geeigneten bikubischen Dreiviertelpixelfilter anstelle der bikubischen Viertelpixelfilter modifiziert werden.
  • In anderen Ausführungsformen werden bilineare Filter oder eine Kombination aus bilinearen und bikubischen Filtern zum Interpolieren der Werte an den Subpixel-Abtastwert-Positionen verwendet. Die Verwendung von bilinearen Filtern reduziert im Allgemeinen die Menge an Verschiebung, die durchgeführt wird (nach der ersten Stufe und insgesamt), da die Koeffizienten weniger Expansion verursachen als mit bikubischen Filtern. In einer Implementierung, die beispielsweise bilineare Filter und 16-Bit-Zwischenwerte verwendet, wird in der ersten Stufe keinerlei Verschiebung durchgeführt, wodurch die Verwendung der 16-Bit-Wortgrenze maximiert wird, und nach der letzten Stufe wird eine Rechts-Verschiebung um 4 Bits durchgeführt. Auf ähnliche Weise kann das Beschneiden bis zur letzten Stufe aufgeschoben werden.
  • Ein der den oben beschriebenen Verfahren zugrunde liegenden Prinzipien ist die Verwendung der höchstmöglichen Genauigkeit in jeder Stufe des Filterns während des Einhaltens der gewünschten „Wortgrößen"-Grenze W. Wenn der Ausgabewert einen dynamischen Bereich von D Bits aufweist, und L Bits in der letzten Stufe entfernt werden, kann die Ausgabe der letzten Stufe des Filterns eine Größe von bis zu D + L + 1 Bits annehmen, wobei das eine zusätzliche Bit für das Signalisieren von Unterläufen und Oberläufen verwendet wird. Rückwärts betrachtet, wenn die letzte Stufe des Filterns in einer Expansion um k Bits resultiert, dann sollte sich die Eingabe in die letzte Stufe innerhalb des Bereiches D + L – k bewegen. Dementsprechend existiert, mit dem Ziel eine maximale Genauigkeit mit einer W-Bit-Repräsentation beizubehalten, die folgende Beziehung: D + L + 1 = W (38)
  • Darüber hinaus sollte sich die Eingabe in die letzte Stufe innerhalb des Bereiches D + L – k = W – k – 1 Bits bewegen.
  • Die obenstehende Logik kann rekursiv auf die vorletzte Stufe des Filterns und so weiter angewendet werden. Tatsächlich können die Grenzen noch enger gefasst werden, wenn bruchzahlige Bits verwendet werden, um Nicht-2k-Bereiche und Expansionsfaktoren darzustellen.
  • Die 12 bis 15 sind Diagramme, die verschiedene Verfahren darstellen, die obenstehend in Kombination beschrieben wurden, die jedoch auch einzeln auf die mehrstufige Interpolation angewendet werden können. Die 12 bis 15 zeigen nicht die verschiedenen Möglichkeiten, in denen die jeweilige mehrstufige Interpolation (1200, 1300, 1400, 1500) zusammen mit anderen Verfahren zur mehrstufigen Interpolation verwendet werden kann.
  • Obgleich darüber hinaus eine jede der 12 bis 15 zwei Stufen darstellt, können die in den 12 bis 15 dargestellten Verfahren zur mehrstufigen Interpolation (1200, 1300, 1400, 1500) mehr Stufen umfassen. Noch allgemeiner ausgedrückt, können die Verfahren zu mehrstufiger Interpolation (1200, 1300, 1400, 1500) mit einem beliebigen Typ von aufteilbaren Filtern in mehreren Dimensionen, ebenso wie mit beliebigen Filtern in einer Kaskaden-, einer Trellis-, oder einer Rasterstruktur implementiert werden.
  • Die 12 bis 15 zeigen allgemeine Eingabewerte, Ausgabewerte und Filter, die in der mehrstufigen Interpolation verwendet werden. Die spezifische Auswahl der Bit-Tiefe für die Eingabewerte der ersten Stufe, für die Ausgabewerte der letzten Stufe und für die Zwischenwerte kann beliebig in Übereinstimmung mit den technischen Spezifikationen einer Ziel-Architektur oder einer Anwendung ausgeweitet werden. So können die Eingabewerte beispielsweise 8-Bit-Pixelwerte an Ganzpixel-Positionen in Bezugsframes sein, die Ausgabewerte können 8-Bit-Pixelwerte an Subpixel-Positionen in Bezugsframes sein, und die Filter können reguläre und annähernd bikubische Filter (wie oben in Bezug auf die 6 bis 8 beschrieben) sein. Alternativ dazu haben die Eingabewerte und/oder die Ausgabewerte dynamische Bereiche einer anderen Bit-Tiefe, oder es werden andere Filter verwendet.
  • Eine Komponente wie beispielsweise der Kodierer oder der Dekodierer, die in Bezug auf 4 beziehungsweise 5 beschrieben wurden, können mehrstufige Interpolation (1200, 1300, 1400, 1500) durchführen. Alternativ dazu kann auch ein anderer Kodierer oder Dekodierer, oder ein anderer Typ von Komponente die mehrstufige Interpolation (1200, 1300, 1400, 1500) durchführen.
  • 12 zeigt ein Diagramm der mehrstufigen Interpolation (1200) mit einem verbesserten dynamischen Bereich (in Bits) für interpolierte Zwischenwerte. In der ersten Stufe (1210) wendet die Komponente ein erstes Filter F1 auf eine oder mehrere Eingabewerte mit einem x-Bit-Bereich (1211) an (1212), wodurch ein oder mehrere Zwischenwerte mit einem y-Bit-Bereich (1220) erzeugt werden, wobei y größer als x ist. So sind beispielsweise die y-Bit-Zwischenwerte Pixelwerte, die einen dynamischen Bereich haben, der größer als 8 Bits ist, und die x-Bit-Eingabewerte haben einen dynamischen Bereich von 8 Bits.
  • In jeder der keinen oder mehreren Zwischenstufen (1222), die nicht ausführlich dargestellt sind, wendet die Komponente ein Filter auf die Zwischenwerte mit y-Bit-Bereich (1220) an. Die Ausgabe von den Zwischenstufen ist ein oder mehrere Zwischenwerte mit z-Bit-Bereich (1229), wobei z größer als x ist. (Wenn in den 12 bis 15 die letzte Stufe die zweite Stufe ist, sind die Zwischenwerte, die von der ersten Stufe ausgegeben werden, die Eingabe-Zwischenwerte in die letzte Stufe).
  • In der letzten Stufe (1230) wendet die Komponente (1232) ein letztes Filter FL auf den einen oder die mehreren Zwischenwerte mit z-Bit-Bereich (1229) an. Die abschließende Ausgabe ist ein Ausgabewert mit einem x-Bit-Bereich (1234). Die Komponente wiederholt gegebenenfalls für jedes der Verfahren zur mehrstufigen Interpolation (1200, 1300, 1400, 1500) die mehrstufige Interpolation (1200, 1300, 1400, 1500) für zusätzliche Ausgabewerte. In der wiederholten Interpolation kann die Komponente bestimmte Zwischenwerte, die in vorherigen Interpolationen berechnet wurden, erneut verwenden.
  • 13 zeigt ein Diagramm der mehrstufigen Interpolation (1300) mit übersprungenem Begrenzen. Durch Aufschieben des Begrenzens wird beispielsweise der Rechenprozess beschleunigt, da die Komponente nicht mehr jeden Zwischenwert hinsichtlich der Obergrenze und der Untergrenze des Bereiches überprüft. Durch Aufschieben des Begrenzens wird darüber hinaus auch die Genauigkeit in den Zwischenwerten beibehalten.
  • In der ersten Stufe (1310) wendet die Komponente ein erstes Filter F1 auf einen oder mehrere Eingabewerte mit x-Bit-Bereich (1311) an (1312). Nach dem Anwenden des ersten Filters F1 wird kein Begrenzen durchgeführt. Auf diese Weise können der eine oder die mehreren Zwischenwerte (1320), die von dem ersten Filter F1 ausgegeben werden, einen dynamischen Bereich haben, der größer als x Bits ist. So sind beispielsweise die Eingabewerte 8-Bit-Werte, und die Ausgabe von dem ersten Filter F1 hat einen dynamischen Bereich von 9 oder mehr Bits aufgrund des Expansionsfaktors, der durch die Koeffizienten des ersten Filters F1 verursacht wurde.
  • In jeder der keinen oder mehreren Zwischenstufen (1322), die nicht ausführlich dargestellt sind, wendet die Komponente ein Filter auf einen oder mehrere nicht-begrenzte Zwischenwerte (1320) an. Das Begrenzen kann in der keinen oder mehreren Zwischenstufen (1322) auch übersprungen werden. Die Zwischenwerte (1329), die von der keinen oder mehreren Zwischenstufen (1322) ausgegeben werden, werden in die letzte Stufe (1330) eingegeben, in der die Komponente ein letztes Filter FL auf die Werte (1329) anwendet (1332). Die abschließende Ausgabe von dem letzten Filter FL wird begrenzt (1334), und es wird ein Wert mit einem x-Bit-Bereich ausgegeben.
  • 14 zeigt ein Diagramm der mehrstufigen Interpolation (1400) mit aufgeschobener Bit-Verschiebung. In der ersten Stufe (1410) wendet die Komponente ein erstes Filter F1 auf einen oder mehrere Eingabewerte mit x-Bit-Bereich (1411) an (1412). Einhergehend mit oder im Anschluss des Anwendens des ersten Filters F1 wird eine verkürzte Verschiebung (1414) durchgeführt. Die verkürzte Verschiebung (1414) ist kleiner als die Menge, die erforderlich ist, um einen Ausgabewert mit x-Bit-Bereich zu garantieren (in Anbetracht des Expansionsfaktors der Koeffizienten des ersten Filters F1), und ist demzufolge kleiner als die, die typischerweise mit dem ersten Filter F1 assoziiert wird. Dementsprechend erzeugt die verkürzte Verschiebung (1414) einen oder mehrere Zwischenwerte, die einen dynamischen Bereich (von y Bits) aufweisen, der größer als x Bits ist. So haben die Eingabewerte beispielsweise einen dynamischen Bereich von 8 Bits, und die Zwischenwerte haben einen dynamischen Bereich, der größer als 8 Bits ist.
  • In der keinen oder mehreren Zwischenstufen (1422), die nicht ausführlich dargestellt sind, wendet die Komponente ein Filter auf den einen oder die mehreren Zwischenwerte (1420) an. Ein oder mehrere Zwischenwerte (1429), die einen dynamischen Bereich von z Bits aufweisen (größer als x Bits), werden von der keinen oder mehreren Zwischenstufen (1422) ausgegeben, und in einer letzten Stufe wendet (1432) die Komponente ein letztes Filter FL auf die Werte (1429) an. Die abschließende Ausgabe von dem letzten Filter FL wird um eine Menge verschoben (1434), die größer ist als die, die typischerweise mit dem letzten Filter FL assoziiert wird, wodurch der dynamische Bereich des Ausgabewertes (1434) bis auf eine spezifizierte Bit-Tiefe zusammengezogen wird. So entspricht beispielsweise der dynamische Bereich (in Bits) des Ausgabewertes (1434) x oder x + 1. In einer Implementierung wird die Verschiebung der ersten Stufe und der Zwischenstufe so lange wie möglich bis zur letzten Stufe aufgeschoben. Die Menge, um die die Verschiebung aufgeschoben wird, kann von der verfügbaren Bit-Tiefe für die Zwischenberechnungen und den Expansionsfaktoren der jeweiligen Filter abhängen.
  • 15 zeigt ein Verfahren für mehrstufige Interpolation (1500) unter Verwendung einer mit den Stufen wechselnden Rundungssteuerung. Die mehreren Stufen des Interpolationsverfahrens (1500) wechseln sich darin ab, wie sie Rundungs-Steuerung anwenden, um das Runden anzupassen. Dies hilft beim Verhindern des Anhäufens eines Rundungsfehlers von Frame zu Frame in bestimmten Videosequenzen. Wenn beispielsweise Videosequenz mit einer geringen Qualität eine Bewegung von einer Stelle zur anderen in einer Dimension (Panning) oder in zwei Dimensionen (Zooming) enthält, kann das Anhäufen von Rundungsfehlern in einer allmählichen Farbverblassung von Frame zu Frame resultieren, wodurch wahrnehmbare Artefakte entstehen können. Die mit den Stufen wechselnde Rundungs-Steuerung trägt zum Verhindern einer solchen Farbverblassung bei.
  • Ein Zahlenbeispiel kann dabei hilfreich sein, das Runden, bei dem mit den Stufen wechselnde Rundungssteuerung vor der Bit-Verschiebung nach rechts angewandt wird, zu illustrieren. Die Bit-Verschiebung nach rechts resultiert in der Hauptsache in der Teilung und dem Abschneiden des nach rechts verschobenen Wertes. Durch Addieren eines Rundungswertes vor der Verschiebung wird der verschobene Wert entweder auf- oder abgerundet (auf die nächste Integerzahl), anstatt immer abgerundet (abgeschnitten) zu werden. Durch Verwendung der Rundungssteuerung wird die Richtung des Rundens (nach oben oder nach unten) für einen marginalen Wert geändert. So sei beispielsweise angenommen, dass in jeder der mehreren Stufen die Ausgabe des Filterns durch Addieren von ½ des „Divisors" einer Rechts-Verschiebung vor der Rechts-Verschiebung (beispielsweise Addieren von 24 = 16 vor einer Bit-Verschiebung nach rechts um 5 Bits, Addieren von 28 = 64 vor einer Bit-Verschiebung nach rechts um 7 Bits) angepasst wird. Der Effekt dieser Addition besteht darin, dass Werte, die (nach einer Division, die der Bit-Verschiebung entspricht) eine bruchzahlige Komponente von ,5 oder höher haben würden, (auf die nächstgrößere Integerzahl) aufgerundet werden. Anderenfalls würden solche Werte durch die Rechts-Verschiebung (auf die nächstkleinere Integerzahl) abgerundet werden. Ungeachtet der Addition werden Werte, die eine bruchzahlige Komponente von weniger als ,5 (nach der Division entsprechend der Bit-Verschiebung) immer noch durch die Rechts-Verschiebung abgerundet (auf die nächstkleinere Integerzahl). Die Rundungs-Steuerung ändert dann die Richtung des Rundens für bestimmte marginale Werte. So wird beispielsweise in jeder der mehreren Stufen die Ausgabe des Filterns weiter durch Subtrahieren von 0 oder 1 (der wechselnde Rundungs-Steuerungswert) vor der Rechts-Verschiebung (beispielsweise 2VerschiebungV-1 oder 2VerschiebungV-1 – 1) angepasst. Der Effekt der Anpassung der Rundungs-Steuerung besteht darin, die Richtung des Rundens für Werte zu ändern, die (nach einer Division entsprechend der Bit-Verschiebung) eine bruchzahlige Komponente von ,5 aufweisen würden. Wenn der Wert 1 subtrahiert wird, werden solche marginalen Werte abgerundet. Ansonsten werden solche marginalen Werte aufgerundet.
  • Jede der mehreren Stufen verwendet einen Rundungssteuerungswert, der vor der mehrstufigen Interpolation zwischen 0 und 1 wechselt, dementsprechend wechseln die verschiedenen Stufen darin, wie der Rundungssteuerungswert angewendet wird. Alternativ dazu verwendet das Verfahren zur mehrstufigen Interpolation (1500) einen Rundungssteuerungswert, der sich selbst von Stufe zu Stufe ändert.
  • In der ersten Stufe (1510) von 15 wendet die Komponente ein erstes Filter F1 auf einen oder mehrere Eingabewerte mit einem x-Bit-Bereich (1511) an (1512). Einhergehend mit oder im Anschluss an das Anwenden des ersten Filters F1 wird an der Ausgabe des ersten Filters F1 Runden (1514) durchgeführt. Das Runden (1514) wird durch die mit den Stufen wechselnde Rundungssteuerung angepasst. So veranlasst beispielsweise die mit den Stufen wechselnde Rundungssteuerung in der ersten Stufe (1510) den Ausgabewert dazu, auf die nächstgrößere Integerzahl aufgerundet zu werden, wenn der Ausgabewert ein marginaler Wert ist (ansonsten würde der Ausgabewert abgerundet werden). Ein oder mehrere gerundete Zwischenwerte (1520) werden von der ersten Stufe ausgegeben und in eine zweite Stufe (1530) eingegeben.
  • In der zweiten Stufe (1530) wendet die Komponente ein zweites Filter F2 auf den einen oder mehrere Zwischenwerte (1520) an (1532). Das Runden (1534) wird an der Ausgabe von dem zweiten Filter F2 durchgeführt. Einhergehend mit oder im Anschluss an das Anwenden des zweiten Filters F2 wird Runden (1534) mit der mit den Stufen wechselnden Rundungssteuerung durchgeführt, wobei die Rundungssteuerung bewirkt, dass das Runden in die entgegengesetzte Stufe zu der ersten Stufe für die marginalen Werte durchgeführt wird. So veranlasst beispielsweise in der zweiten Stufe (1530) die mit den Stufen wechselnde Rundungssteuerung den Ausgabewert dazu, nach oben auf die nächste Integerzahl gerundet zu werden, wenn der Ausgabewert ein marginaler Wert ist. Von der zweiten Stufe werden ein oder mehrere Zwischenwerte (1536) ausgegeben und können in der keinen oder mehreren zusätzlichen Stufen (1540) verwendet werden. Die keine oder mehreren zusätzlichen Stufen (1540) können weiterhin eine mit den Stufen wechselnde Rundungssteuerung enthalten.
  • Die mit den Stufen wechselnde Rundungssteuerung ist nicht auf das Anwenden in aufeinanderfolgenden Stufen beschränkt, sondern kann auch in verschiedenen anderen Kombinationen von Stufen angewendet werden. Des Weiteren kann die erste Richtung von einer Reihe von Parametern abhängen. So kann beispielsweise in einem Videokodierer und -dekodierer die erste Richtung von der Rundungssteuerung, die in dem vorangehenden Frame verwendet wurde, oder von dem Typ von Frame abhängen, der jeweils interpoliert wird (beispielsweise ein I-Frame, P-Frame oder B-Frame). In anderen Ausführungsformen kann die erste Richtung auf eine Konstante eingestellt werden, die implizit von Kausalinformationen abgeleitet wird (beispielsweise anhand von vorher ko dierten/dekodierten Informationen) und die unter Verwendung eines Pseudozufallsgenerator hergeleitet oder als Teil des Bitstroms signalisiert wird. Die mit den Stufen wechselnde Rundungs-Steuerung kann in der mehrstufigen Interpolation unter Verwendung einer Bandbreite von Interpolationsfiltern einschließlich bilinearen, bikubischen und annähernd bikubischen Filtern angewendet werden.
  • D. Chrominanz-Bewegungsvektoren
  • Da die Chrominanz- (Chroma) Bewegungsvektoren implizit von den an der gleichen Position vorhandenen Luminanz-Bewegungsvektoren hergeleitet werden, ist ihre Genauigkeit beschränkt und bietet daher einen Anlass für Vereinfachung. Diese Vereinfachung kann die Rechenkomplexität der Subpixel-Interpolation für Chrominanzwerte in dem Kodierer und dem Dekodierer reduzieren, ohne dass dabei die wahrgenommene Qualität des kodierten Videos verringert wird. Darüber hinaus können der Kodierer und der Dekodierer zwischen verschiedenen Modi für das Runden von Chrominanz-Bewegungsvektoren und Interpolation schalten. So ist beispielsweise ein Modus an der Qualität in dem kodierten Video zu Lasten einer größeren Rechenkomplexität ausgerichtet. Ein anderer Modus betont die Recheneinfachheit zu Lasten der Qualität in einer Form .
  • In einer Implementierung verwenden ein Videokodierer und ein -dekodierer ein Sequenzstufen-1-Bit-Feld „FASTUVMC" zum Steuern der Subpixel-Interpolation für die Chrominanzwerte und das Runden der Chrominanz-Bewegungsvektoren. Dementsprechend arbeiten der Videokodierer und -dekodierer selektiv in einem der zwei verschiedenen Modi des Chrominanz-Rundens, einem Schnell-Modus und einem Basismodus.
  • 16 zeigt ein Verfahren (1600) für das Auswählen zwischen mehreren Modi für Chrominanz-Runden und Interpolation. So führt beispielsweise ein Videokodierer oder -dekodierer, so wie einer, der oben in Bezug auf die 4 und 5 beschrieben wurde, jeweils das Verfahren durch.
  • Der Videokodierer oder -dekodierer bestimmt (1610), ob ein Ein-Bit-Flag FASTUVMC anzeigt, dass ein Schnell-Modus für Chrominanz-Bewegungskompensation (Flag = 1) oder ein Basismodus für Chrominanz-Bewegungskompensation (Flag = 0) verwendet werden soll. So ist das Flag beispielsweise ein Sequenzstufen-Feld, das einer Benutzereinstellung entspricht, das ein Kodierer in den Bitstrom des kodierten Videos schreibt und das ein Dekodierer aus dem Bitstrom liest. Alternativ dazu verwenden der Kodierer und der Dekodierer zum Signalisieren eines Modus für Chrominanz-Runden und/oder für Interpolation unter Verwendung von Codes mit nicht veränderbarer Länge oder veränderbarer Länge mehr Bits, um zwischen mehr als zwei verfügbaren Modi auszuwählen. Oder, anstatt ein Sequenzstufen-Feld entsprechend einer Benutzereinstellung zu sein, wird die Schaltinformation an einer anderen Stelle in dem Bitstrom signalisiert und/oder entsprechend anderer Kriterien eingestellt.
  • Anschließend führt der Videokodierer oder -dekodierer Chrominanz-Bewegungskompensation im Basismodus (1620) oder im Schnell-Modus (1630) durch. Die Einzelheiten des Basismodus (1620) und des Schnell-Modus (1630) des Bewegungsvektor-Rundens und der Interpolation werden für eine Implementierung untenstehend beschrieben. Alternativ dazu haben diese Modi andere Implementierungen. So wird beispielsweise die Nachschlagtabelle, die in der unten beschriebenen Implementierung des Schnell-Modus (1630) verwendet wird, auf ein anderes Abbilden geändert, um ein gewünschtes Leistungsniveau für eine spezifische Hardware-Architektur zu erreichen, oder sie wird so geändert, dass sie für Bewegungsvektoren mit unterschiedlichen Genauigkeiten funktioniert. Anstelle des oder zusätzlich zu dem Basismodus (1620) und dem Schnell-Modus (1630) kann der Kodierer oder der Dekodierer andere Modi für das Runden der Chrominanz-Bewegungsvektoren und der Interpolation verwenden.
  • In einer Implementierung werden im Schnell-Modus (beispielsweise, wenn das Flag für Chrominanz-Runden = 1 ist) die Chrominanz-Bewegungsvektoren, die sich an Viertelpixel-Abständen befinden (das heißt an einem Ein-Viertelpixel-und-Drei-Viertelpixel-Abstand) zu den nächsten Ganzpixel-Positionen gerundet, wobei die Chrominanz-Bewegungsvektoren, die sich an Halbpixel-Abständen befinden, nicht gerundet werden, und bilineares Filtern wird für die gesamte Chrominanz-Interpolation verwendet. In diesem Modus wird die Geschwindigkeit des Kodierers und des Dekodierers erhöht. Die Motivation für diese Optimierung besteht in dem signifikanten Unterschied zwischen den Komplexitäten des Interpolierens von Pixel-Anordnungen, die sich an: (a) Ganzpixel-Positionen; (b) Halbpixel-Positionen; (c) einer Viertelpixel-Position für wenigstens eine Koordinate (von x und y); und (d) einer Viertelpixel-Position für beide Koordinaten befin den. Das Verhältnis von a:b:c:d beträgt ungefähr 1:4:4.7:6:6. Durch Anwenden dieses Schnell-Modus kann man (a) und (b) bevorzugen, wodurch die Dekodier-Zeit reduziert wird. Da dies nur für Chrominanz-Interpolation durchgeführt wird, sind sowohl der Kodier- als auch Qualitätsverlust (insbesondere die sichtbare Qualität) sehr gering.
  • In diesem Schnell-Modus wird eine abschließende Stufe des Rundens an den Chrominanz-Bewegungsvektoren wie folgt durchgeführt: //RndTbl[–3] = –1, RndTbl[–2] = 0, RndTbl[–1] = +1, RndTbl[0] = 0 //RndTbl[1] = –1, RndTbl[2] = 0, RndTbl[3] = +1 cmv_x = cmv_x + RndTbl[cmv_x % 4]; cmv_y = cmv_y + RndTbl[cmv_y % 4]; (39)wobei cmv_x und cmv_y die x- und y-Koordinaten des Chrominanz-Bewegungsvektors in Einheiten von Viertelpixeln repräsentieren, und % repräsentiert die Modulus- (oder Restwert) Operation, die wie folgt definiert wird: (x % a) = –(–x % a). (Der Modulus einer negativen Zahl entspricht dem Negativwert des Modulus der entsprechenden positiven Zahl.) Wenn demzufolge cmv_x (oder cmv_y) durch 4 teilbar ist, dann hat der Chrominanz-Bewegungsvektor einen ganzzahligen Abstand. Wenn cmv_x % 4 = +/– 2 ist, dann hat der Chrominanz-Bewegungsvektor einen Halbpixel-Abstand. Und wenn cmv_x % 4 = +/– 1 oder +/– 3 ist, dann hat der Chrominanz-Bewegungsvektor einen Viertelpixel-Abstand. Wie gesehen werden kann, werden durch die oben dargestellte Operation des erneuten Abbildens die Viertelpixel-Positionen durch Runden der Chrominanz-Bewegungsvektoren auf die nächstliegende ganzzahlige Position (Halbpixel-Positionen werden nicht geändert) nicht mehr zugelassen. Dementsprechend bildet dieser Modus Chrominanz-Koordinaten auf Ganzpixel- und Halbpixel-Positionen ab. Bilineares Filtern kann für eine weitere Beschleunigung für alle Chrominanz-Interpolationen in diesem Modus verwendet werden. Obgleich diese Implementierung des Schnell-Modus als Kombination mit einer Auswahl von mehreren Rundungs-Modi beschrieben wird, kann die Implementierung des Schnell-Modus alternativ dazu auch eigenständig (das heißt, als der einzig möglich Modus) verwendet werden.
  • 17 ist eine Tabelle, die den Schnell-Modus des Chrominanz-Rundens darstellt. Die erste Zeile (1710) zeigt die Werte für die Luminanz-Bewegungsvektoren mit einer Vier telpixelgenauigkeit. Obgleich die Werte der Luminanz-Bewegungsvektoren hinsichtlich ihrer bruchzahligen Abstände ausgehend von Ganzpixel-Werten dargestellt sind, könnten sie auch als ganzzahlige Werte dargestellt werden, wobei jede Integerzahl eine Erhöhung um ein Viertelpixel darstellt (das heißt 0, 1, 2, 3, 4 anstelle von 0, ¼, ½, ¾, 1). Die zweite Zeile (1720) zeigt, wie die entsprechenden Werte der Chrominanz-Bewegungsvektoren in dem Schnell-Modus gerundet werden, so dass sie eine Ganzpixel- und eine Halbpixelgenauigkeit aufweisen.
  • In dem zweiten, dem Basismodus dieser Implementierung (wenn beispielsweise das Flag für Chrominanz-Runden = 0 ist) bleiben die Chrominanz-Bewegungsvektoren, die sich an Viertelpixel-Abständen befinden und bei denen kein Rundungsfehler vorliegt, an den Viertelpixel-Abständen. Die Chrominanz-Bewegungsvektoren an anderen Subpixel-Abständen werden auf die nächste Ganzpixel- oder Halbpixel-Positionen gerundet. In diesem Modus kann die Geschwindigkeit des Dekodierers geringer als in anderen Modi sein, jedoch ist die Genauigkeit, mit der die Werte der Chrominanzpixel berechnet werden, höher. Dementsprechend bildet dieser Basismodus die Chrominanz-Koordinaten erneut auf Ganzpixel-, Halbpixel- und Viertelpixel-Positionen ab. Für die Chrominanz-Interpolation kann, wie oben beschrieben, bikubisches Filtern oder bilineares Filtern verwendet werden.
  • 18 ist eine Tabelle, die diesen Basismodus des Chrominanz-Rundens darstellt. Die erste Zeile (1810) zeigt die Werte der Luminanz-Bewegungsvektoren mit Viertelpixelgenauigkeit. Die zweite Zeile (1830) zeigt, wie die entsprechenden Werte der Chrominanz-Bewegungsvektoren in dem oben beschriebenen Basismodus so gerundet werden, dass sie eine Ganzpixel-, eine Halbpixel-, und eine Viertelpixelgenauigkeit aufweisen. In anderen Implementierungen wird der Chrominanzraum auf andere Auflösungen im Chrominanzraum gerundet.
  • Nachdem die Prinzipien unserer Erfindung in Bezug auf die verschiedenen Ausführungsformen beschrieben und illustriert worden sind, wird offensichtlich sein, dass die verschiedenen Ausführungsformen in ihrer Struktur und im Detail modifiziert werden können, ohne dabei von solchen Prinzipien abzuweichen. So sind beispielsweise die oben beschriebenen Prinzipien und Verfahren nicht auf die Verwendung in einem Videokodierer und/oder einem Videodekodierer beschränkt. Stattdessen können sie auch in einem Rechenkontext angewendet werden, in der ein Wert teils auf Basis von einem oder mehreren Zwischenwerten berechnet wird, oder in der aufteilbare Filter in mehreren Dimensionen verwendet werden.
  • Es sollte beachtet werden, dass sich die hierin beschriebenen Programme, Prozesse oder Verfahren nicht auf einen bestimmten Typ von Rechenumgebung beziehen, beziehungsweise auf diesen beschränkt sind, es sei denn es ist anderweitig angegeben. Es können verschiedene Typen von Universal- oder Spezialrechenumgebungen für die Operationen und das Ausführen derselben in Übereinstimmung mit den hierin beschriebenen Lehren verwendet werden. Elemente der Ausführungsformen, die für die Software dargestellt sind, können auch in der Hardware implementiert werden und vice versa.
  • In Anbetracht der vielen möglichen Ausführungsformen, auf die die Prinzipien unserer Erfindung angewendet werden können, beanspruchen wir sämtliche solcher Ausführungsformen, die in den Umfang der folgenden Ansprüche fallen, sowie deren Entsprechungen, als unsere Erfindung.

Claims (8)

  1. Verfahren bikubischer Interpolation, das umfasst: für eine erste Stufe (810, 1410) bikubischer Interpolation Filtern (812, 1412) von Abtastwerten eines Bezugs-Videobildes (600) in einer ersten Dimension unter Verwendung eines annähernd bikubischen Filters, das Filterkoeffizienten aufweist, einschließlich Bit-Verschiebung (814, 1414), um Expansion aufgrund der Filterkoeffizienten in der ersten Stufe auszugleichen, wobei wenigstens ein Teil der Bit-Verschiebung aufgeschoben wird und das Filtern für die erste Stufe Zwischenergebnisse (820, 1420) erzeugt; und für eine zweite Stufe (830, 1430) der bikubischen Interpolation Filtern (832, 1432) der Zwischenergebnisse in einer zweiten Dimension unter Verwendung des annähernd bikubischen Filters einschließlich Bit-Verschiebung (834, 1434), um die aufgeschobene Bit-Verschiebung und die Expansion aufgrund der Filterkoeffizienten in der zweiten Stufe auszugleichen, wobei das annähernd bikubische Filter eine Näherung an ein rein bikubisches Filter darstellt, das einen Normierungsfaktor auf eine gewichtete Summe von Produkten von ganzzahligen Filterkoeffizientwerten und Abtastwerten anwendet, wobei das annähernd bikubische Filter reduzierte Filterkoeffizientwerte und einen reduzierten Normalisierungsfaktor anwendet, wobei die Bit-Verschiebungsaufschiebung so definiert ist, dass sie eine verfügbare Bit-Tiefe einer Ziel-Architektur der zweiten Stufe vollständig nutzt, jedoch nicht überschreitet.
  2. Verfahren nach Anspruch 1, wobei die Filterkoeffizienten des annähernd bikubischen Filters eine Summe und einen Expansionsfaktor haben, die relativ zu der Summe und dem Expansionsfaktor von Filterkoeffizienten eines reinen bikubischen Filters reduziert sind, so dass die aufgeschobene Bit-Verschiebung in 16-Bit-Arithmetik für 8-Bit-Abtastwerte des Bezugs-Videobildes möglich ist.
  3. Verfahren nach Anspruch 1, wobei die Filterkoeffizienten des annähernd bikubischen Filters eine Summe von 64 haben.
  4. Verfahren nach Anspruch 1, wobei die Filterkoeffizienten des annähernd bikubischen Filters –4, 53, 18 und –3 sind.
  5. Computerlesbares Medium, das durch Computer ausführbare Befehle speichert, die ein Computersystem veranlassen, das Verfahren nach Anspruch 1 beim Video-Kodieren durchzuführen.
  6. Computerlesbares Medium, das durch Computer ausführbare Befehle speichert, die ein Computersystem veranlassen, das Verfahren nach Anspruch 1 beim Video-Dekodieren durchzuführen.
  7. Video-Kodiersystem, das eine Einrichtung zum Durchführen des Verfahrens nach einem der Ansprüche 1 bis 4 umfasst.
  8. Video-Dekodiersystem, das eine Einrichtung zum Durchführen des Verfahrens nach einem der Ansprüche 1 bis 4 umfasst.
DE60310800T 2002-04-10 2003-03-27 Approximierter Kubikfilter Expired - Lifetime DE60310800T2 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US371860 1982-04-26
US37186002P 2002-04-10 2002-04-10
US10/379,606 US7110459B2 (en) 2002-04-10 2003-03-04 Approximate bicubic filter
US379606 2003-03-04

Publications (2)

Publication Number Publication Date
DE60310800D1 DE60310800D1 (de) 2007-02-15
DE60310800T2 true DE60310800T2 (de) 2007-04-26

Family

ID=28794436

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60310800T Expired - Lifetime DE60310800T2 (de) 2002-04-10 2003-03-27 Approximierter Kubikfilter

Country Status (9)

Country Link
US (1) US7110459B2 (de)
EP (1) EP1359763B1 (de)
JP (1) JP4625240B2 (de)
KR (1) KR100681972B1 (de)
CN (1) CN1238798C (de)
AT (1) ATE350860T1 (de)
DE (1) DE60310800T2 (de)
ES (1) ES2278087T3 (de)
HK (1) HK1060242A1 (de)

Families Citing this family (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7620109B2 (en) * 2002-04-10 2009-11-17 Microsoft Corporation Sub-pixel interpolation in motion estimation and compensation
JP4102973B2 (ja) * 2002-04-24 2008-06-18 日本電気株式会社 動画像の符号化方法および復号化方法、これを用いた装置とプログラム
US7336720B2 (en) * 2002-09-27 2008-02-26 Vanguard Software Solutions, Inc. Real-time video coding/decoding
US7869516B2 (en) * 2003-03-31 2011-01-11 Hewlett-Packard Development Company, L.P. Motion estimation using bit-wise block comparisons for video compresssion
US8824553B2 (en) * 2003-05-12 2014-09-02 Google Inc. Video compression method
EP1617672A1 (de) * 2004-07-13 2006-01-18 Matsushita Electric Industrial Co., Ltd. Bewegunsschätzer/kompensator mit einem 16-bit 1/8 pel interpolationsfilter
US7512182B2 (en) * 2004-08-30 2009-03-31 General Instrument Corporation Method and apparatus for performing motion compensated temporal filtering in video encoding
FR2876860A1 (fr) * 2004-10-20 2006-04-21 Thomson Licensing Sa Procede de codage hierarchique d'images video
US20060285597A1 (en) * 2005-06-20 2006-12-21 Flextronics International Usa, Inc. Reusing interpolated values in advanced video encoders
EP2472507B1 (de) * 2005-10-14 2016-02-10 Samsung Display Co., Ltd. Verbesserte farbbereichabbildung und subpixel-wiedergabesysteme und verfahren
CN1794821A (zh) * 2006-01-11 2006-06-28 浙江大学 可分级视频压缩中插值的方法与装置
WO2007116551A1 (ja) * 2006-03-30 2007-10-18 Kabushiki Kaisha Toshiba 画像符号化装置及び画像符号化方法並びに画像復号化装置及び画像復号化方法
WO2007114368A1 (ja) * 2006-03-30 2007-10-11 Kabushiki Kaisha Toshiba 画像符号化装置及び方法並びに画像復号化装置及び方法
US8208553B2 (en) * 2006-05-04 2012-06-26 Altera Corporation Methods and apparatus for quarter-pel refinement in a SIMD array processor
EP2092752A2 (de) * 2006-12-01 2009-08-26 France Telecom Adaptives interpolationsverfahren und system für bewgungskompensierte prädiktive videokodierung und -dekodierung
US7529404B2 (en) * 2007-06-20 2009-05-05 Ahdoot Ned M Digital video filter and image processing
US8023562B2 (en) * 2007-09-07 2011-09-20 Vanguard Software Solutions, Inc. Real-time video coding/decoding
US8638852B2 (en) 2008-01-08 2014-01-28 Qualcomm Incorporated Video coding of filter coefficients based on horizontal and vertical symmetry
GB0800277D0 (en) * 2008-01-08 2008-02-13 Imagination Tech Ltd Video motion compensation
US20090201380A1 (en) * 2008-02-12 2009-08-13 Decisive Analytics Corporation Method and apparatus for streamlined wireless data transfer
US8326075B2 (en) 2008-09-11 2012-12-04 Google Inc. System and method for video encoding using adaptive loop filter
US8131056B2 (en) * 2008-09-30 2012-03-06 International Business Machines Corporation Constructing variability maps by correlating off-state leakage emission images to layout information
JP5697301B2 (ja) * 2008-10-01 2015-04-08 株式会社Nttドコモ 動画像符号化装置、動画像復号装置、動画像符号化方法、動画像復号方法、動画像符号化プログラム、動画像復号プログラム、及び動画像符号化・復号システム
US8315434B2 (en) * 2009-01-06 2012-11-20 Avago Technologies Ecbu Ip (Singapore) Pte. Ltd. Absolute tracking in a sub-pixel range
US20100235314A1 (en) * 2009-02-12 2010-09-16 Decisive Analytics Corporation Method and apparatus for analyzing and interrelating video data
US8458105B2 (en) * 2009-02-12 2013-06-04 Decisive Analytics Corporation Method and apparatus for analyzing and interrelating data
WO2010126783A2 (en) * 2009-04-30 2010-11-04 Roman Gitlin Method and apparatus for streamlined implementation of interpolation in multiple dimensions
WO2011100347A2 (en) 2010-02-09 2011-08-18 Vanguard Software Solutions, Inc. Video sequence encoding system and algorithms
KR101682147B1 (ko) * 2010-04-05 2016-12-05 삼성전자주식회사 변환 및 역변환에 기초한 보간 방법 및 장치
US9049454B2 (en) 2011-01-19 2015-06-02 Google Technology Holdings Llc. High efficiency low complexity interpolation filters
US20120224639A1 (en) * 2011-03-03 2012-09-06 General Instrument Corporation Method for interpolating half pixels and quarter pixels
US8437581B2 (en) 2011-03-04 2013-05-07 General Instrument Corporation Method and system for interpolating fractional video pixels
US20120230407A1 (en) 2011-03-11 2012-09-13 General Instrument Corporation Interpolation Filter Selection Using Prediction Index
US8780971B1 (en) 2011-04-07 2014-07-15 Google, Inc. System and method of encoding using selectable loop filters
US8780996B2 (en) 2011-04-07 2014-07-15 Google, Inc. System and method for encoding and decoding video data
US8781004B1 (en) 2011-04-07 2014-07-15 Google Inc. System and method for encoding video using variable loop filter
CN102811346B (zh) * 2011-05-31 2015-09-02 富士通株式会社 编码模式选择方法和系统
EP2724534A2 (de) 2011-06-24 2014-04-30 Motorola Mobility LLC Auswahl von phasenverschiebungen für interpolationsfilter für bewegungskompensation
JP5727673B2 (ja) 2011-07-01 2015-06-03 モトローラ モビリティ エルエルシーMotorola Mobility Llc 時間予測のためのジョイントサブピクセル補間フィルタ
US8885706B2 (en) 2011-09-16 2014-11-11 Google Inc. Apparatus and methodology for a video codec system with noise reduction capability
JP2013098933A (ja) * 2011-11-04 2013-05-20 Sony Corp 画像処理装置および方法
US8693551B2 (en) 2011-11-16 2014-04-08 Vanguard Software Solutions, Inc. Optimal angular intra prediction for block-based video coding
US9131073B1 (en) 2012-03-02 2015-09-08 Google Inc. Motion estimation aided noise reduction
US9344729B1 (en) 2012-07-11 2016-05-17 Google Inc. Selective prediction signal filtering
US9185437B2 (en) 2012-11-01 2015-11-10 Microsoft Technology Licensing, Llc Video data
US20140119446A1 (en) * 2012-11-01 2014-05-01 Microsoft Corporation Preserving rounding errors in video coding
US9106922B2 (en) 2012-12-19 2015-08-11 Vanguard Software Solutions, Inc. Motion estimation engine for video encoding
KR20140123008A (ko) * 2013-04-05 2014-10-21 삼성전자주식회사 휘도차를 보상하기 위한 인터 레이어 비디오 부호화 방법 및 그 장치, 비디오 복호화 방법 및 그 장치
US9762920B2 (en) * 2013-06-07 2017-09-12 Qualcomm Incorporated Dynamic range control of intermediate data in resampling process
US10015515B2 (en) * 2013-06-21 2018-07-03 Qualcomm Incorporated Intra prediction from a predictive block
TWI602144B (zh) * 2013-10-02 2017-10-11 國立成功大學 包裝彩色圖框及原始景深圖框之方法、裝置及系統
US9774881B2 (en) 2014-01-08 2017-09-26 Microsoft Technology Licensing, Llc Representing motion vectors in an encoded bitstream
US9749642B2 (en) 2014-01-08 2017-08-29 Microsoft Technology Licensing, Llc Selection of motion vector precision
US9942560B2 (en) 2014-01-08 2018-04-10 Microsoft Technology Licensing, Llc Encoding screen capture data
US9883197B2 (en) 2014-01-09 2018-01-30 Qualcomm Incorporated Intra prediction of chroma blocks using the same vector
US10863200B2 (en) * 2014-07-25 2020-12-08 Intel Corporation Techniques for performing a forward transformation by a video encoder using a forward transform matrix
US10102613B2 (en) 2014-09-25 2018-10-16 Google Llc Frequency-domain denoising
JP6473608B2 (ja) 2014-11-27 2019-02-20 三星ディスプレイ株式會社Samsung Display Co.,Ltd. 画像処理装置、画像処理方法、及びプログラム
WO2016147836A1 (ja) * 2015-03-13 2016-09-22 ソニー株式会社 画像処理装置および方法
US10009622B1 (en) 2015-12-15 2018-06-26 Google Llc Video coding with degradation of residuals
CN106127757B (zh) * 2016-06-21 2018-10-23 鲁东大学 基于改进遗传算法的夜晚安防监控视频分割方法及装置
FR3087309B1 (fr) * 2018-10-12 2021-08-06 Ateme Optimisation d'un sous-echantillonnage intervenant avant le codage d'images en compression
US11102487B2 (en) * 2019-08-30 2021-08-24 Adobe Inc. Image resampling for DCT based image encoding formats using memory efficient techniques

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0294958B1 (de) * 1987-06-09 1995-08-23 Sony Corporation Bewegungskompensierte Interpolation von digitalen Fernsehbildern
US5103306A (en) * 1990-03-28 1992-04-07 Transitions Research Corporation Digital image compression employing a resolution gradient
US5594813A (en) * 1992-02-19 1997-01-14 Integrated Information Technology, Inc. Programmable architecture and methods for motion estimation
JPH06343172A (ja) * 1993-06-01 1994-12-13 Matsushita Electric Ind Co Ltd 動きベクトル検出方法及び動きベクトル符号化方法
US5623311A (en) * 1994-10-28 1997-04-22 Matsushita Electric Corporation Of America MPEG video decoder having a high bandwidth memory
EP0710033A3 (de) * 1994-10-28 1999-06-09 Matsushita Electric Industrial Co., Ltd. MPEG Videodekoder mit breitbandigem Speicher
GB2301972B (en) * 1995-06-06 1999-10-20 Sony Uk Ltd Video compression
US6026182A (en) * 1995-10-05 2000-02-15 Microsoft Corporation Feature segmentation
US5929940A (en) * 1995-10-25 1999-07-27 U.S. Philips Corporation Method and device for estimating motion between images, system for encoding segmented images
US5991463A (en) * 1995-11-08 1999-11-23 Genesis Microchip Inc. Source data interpolation method and apparatus
US5787203A (en) * 1996-01-19 1998-07-28 Microsoft Corporation Method and system for filtering compressed video images
US5692063A (en) * 1996-01-19 1997-11-25 Microsoft Corporation Method and system for unrestricted motion estimation for video
US5799113A (en) * 1996-01-19 1998-08-25 Microsoft Corporation Method for expanding contracted video images
US6957350B1 (en) * 1996-01-30 2005-10-18 Dolby Laboratories Licensing Corporation Encrypted and watermarked temporal and resolution layering in advanced television
US5982438A (en) * 1996-03-22 1999-11-09 Microsoft Corporation Overlapped motion compensation for object coding
US6233017B1 (en) * 1996-09-16 2001-05-15 Microsoft Corporation Multimedia compression system with adaptive block sizes
US6130963A (en) * 1996-11-22 2000-10-10 C-Cube Semiconductor Ii, Inc. Memory efficient decoding of video frame chroma
US6377628B1 (en) * 1996-12-18 2002-04-23 Thomson Licensing S.A. System for maintaining datastream continuity in the presence of disrupted source data
US6005980A (en) 1997-03-07 1999-12-21 General Instrument Corporation Motion estimation and compensation of video object planes for interlaced digital video
US5844613A (en) * 1997-03-17 1998-12-01 Microsoft Corporation Global motion estimator for motion video signal encoding
US5973755A (en) * 1997-04-04 1999-10-26 Microsoft Corporation Video encoder and decoder using bilinear motion compensation and lapped orthogonal transforms
US6067322A (en) * 1997-06-04 2000-05-23 Microsoft Corporation Half pixel motion estimation in motion video signal encoding
ES2431802T3 (es) * 1997-06-09 2013-11-28 Hitachi, Ltd. Procedimiento de decodificación de imágenes y decodificador de imágenes
JPH1169345A (ja) * 1997-06-11 1999-03-09 Fujitsu Ltd フレーム間予測動画像符号化装置及び復号装置並びにフレーム間予測動画像符号化方法及び復号方法
FR2766946B1 (fr) * 1997-08-04 2000-08-11 Thomson Multimedia Sa Procede et dispositif de pretraitement pour estimation de mouvement
US6281942B1 (en) * 1997-08-11 2001-08-28 Microsoft Corporation Spatial and temporal filtering mechanism for digital motion video signals
US6122017A (en) * 1998-01-22 2000-09-19 Hewlett-Packard Company Method for providing motion-compensated multi-field enhancement of still images from video
JP4026238B2 (ja) * 1998-07-23 2007-12-26 ソニー株式会社 画像復号装置及び画像復号方法
GB2343579A (en) 1998-11-07 2000-05-10 Ibm Hybrid-linear-bicubic interpolation method and apparatus
US6983018B1 (en) 1998-11-30 2006-01-03 Microsoft Corporation Efficient motion vector coding for video compression
US6418166B1 (en) * 1998-11-30 2002-07-09 Microsoft Corporation Motion estimation and block matching pattern
US6320593B1 (en) * 1999-04-20 2001-11-20 Agilent Technologies, Inc. Method of fast bi-cubic interpolation of image information
US7206453B2 (en) 2001-05-03 2007-04-17 Microsoft Corporation Dynamic filtering for lossy compression
US6950469B2 (en) 2001-09-17 2005-09-27 Nokia Corporation Method for sub-pixel value interpolation
CN101448162B (zh) 2001-12-17 2013-01-02 微软公司 处理视频图像的方法
US7277587B2 (en) * 2002-04-26 2007-10-02 Sharp Laboratories Of America, Inc. System and method for lossless video coding

Also Published As

Publication number Publication date
EP1359763B1 (de) 2007-01-03
HK1060242A1 (en) 2004-07-30
CN1456992A (zh) 2003-11-19
ES2278087T3 (es) 2007-08-01
EP1359763A3 (de) 2004-08-11
CN1238798C (zh) 2006-01-25
JP2003333603A (ja) 2003-11-21
US7110459B2 (en) 2006-09-19
US20030194009A1 (en) 2003-10-16
EP1359763A2 (de) 2003-11-05
ATE350860T1 (de) 2007-01-15
JP4625240B2 (ja) 2011-02-02
DE60310800D1 (de) 2007-02-15
KR20030081115A (ko) 2003-10-17
KR100681972B1 (ko) 2007-02-15

Similar Documents

Publication Publication Date Title
DE60310800T2 (de) Approximierter Kubikfilter
DE60307354T2 (de) Chrominanz-Bewegungsvektorrundung
DE60302602T2 (de) Sub-Pixel-Interpolation in Bewegungsschätzung und Bewegungskompensation
DE60306011T2 (de) Rundungskontrolle für mehrstufige Interpolation
DE60309375T2 (de) Parametrisierung für verlauf-kompensation
DE3856536T2 (de) Kodierung von Daten, die wie eine multidimensionale Matrix dargestellt sind
DE69709912T2 (de) Vorrichtung zur Bildvorhersage und -decodierung
DE60308255T2 (de) 2D-Transformationen zur Bild- und Videokodierung
DE69425047T2 (de) Adaptives variables längenkodierungs- und -dekodierungsverfahren für bilddaten
DE19626615C2 (de) Verfahren und Apparat zur Kompression, das bzw. der reversible Wavelet-Transformationen und einen eingebetteten Kodestrom verwendet
DE69738494T2 (de) Videokodierungs- und Videodekodierungsvorrichtung
DE69623330T2 (de) Merkmalbasiertes videokompressionsverfahren
DE19626600C2 (de) Kodierer und Verfahren zum Kodieren
DE69116869T2 (de) Digitale bildkodierung mit einer zufallsabtastung der bilder
DE19702048C2 (de) Skalierbarer Videocodierer gemäß MPEG2-Standard
DE69224250T2 (de) Ableitung und Verwendung von Bewegungsvektoren in einem Differenzpulskodemodulationssystem
DE69226749T2 (de) System zur Kompression von sich bewegenden Videobildern mit mehrfachen Auflösungsmerkmalen
DE69712676T2 (de) Verfahren zur Videokodierung
DE19758761B4 (de) Verfahren zum Intrakodieren eines von einer Pixelmatrix gebildeten Bildes
DE602004002455T2 (de) Bewegungsvektorschätzung durch adaptive zeitliche Vorhersage
DE69838729T2 (de) Verfahren und vorrichtung zur verringerung des benötigten speicherplatzes zur speicherung von referenzbildern in einem videodekoder
DE69635369T2 (de) Videokodierungsvorrichtung
DE69516734T2 (de) Bildverarbeitungsverfahren und -gerät
DE69805228T2 (de) Videosignalkodierung mit adaptiver Quantisierung
DE69614675T2 (de) MPEG-2 Dekodierung mit reduziertem RAM Bedürfnis durch ADPCM Rekomprimierung vor der Speicherung von dekomprimierten MPEG-2 Daten, wahlweise nach einem Unterabtastungsalgorithmus

Legal Events

Date Code Title Description
8364 No opposition during term of opposition