-
Technisches Gebiet
-
Die Erfindung bezieht sich allgemein auf Video-Codecs und im Speziellen auf gerichtete Transformationen, die während des Kodierens und des Dekodierens von Blöcken von Pixeln in Videoframes und Bildern verwendet werden.
-
Stand der Technik
-
Codecs
-
Ein digitaler Video-Codec komprimiert und dekomprimiert ein Video. Codecs finden sich in Einrichtungen zum Ausstrahlen, in der Fernsehtechnik, in PCs, in Videorecordern und Videoabspielgeräten, Satelliten und in mobilen und Online-Geräten. Codecs teilen jeden Frame des Videos in Blöcke von Pixeln auf und verarbeiten die Blöcke einer nach dem andere.
-
Während des Kodierens werden räumliche und zeitliche Redundanzen eliminiert, um die Datenrate zu reduzieren. Die Erfindung beschäftigt sich insbesondere mit den Transformationen, die während des Kodierens und des Dekodierens von Videos verwendet werden. Die gängigste Transformation ist eine diskrete Cosinus-Transformation (DCT), wie sie in den MPEG- und H.264/AVC-Standards spezifiziert ist. Die DCT konvertiert Pixelintensitäten aus dem räumlichen Bereich in Transformationskoeffizienten im Frequenzbereich. Die Koeffizienten werden dann quantisiert und entropie-kodiert, um einen komprimierten Bitstrom zu erzeugen. Der Bitstrom kann auf einem Medium (DVD) gespeichert werden oder unmittelbar an den Dekodierer kommuniziert werden. Während des Dekodierens werden die Schritte umgedreht. Nach einem Entropie-Dekodieren und einer inversen Quantisierung wird eine inverse Transformation angewendet, um das ursprüngliche Video wieder herzustellen.
-
Im Allgemeinen übersteigt die Anzahl von Dekodierern, beispielsweise Konsumgüter auf der ganzen Welt, bei Weitem die Anzahl der Kodierer. Demgemäß sind, um die Interoperabilität sicherzustellen, lediglich der Bitstrom und das Dekodierverfahren standardisiert. Das Kodierverfahren wird typischerweise in einem Standard überhaupt nicht spezifiziert.
-
Transformationen
-
Die DCT beinhaltet eine horizontale 1-D DCT, die auf jede Reihe von Pixeln in dem Block angewendet wird und eine vertikale 1-D DCT, die auf jede Spalte angewendet wird. Für Blöcke mit in erster Linie horizontalen oder vertikalen Eigenschaften ist die 2-D DCT effizient. Jedoch transformiert die 2-D DCT Blöcke, die Eigenschaften beinhalten, die nicht horizontal oder vertikal sind, beispielsweise gerichtete Eigenschaften, bei denen sich eine Richtung auf Orientierungen, die nicht horizontal und vertikal sind, beziehen, nicht effizient.
-
Im Allgemeinen existieren zwei Verfahren, die gerichtete Transformationen implementieren. Das erste Verfahren wendet die 2-D DCTs entlang vordefinierter Pfade innerhalb des Blockes an. Das zweite Verfahren wendet einen Richtungsfilter an, gefolgt von der 2-D DCT. Typischerweise teilt ein Fächerfilter die Blöcke in eine Menge von gerichteten Unterbändern auf. Transformationen werden danach auf jedes Unterband angewendet. Richtungstransformationen wie beispielsweise Contourlets werden auf diese Art und Weise implementiert. Contourlets transformieren Frames effizient, die gleichmäßige Regionen, die durch gekrümmte Grenzen getrennt werden, beinhalten.
-
Richtungstransformationen sind verwendet worden, um die existierenden 2-D DCT oder DCT-ähnliche Transformationen für existierende Videokodierverfahren, wie beispielsweise H.264/AVC zu ergänzen. Während des Kodierprozesses wählt der H.264/AVC Kodierer aus einer Menge von Transformationen, wie beispielsweise der konventionellen 2-D Transformationen und einer Menge von Richtungstransformationen aus. Die einzelne Transformation, die im Sinne der Rate/Störung die besten Eigenschaften aufweist, wird dann zum Kodieren und zum Dekodieren ausgewählt.
-
Nach der Transformation können Verbesserungen in dem Entropie-Kodieren der entsprechenden Daten gemacht werden, indem Statistiken der gerichteten Daten wirksam eingesetzt werden. In H.264/AVC wird ein kontext-adaptiver binärer arithmetischer Kodierer (CABAC von Englisch context adaptive binary arithmetic coder) oder ein kontext-adaptiver variabler Längenkodierer (CAVLC von Englisch context adaptive variable length coder) verwendet, um unterschiedliche Typen von Daten einer Entropie-Kodierung zu unterwerfen. Die eingegebenen Symbole werden auf binäre Codewörter abgebildet und durch einen arithmetischen Kodierer komprimiert. Kontexte werden verwendet, um die Statistiken, die durch den arithmetischen Kodierer verwendet werden, anzupassen. Jeder Kontext speichert das wahrscheinlichste Symbol (entweder 0 oder 1) und die entsprechende Wahrscheinlichkeit.
-
Der H.264/AVC-Standard ist zum Verwenden der 2-D DCT ausgebildet. Bestehende Verfahren können gerichtete Transformationen verwenden, um die Eigenschaften der H.264/AVC-Kodierer auszudehnen. Jedoch erzeugen diese und kodieren diese Verfahren nach wie vor die richtungsbezogenen Entscheidungen und Daten unter Verwendung des konventionellen H.264/AVC-Rahmens. Somit besteht eine Notwendigkeit, gerichtete Informationen effizient zu repräsentieren, ebenso wie eine Notwendigkeit, Kodiereffizienzen zu verbessern.
-
Der Zweck der Transformation ist es einen Block variierender Pixelwerte in einen Block von Koeffizienten, bei dem die meisten der Koeffizienten Null sind, umzuwandeln. Im Falle der DCT wird eine Array-Menge von Pixeln in eine Menge von DCT-Koeffizienten, die niedrigfrequente bis hochfrequente Daten in dem Block repräsentieren, umgewandelt. Die tiefste Frequenz ist der DC-Koeffizient, der sich auf den Durchschnittswert aller Pixel, die durch die Transformationen umgewandelt wurden, bezieht. Der nächste Koeffizient repräsentiert die Größe der Cosinus-Welle der tiefsten Frequenz, die in dem Signal enthalten ist. Nachfolgende Koeffizienten entsprechen größer werdenden Frequenzen. Wenn die Daten für die DCT gut geeignet sind, dann sind viele der Frequenzkoeffizienten Null und werden vom Dekodierer nicht benötigt, um das Video zu rekonstruieren.
-
Ein Problem mit existierenden gerichteten Transformationen, die eine Menge von parallelen 1-D Transformationen verwenden, ist, dass die Länge jeder 1-D Transformation in Abhängigkeit von der Position der Transformation in dem Block variieren kann. Beispielsweise hat, um einen 8×8 Block unter Verwendung einer auf 45° orientierten gerichteten Transformation zu transformieren, die 1-D Transformation entlang der Hauptdiagonalen des Blockes acht Elemente und die anliegende 1-D hat sieben Elemente usw. bis zu Transformationen von einem oder zwei Elementen, die ineffizient sind. Eine einelementige Transformation ist bestenfalls ein Skalieren eines Pixelwertes, was wenig zum Verbessern der Kodiereffizienz beiträgt. Demgemäß existiert eine Notwendigkeit für ein Verfahren zum Transformieren von Blöcken unter Verwendung dieser Transformationen auf eine Art und Weise, die nicht unter den Ineffizienzen, die durch kleine Transformationspfade an den Tag gelegt werden, leiden, aber immer noch die gerichteten Eigenschaften der Originaltransformation aufrechterhalten.
-
Darüber hinaus besteht auch eine Notwendigkeit nach einem Verfahren um eine zweite Menge von Transformationen auf die Ausgabe der ersten Menge von Transformationen in einer Art und Weise anzuwenden, die die Kodiereffizienz weiter verbessert, ohne die Eigenschaften auf die Art und Weise, wie es eine 2-D DCT tun würde, zu verschlechtern, wenn die Daten in der zweiten orthogonalen Richtung unkorreliert sind.
-
Darüber hinaus existiert eine Notwendigkeit für partitionierte Versionen dieser Transformation, die zur Kodiervorhersage übrigbleibender Blöcke, die üblicherweise in Vorhersagekodierern, wie beispielsweise H.264/AVC gefunden werden, geeignet sind.
-
Zusammenfassung der Erfindung
-
Ein Bitstrom beinhaltet eine Folge von Frames. Jeder Frame wird in kodierte Blöcke aufgeteilt. Für jeden Block wird eine Menge von Pfaden an einem Transformationswinkel, der aus einem Transformationsindex in dem Bitstrom bestimmt wurde, bestimmt. Transformationskoeffizienten werden aus dem Bitstrom erhalten. Die Transformationskoeffizienten beinhalten einen DC-Koeffizienten für jeden Pfad. Eine inverse Transformation wird auf die Transformationskoeffizienten angewendet, um ein dekodiertes Video zu erzeugen.
-
Kurze Beschreibung der Figuren
-
1A ist ein Blockdiagramm eines Videosystems gemäß Ausführungsformen der Erfindung;
-
1B ist ein Blockdiagramm eines Dekodierers gemäß Ausführungsformen der Erfindung;
-
1C ist ein Blockdiagramm eines Kodierers gemäß Ausführungsformen der Erfindung;
-
2 ist ein Blockdiagramm eines Unterblock- und Partition-Richtungsverarbeitungsmoduls gemäß Ausführungsformen der Erfindung;
-
3 ist ein Blockdiagramm eines Transformationstyp- und Richtungsentscheidungsmoduls gemäß Ausführungsformen der Erfindung;
-
4 ist ein Blockdiagramm des Richtungsinterferenzmoduls gemäß Ausführungsformen der Erfindung;
-
5 ist ein Blockdiagramm eines Richtungsvorhersagemoduls gemäß Ausführungsformen der Erfindung;
-
6 ist ein Blockdiagramm eines Richtungsindex-Kodiermoduls gemäß Ausführungsformen der Erfindung;
-
7 ist ein Schema einer ersten Ausführungsform des Richtungsindex-Kodiermoduls gemäß Ausführungsformen der Erfindung;
-
8 ist ein Schema einer zweiten Ausführungsform des Richtungsindex-Kodiermoduls gemäß Ausführungsformen der Erfindung;
-
9–10 sind Flussdiagramme für ein Kontexterzeugungsmodul gemäß Ausführungsformen der Erfindung;
-
11A–11B sind Schemata von Pfaden für primäre und für sekundäre gerichtete Transformationen gemäß Ausführungsformen der Erfindung;
-
12A–12F sind Blockdiagramme für primäre gerichtete Transformationen für 8×8 Blöcke von Pixeln gemäß Ausführungsformen der Erfindung; und
-
13 ist ein Blockdiagramm einer Menge von partitionierten gerichteten Transformationen gemäß Ausführungsformen der Erfindung.
-
Beschreibung von Ausführungsformen
-
Codec
-
1A zeigt ein Videosystem gemäß Ausführungsformen unserer Erfindung. Das System beinhaltet einen Kodierer 10 und einen Dekodierer 20, in Kombination ein Codec 30. Der Codec kann in Prozessoren, die Speicher und Eingangs/Ausgangs-Interfaces beinhalten, wie sie aus dem Stand der Technik bekannt sind, implementiert werden.
-
Der Kodierer komprimiert ein eingegebenes Video 1 in einen Bitstrom 15. Der Kodierer wendet eine Transformation, eine Quantisierung und eine Entropie-Kodierung auf das eingegebene Video an, wie nachfolgend im Detail beschrieben wird. Um sicherzustellen, dass das ausgegebene Video das eingegebene Video akkurat wiedergibt, führt der Dekodierer 20 die umgekehrten Schritte in einer umgekehrten Reihenfolge durch. Darüber hinaus beinhaltet der Kodierer typischerweise das Äquivalent des Dekodierers, um für den Kodierprozess eine Rückmeldung zur Verfügung zu stellen. Da alle Kodiervariablen ohne weiteres im Kodierer zur Verfügung stehen, ist der Dekodierer in dem Kodierer vergleichsweise einfach. Die Erfindung beschäftigt sich insbesondere mit den inversen gerichteten Transformationen 25.
-
Wie nachfolgend beschrieben und in 11B gezeigt, können die Transformationen primäre und sekundäre Transformationen beinhalten. Während des Kodierens wirkt die primäre Transformation auf Pixelintensitäten ein, um Transformationskoeffizienten, beispielsweise DC und AC Koeffizienten, zu bestimmen. Die sekundäre Transformation wirkt lediglich auf die DC Koeffizienten 1160 ein, um sekundäre Transformationskoeffizienten 1170 zu erzeugen, um Datenredundanzen weiter zu reduzieren. Die umgekehrten bzw. inversen Transformationen beinhalten eine sekundäre inverse Transformation 26, um die DC Koeffizienten zu rekonstruieren, und die primären inversen Transformationen 27 stellen die Pixelintensitäten für das dekodierte Video wieder her.
-
Um eine Interoperabilität zwischen dem Kodierer und dem Dekodierer sicherzustellen, spezifizieren Videokodierstandards typischerweise lediglich den Bitstrom und das Dekodierverfahren. Es ist jedoch klar, dass eine Beschreibung des Kodierverfahrens, wie nachfolgend detailliert beschrieben, ausreicht, um das inverse Dekodierverfahren durch einen Fachmann exakt abzuleiten.
-
Dekodierer
-
1B zeigt relevante Abschnitte unseres Dekodierers 20. Der Dekodierer empfängt den Kodier-Bitstrom 15 und Informationen 160. Der Bitstrom wird einem CABAC Entropie-Dekodierer 191 zur Verfügung gestellt, der quantisierte Transformationskoeffizienten 192 gemäß der Informationen erzeugt. Für den ersten Block können die Informationen einen ursprünglichen Kontext darstellen. Danach beziehen sich die Informationen auf vorhergehend verarbeitete (dekodierte) Blöcke.
-
Die Koeffizienten werden invers quantisiert 24 und invers transformiert 25, so dass die dekodierten Blöcke das ausgegebene oder dekodierte Video 2 ausbilden. Die Transformation kann eine inverse diskrete Cosinus-Transformation (IDCT) sein. Die Transformationen können eine 2D inverse diskrete Cosinus-Transformation beinhalten und eine Menge von inversen gerichteten Transformationen. Sekundäre inverse Transformationen können ebenfalls angewendet werden, wie es nachfolgend noch detaillierter beschrieben wird.
-
Die Informationen 160 werden dem Kontexterzeugungsmodul (CGM von Englisch context generation module) des Dekodierers zur Verfügung gestellt, das ausgewählte Kontexte 921–922 an den CABAC Dekodierer weitergibt. Vorhergesagte Transformationsindikatoren (PTI von Englisch predicted transform indicators) 501 der vorher dekodierten Blöcke 160 werden an ein gerichtetes Indexdekodiermodul (DIDM von Englisch directional index decoding module) 601 übergeben, das einen Transformationsindikator 602 für die inverse Transformation 25 erzeugt. Die inverse Transformation kann jede der inversen Transformationen verwenden, beispielsweise 1D horizontale und 1D vertikale inverse DCTs (2D IDCT) 41, eine Menge von inversen gerichteten Transformationen 42 und jegliche andere bekannte inverse Transformationen 43.
-
Es ist festzustellen, dass gegenwärtige Videokodierstandards lediglich eine einzelne, vorher spezifizierte Transformation verwenden, so dass ein Index für unterschiedliche Transformationen nicht benötigt wird. Ebenso berücksichtigen gegenwärtige Standards keine Seiteninformationen, die sich auf vorher dekodierte Blöcke während der inversen Transformation beziehen.
-
Kodierer
-
1C zeigt die relevanten Details des Kodierers 10. Der Kodierer verwendet gerichtete Transformationen gemäß der Ausführungsformen der Erfindung. Die Schritte des gezeigten Verfahrens können in einem Prozessor eines Kodierers durchgeführt werden. Der Prozessor beinhaltet Speicher und Eingangs/Ausgangs-Interfaces, wie es aus dem Stand der Technik bekannt ist.
-
In den Kodierer wird ein Block 101 eines Frames eines zu kodierenden Videos eingegeben. Wie hierin definiert, enthalten Blöcke Makroblöcke, Unterblöcke und Blockpartitionen, im Allgemeinen ein Array von Pixeln. In den meisten Kodieranwendungen werden die Operationen vorzugweise mit Makroblöcken und Unterblöcken durchgeführt. Der Block kann ursprüngliche Videodaten beinhalten, Restwerte von einer räumlichen oder bewegungskompensierten Vorhersage von Videodaten oder andere texturbezogene Daten, die zu transformieren sind. Der Block kann durch ein Unterblockpartitionsrichtungsverarbeitungsmodul (SPDPM von Englisch sub-block partition directional processing module) 200 in Unterblöcke aufgeteilt sein. Darin werden die Unterblöcke einer nach dem anderen als ”Blöcke” verarbeitet.
-
Jeder Block wird unter Verwendung von Transformationen, die aus einer konventionellen zweidimensionalen diskreten Cosinus-Transformation (2D DCT) 120, einer Menge von gerichteten Transformationen 130 oder anderen Transformationen, generell Transformationen 125, ausgewählt worden sind, transformiert. Die Ausgabe der Transformation wird durch ein Transformationstyp- und Richtungsentscheidungsmodul (TTDDM von Englisch transform type and direction decision module) 300 gemessen. Das TTDDM verwendet eine Metrik, wie beispielsweise Raten/Störungs-Kosten, um zu bestimmen, welche der Transformationen die besten Eigenschaften aufweist. Die Raten/Störungs-Kosten sind eine Summe einer Kodierrate und eines Skalars multipliziert mit der Störung. Der Transformationstyp und die Richtung, die minimale Kosten haben, werden für das Transformieren ausgewählt. Die Eigenschaften können ein Maß für die Kodiereffizienz sein, sind jedoch nicht darauf beschränkt. Die Idee ist, dass diejenige Transformation, die die besten Eigenschaften hat, für das Kodieren ausgewählt wird, und die ausgewählte Transformation wird dem Dekodierer in einem Index 16 in dem Bitstrom mitgeteilt.
-
Das TTDDM kann auch eine Eingabe von einem Richtungsableitungsmodul (DIM von Englisch direction inference module) 400 empfangen. Die Eingabe an das DIM ist eine Sammlung von Daten 160, die die Transformationen und die Richtungen anzeigen, die für benachbarte vorher verarbeitete Blöcke verwendet werden. Die Ausgabe des DIM ist ein Wert oder eine Menge von Werten, entsprechend der Daten 160, wie beispielsweise bevorzugte Richtungen 431. Das TTDDM verwendet diese Information um die Entscheidung zu treffen, welche Transformationen und Richtungen zum Kodieren des Blocks 101 verwendet werden. Das TTDDM kann auch einen finalen Partitionierungsindikator (FPI von Englisch final partitioning indicator) 141 an das SPDPM als Richtlinie für das Partitionieren weiterleiten. Das TTDDM Modul erzeugt den transformierten Block 102 und einen ausgewählten Transformationsindikator (STI von Englisch selected transform indicator) 145, der die ausgewählte Transformation und die ausgewählte Richtung repräsentiert.
-
Dann kann der transformierte Block 102 passend kodiert 150 werden, unter Verwendung einer Entropie-Kodierung, um einen kodierten Ausgangsblock 17 zu erzeugen.
-
Das Richtungsvorhersagemodul (DPM von Englisch direction prediction module) 500 empfängt auch Informationen von dem DIM und Informationen, die sich auf vorher verarbeitete Blöcke 160 beziehen. Das DPM verwendet diese Informationen, um einen vorhergesagten Transformationsindikator (PTI von Englisch predicted transform indicator) 501 zu erzeugen. Der PTI wird in ein Richtungsindexkodiermodul (DIEM von Englisch directional index encoding module) 600 zusammen mit dem STI 145 eingegeben. Das DIEM konvertiert die Repräsentation in ein binäres Codewort 603 zum Kodieren durch einen kontext-adaptiven binären arithmetischen Kodierer (CABAC von Englisch context-adaptive binary arithmetic coder) 190.
-
Die durch den CABAC verwendeten Kontexte werden durch ein Kontexterzeugungsmodul (CGM von Englisch context generation module) 900 bestimmt. Die Eingabe an das CGM sind Informationen über die Transformationen und Richtungen, die durch benachbarte vorher kodierte Blöcke verwendet wurden, von dem DIM oder bereits kodierte Informationen von dem gegenwärtigen Block. Das CGM erzeugt Kontexte für den CABAC zum Kodieren des binären Richtungsindexes. Der CABAC gibt einen kodierten Transformationsindex 16 aus.
-
Unterblock- und Partitionsrichtungsverarbeitungsmodul
-
2 zeigt Details des SPDPM 200. Die Pixel in dem eingegebenen Block 101 können videobezogene Informationen repräsentieren, wie beispielsweise Videoframedaten, bewegungskompensierte Vorhersagerestwerte und räumliche Vorhersagerestwerte. Das SPDPM teilt den Block in Partitionen 210, im Allgemeinen Arrays von Pixeln, auf. Die konventionellen oder gerichteten Transformationen 125 werden auf die Partitionen angewendet. Der finale Partitionsindikator 141, der durch das TTDDM erzeugt wird, zeigt an, welche Partitionen für die besten Eigenschaften zu verwenden sind.
-
Transformationstyp und Richtungsentscheidungsmodul
-
3 zeigt das TTDDM 300 zum Auswählen der besten Transformation und der besten Richtung zum Verwenden für die Transformation des Blockes 210. Ein Transformationswähler 310 wählt, welche unter den verfügbaren Transformationstypen an das Messmodul 320 zu senden sind, das eine Metrik 321 bestimmt, wie beispielsweise die Raten/Störungs-(RD)-Kosten, die zur Auswahl der Transformation verwendet wird.
-
Der Transformationswähler kann durch das DIM 400 beeinflusst werden. Beispielsweise kann das DIM benachbarte Blöcke untersuchen, um zu bestimmen, welche Richtungen eine höhere Wahrscheinlichkeit aufweisen, für den gegenwärtigen Block gut zu funktionieren. Das Messen kann dann auf eine Untermenge von verfügbaren Richtungen beschränkt werden, was die Verarbeitungszeit reduziert. Nachdem diese Messungen verwendet werden, um die beste Richtung oder Transformation zu bestimmen, werden der ausgewählt Transformationsindikator 145 und der entsprechende transformierte Block 102 ausgegeben. Wenn das TTDDM auf einer Auswahl von Partitionen arbeitet, dann wird der finale Partitionsindikator 141, der die besten Eigenschaften ergibt ebenfalls an das SPDPM ausgegeben.
-
Richtungsinterferenzmodul
-
4 zeigt das DIM 400. Das Blockauswahlmodul verwendet die vorher bearbeiteten Blöcke und Seiteninformationen 160, um mögliche Transformationsrichtungen 411 für den gegenwärtigen Block zu bestimmen. Die möglichen Transformationsrichtungen werden zum Bestimmen einer Menge von bevorzugten Richtungen 431 verwendet. Dies wird nachfolgend durch das DPM verwendet, um die Anzahl von Bits, die notwendig sind, um diese Information zu repräsentieren, zu reduzieren, was in einer verbesserten Effizienz in dem Kodierer und dem Dekodierer resultiert.
-
Ein Blockauswahlmodul (BSM von Englisch block selection module) 410 wählt aus den Blöcken 160, basierend auf Kriterien, wie beispielsweise einem Abstand der ausgewählten Blöcke zum gegenwärtigen Block, aus. Das Zuverlässigkeitsentscheidungsmodul (RDM von Englisch reliability decision module) 420 schätzt die Zuverlässigkeit der ausgewählten Blöcke ab. Das RDM Modul kann Texturinformationen verwenden, die Position und andere Blockdaten 412. Ein Zuverlässigkeitsfaktor 421 für jeden der ausgewählten Blöcke und die entsprechende Transformationsrichtung 411 werden in das Bestimmungsmodul für die bevorzugte Richtung (PDDM von Englisch preferential direction determination module) eingegeben, wo die bevorzugten Richtungen 431 identifiziert werden.
-
Richtungsvorhersagemodul
-
5 zeigt das DPM 500 zum Bestimmen des vorhergesagten Transformationsindikators 501 für das DIEM 600 und das CGM. Ein erster Stufenvorhersager 510 wählt Kandidaten 515 aus den bevorzugten Richtungen 431 aus. Ein zweiter Stufenvorhersager 420 verwendet diese Kandidaten und die kodierten Seiteninformationen 160, um den bevorzugten Transformationsindikator 501 auszuwählen.
-
Zum Kodieren von transformierten Texturrestdaten kann der ausgewählt Transformationsrichtungsindikator 145 mit einem Texturvorhersager korreliert werden, wie beispielsweise einem Intra-Vorhersagemodus der in H.264/AVC verwendet wird. Demgemäß können die in das DPM eingegebenen Seiteninformationen beispielsweise den Intra-Vorhersagemodus zum Auswählen des Indikators 501 beinhalten.
-
Richtungsindexkodiermodul
-
6 zeigt das DIEM 600. Eine Eingabe beinhaltet den ausgewählten Transformationsindikator 145 und den vorhergesagten Transformationsindikator 501, die auf eine sinnvolle Repräsentation der Richtungen abgebildet 605–606 werden. Unterschiedliche Abbildungen 605–606 können für den ausgewählten und den vorhergesagten Transformationsindikator verwendet werden. Ein Unterschied zwischen den zwei Richtungen wird als eine Transformationsindikatordifferenz 612 bestimmt 610. Da die Vorhersage eine vernünftige Approximation der ausgewählten Transformationsrichtung ist, sollten geringe Winkelunterschiede in ähnlichen Codewörtern resultieren, die effektiv kodiert werden können. Die Differenz wird in das Codewort 603 binarisiert, das durch den CABAC 190 als der kodierte Transformationsindex 16 entropie-kodiert wird. Selbstverständlich kann jeder kontext-adaptive Entropie-Kodierer verwendet werden, ebenso wie eine variable Längenkodierung (VLC von Englisch variable length coding). Die Differenzberechnung kann wie nachfolgend beschrieben umgangen werden 611.
-
7 zeigt schematisch eine erste Ausführungsform des DIEM 600. Beispielsweise gibt es acht mögliche Transformationsrichtungen 701 und entsprechende Vorhersagen 702. Die Transformationsrichtung wird durch den ausgewählten Transformationsindikator 145 ausgewählt und die Vorhersage wird durch den PTI 501 ausgewählt. Die Transformationsindikatoren werden auf einen Graucode abgebildet, in welchem benachbarte Richtungen sich lediglich um 1 Bit unterscheiden. Die Codewörter für die ausgewählte und für die vorhergesagte Richtung werden Bit für Bit mit einer exklusiven oder (XOR) Operation 610 verglichen, um die Differenz 611 zu erhalten. Für einen präzisen Vorhersager resultiert dies in einem Bitstrom mit meistens Nullen für eine niedrige Entropie. Da die Indikatorabbildungen 605–606 binäre Repräsentationen verwenden, wird die Binarisierung 620 nicht verwendet.
-
8 zeigt eine zweite Ausführungsform des DIEM. In dieser Ausführungsform werden die Richtungen durch eine uniforme kontinuierliche Folge von Zahlen repräsentiert. Die Differenz 610 ist Δ = (IS – IP + N)modN wobei IS und IP abgebildete Indices des ausgewählten bzw. des vorhergesagten Richtungsindikators sind und N die Anzahl von möglichen Richtungen ist, beispielsweise acht. Da geringe Differenzen wahrscheinlicher sind, kodiert die Binarisierung 620 Differenzen nahe an Null (0, 1, N – 1, 2, N – 2, ...) mit weniger Bits. Die Differenzberechnung kann umgangen werden 611 und der abgebildete Transformationsindikator wird unmittelbar an das Binarisierungsmodul 620 übergeben. In diesem Fall verwendet das Kontexterzeugungsmodul 900 den vorhergesagten Transformationsindikator, um einen geeigneten Kontext auszuwählen.
-
Kontexterzeugungsmodul
-
9–10 zeigen Ausführungsformen des CGM 900. Das CGM wählt Kontexte 921–922 für den CABAC 190 aus. Mehr als zwei Kontexte können auch ausgewählt werden. Um die Kontexte zu bestimmen, kann das CGM die bevorzugte verarbeitete Blockinformation 160, die PTI 501 und die bevorzugten Richtungen 431 verwenden. Die Kontexte A und B unterscheiden genau vorhergesagte Richtungen und ungenaue Vorhersagen. 9 zeigt, wie die bevorzugten Richtungen 431 verwendet werden, um die Kontexte zu bestimmen. Eine maximale Differenz φwird bestimmt 910 und mit einer vorherbestimmten Schwelle T verglichen 920. Wenn die Differenz kleiner als die Schwelle ist, dann ist die Vorhersage genau im Kontext A 921, andernfalls ist der Kontext B 922 ungenau. Wenn beispielsweise das DIEM verwendet wird, dann sind die dem CABAC übergebenen Bits meistens Nullen und Kontext A wird ausgewählt, um auf diese Wahrscheinlichkeit zu passen. Die Kontextauswahl des CGM 900 kann auch andere Faktoren berücksichtigen, wie beispielsweise eine Bit-Position, um zwischen mehr als zwei Kontexten zu entscheiden.
-
Die Ausführungsform, die in 10 gezeigt ist, nimmt an, dass das DIEM die Differenzberechnung 610 umgeht 611. Der vorhergesagte Transformationsindikator 501 und ein Positionsindex i 1001, der repräsentiert, welches Bit aus dem Index 603 zu kodieren ist, sind Eingaben. Der PTI 501 wird auf ein binäres Codewort mitderselben Indikatorabbildung 605, die in dem DIEM verwendet wird, abgebildet, 1010. Da beide Codewörter dieselben sein sollten, sollte das wahrscheinlichste Bit des CABAC dasselbe sein, wie das gegenwärtige Bit CWf[i] von 1030. Demgemäß wird, wenn der Vergleich 1030 anzeigt, dass das gegenwärtige Bit 1 ist, der Kontext A 921, der 1 bevorzugt, ausgewählt, andernfalls wird der Kontext B 922, bei dem 0 das bevorzugte Bit ist, ausgewählt.
-
Primäre und sekundäre gerichtete Transformationen
-
11A zeigt die gerichtete Transformation gemäß Ausführungsformen von unserer Erfindung. Selbstverständlich ist während des Dekodierens die Transformation eine inverse Transformation. Die Transformation (oder ihre Inverse) arbeitet mit einem M×N Block 1100 von Pixeln. Zum Zwecke der Transformation können die mit den Pixeln assoziierten Werte 1101 Intensitäten oder Transformationskoeffizienten sein, abhängig von der Stufe des Kodierens oder des Dekodierens.
-
Die Transformation beinhaltet eine Menge von 1-D Transformationen {T0, T1, ..., TN-1} 1102, wobei N die Gesamtzahl von 1-D Transformationen, die auf den Block angewendet werden, ist. Die Länge Ii von Transformationen Ti zeigt die Anzahl von Pixeln, auf denen die 1-D Transformation arbeitet, an. Demgemäß haben die Transformationen {T0, T1, ..., TN-1} in der Menge entsprechende Längen {I0, I1, ..., IN-1}.
-
Jede Transformation wird auf Pixel entlang eines Pfades 1102 in dem Block angewendet. Ein Pfad beinhaltet typischerweise eine Menge von zusammenhängenden oder benachbarten Pixeln. Jedoch können auch nicht zusammenhängende Pixel in dem Pfad mit eingeschlossen sein.
-
Wie in 11B gezeigt ist, wenn die Werte der Pixel auf dem Pfad Koeffizienten sind, dann der erste Koeffizient für jeden Pfad der DC Koeffizient, gefolgt von den AC Koeffizienten. Alle der ersten Koeffizienten 1150 werden in einer Menge von sekundären Transformationskoeffizienten (STC) 1170 gesammelt. Der erste sekundäre Koeffizient in der Menge ist ein sekundärer DC (SDC) Koeffizient.
-
Während des Dekodierens kann die sekundäre gerichtete Transformation 26 auf die Menge von sekundären Transformationskoeffizienten angewendet werden, um den DC Koeffizienten jedes Pfades zu rekonstruieren. Während des Kodierens wird der erste oder der DC Koeffizient von jedem Pfad verworfen, nachdem die Menge von sekundären Transformationskoeffizienten 1170 ausgebildet ist.
-
Jeder Pfad ist, in Bezug auf die vertikale Richtung 1103, unter einem Transformationswinkel θ 1105 orientiert, der durch den Richtungstransformationsindex bestimmt wird. Wie oben beschrieben ist der Transformationsindex, der während des Kodierens bestimmt wird, ein Teil des zu dekodierenden Bitstroms.
-
Die Pfade für einen bestimmten Block und eine bestimmte Transformation sind im Allgemeinen in dieselbe Richtung orientiert. Die Pfade werden wie folgt erzeugt.
-
Ein minimaler Pfad der Transformationslänge Lmin 1110 wird für den Block spezifiziert. Der Transformationspfad beginnt typischerweise bei einem Startpixel 1120, das an einer Kante (oder Ecke) des Blocks 1100 lokalisiert ist. Wie vorstehend beschrieben ist, ist, wenn die Werte für die Pixel Koeffizienten sind, der Wert für das Startpixel der DC Koeffizient.
-
Der Pfad setzt sich entlang des Winkels θ fort, bis ein Endpixel 1121 an einer anderen Kante erreicht ist. Die Pfadlänge, in Pixeln, ist m. Wenn das Startpixel an einer Kante oder Ecke ist, dann ist die Länge m = 1.
-
Wenn m ≥ Lmin ist, dann wird der Pfad als komplett angesehen. Wenn der Block immer noch irgendwelche Pixel nicht auf einem Pfad beinhaltet, dann wird ein neuer Pfad gestartet. Der neue Pfad kann an jedem untransformierten Pixel in dem Block starten. Typischerweise beginnt der nächste Pfad bei einem Pixel, das benachbart zu oder nahe dem Beginn des vorhergehenden Pfades ist, oder der Pfad kann an einer gegenüberliegenden Ecke des Blockes starten, so dass die Verteilung der Pfadlängen innerhalb des Blockes im Wesentlichen symmetrisch ist. Das Verfahren fährt mit Schritt 2 fort, bis alle Pixel transformiert sind.
-
Wenn m < Lmin ist, dann ist der Pfad zu kurz und das Verfahren fährt fort, indem es ein Pixel benachbart zu einem vorher verarbeiteten Pixel inkludiert. Wenn es mehr als ein benachbartes Pixel gibt, dann werden andere Pfade in dem Block verwendet, um den gegenwärtigen Pfad zu bestimmen. Wenn ein unverarbeitetes Pixel vorhanden ist, wird das Pixel zu einem Teil des Pfades gemacht, und die Pfadlänge m wird erhöht und das Verfahren fährt mit Schritt 2 in der Richtung (180 – θ) fort, bis die Kante des Blockes erreicht ist. Demgemäß wird die Richtung θ auf (180 – θ) gesetzt, tatsächlich eine Kehrtwende, bevor mit Schritt 2 weitergemacht wird.
-
12A–C zeigen gerichtete Transformationen für Lmin = 3 und Winkel von 45, 30 bzw. 90 Grad. 12D–F zeigen gerichtete Transformationen für Lmin = 5. Alternative Ausführungsformen sind möglich, wenn Pfade innerhalb des Blockes statt an einer Kante enden.
-
Die inverse Transformation 26 arbeitet entlang derselben Pfade, wie oben beschrieben, abgesehen davon, dass inverse Transformationskoeffizienten verwendet werden. Beispielsweise würde, wenn eine 1-D DCT für jeden Pfad verwendet wird, dann die inverse Transformation die 1-D inverse DCT (IDCT) verwenden.
-
Sekundäre gerichtete Transformation
-
11B zeigt die sekundäre gerichtete Transformation 26. Nachdem die primäre gerichtete Transformation angewendet worden ist, kann die sekundäre Transformation adaptiv auf jeden Block entlang eines Pfades beinhaltend die ursprünglichen Koeffizienten von jedem Pfad der ursprünglichen Transformation angewendet werden. Diese Koeffizienten entsprechen typischerweise den DC Koeffizienten einer 1-D Transformation, wie beispielsweise der DCT.
-
Die inverse sekundäre Transformation arbeitet entlang desselben Pfades wie oben beschrieben, abgesehen davon, dass inverse sekundäre Transformationskoeffizienten verwendet werden. Die inverse sekundäre gerichtete Transformation wird durchgeführt, bevor die inverse gerichtete Transformation während des Dekodierens durchgeführt wird.
-
Die sekundäre Transformation reduziert darüber hinaus eine Redundanz in den DC Komponenten der gerichteten Transformationskoeffizienten. Alternativ kann die DC Komponente einer gerichteten Transformation verwendet werden, um die DC Komponente einer anderen gerichteten Transformation vorherzusagen.
-
Aufgeteilte gerichtete Transformationen
-
13 zeigt eine aufgeteilte gerichtete Transformation. Ein M×N (8×8) Block 1300 von Pixeln wird in zwei Blockpartitionen A und B ungefähr entlang einer Linie 1310 mit einem Partitionswinkel φin Bezug auf die Vertikale aufgeteilt. Der Partitionswinkel ist senkrecht zu dem Transformationswinkel θ 1105.
-
Dann werden gerichtete Transformationen unter Verwendung der oben beschriebenen Schritte erzeugt, mit der Einschränkung, dass Blockpartition A eine Menge von Pfaden, die am Winkel θA orientiert sind, aufweist, und dass Partition B eine Menge von Pfaden, die am Winkel θB orientiert sind, aufweist. Der primäre Winkel der gerichteten Transformation θ wird als derselbe angesehen, wie θA. Da ein Pfad innerhalb der Partition erzeugt wird, approximiert die Linie 1310 die Kante der Partition. Demgemäß ist jedes Pixel in der gerichteten Transformation entweder in Partition A oder B. Die Winkel θA und θB können unterschiedlich sein.
-
In einer Ausführungsform der Erfindung wird die sekundäre gerichtete Transformation auf beide Partitionen B angewendet. Um den Prozess umzukehren, wird die sekundäre inverse Transformation angewendet und dann werden die inversen gerichteten Transformationen unabhängig auf die Partitionen A und B angewendet. In einem anderen Ausführungsbeispiel der Erfindung wird die sekundäre Transformation unabhängig auf jede Partition angewendet.
-
D. h. entweder beide inverse sekundäre Transformationen können vor der inversen primären Transformation angewendet werden oder die inverse sekundäre Transformation und die inverse primäre Transformation können unabhängig auf die Partitionen angewendet werden. Diese Entscheidung wird adaptiv auf einer Pro-Block-Basis getroffen.
-
Skalierungs- und Quantisierungsreihenfolge
-
Nachdem die primäre und die sekundäre Transformation beendet wurden, werden die resultierenden Koeffizienten skaliert, geordnet und quantisiert.
-
Das Skalieren der Transformationskoeffizienten hängt von der Länge m des Pfades jeder 1-D gerichteten Transformation oder einem Ort des Koeffizienten in dem Block ab. Eine 1-D Transformation der Länge m hat einen Skalierungsfaktor Sm. Demgemäß werden alle Koeffizienten in dem Pfad der Länge m durch Sm skaliert. Typischerweise wird der Skalierungsfaktor so ausgewählt, dass die Größen der DC Koeffizienten dieselben sind, wenn identische Pixelwerte transformiert werden. Wenn eine Transformation mit einer Länge m = 4 vier Pixel, jeder mit Wert v, transformiert und eine Transformation mit einer Länge m = 5 fünf Pixel, jeder mit einem Wert v, transformiert, dann wird der Skalierungsfaktor Sm so ausgewählt, dass beide Transformationen die ersten (DC) Koeffizienten mit demselben Wert ausgeben.
-
Alternative Skalierungsverfahren sind auch möglich. Kürzeren Transformationen können kleinere oder größere Skalierungsfaktoren basierend auf der Länge m oder Richtung θ gegeben werden. Die Skalierung kann auch zu einem Teil der Transformation selbst gemacht werden, um die Implementierung dieses Prozesses zu vereinfachen.
-
Die skalierten Koeffizienten werden in einer Abtastreihenfolge angeordnet. In einer Ausführungsform wird die Menge von Koeffizienten {T0, T1, ..., TN-1} unabhängig und in Folge abgetastet. In jeder Transformation wird der erste DC Koeffizient zuerst abgetastet, gefolgt von den folgenden AC Koeffizienten in derselben Folge als dem Pfad für diese Transformation.
-
In einer anderen Ausführungsform werden alle die ersten DC Koeffizienten von jeder Transformation abgetastet, gefolgt von all den zweiten Koeffizienten von jeder Transformation usw. bis zur letzten Transformation. In der zweiten Ausführungsform kann die Folge, in der die Transformationen abgetastet werden, variieren. Beispielsweise können die Transformationen infolge ihres Indexes abgetastet werden, d. h., der erste Abtastung verwendet die DC Koeffizienten aus der Menge von Transformationen {T0, T1, ..., TN-1} in der Reihenfolge {0, 1, ..., N – 1}. Alternativ können die Transformationen infolge ihrer Länge {I0, I1, ..., IN-1} abgetastet werden. Die Koeffizienten können basierend auf ihrer relativen Position in dem Block abgetastet werden. Beispielsweise können alle die Koeffizienten entlang einer Kante des Blockes zuerst abgetastet werden, gefolgt von Koeffizienten, die von der Kante beabstandet sind.
-
Auch wenn die Erfindung durch Beispiele von bevorzugten Ausführungsformen beschrieben worden ist, ist es selbstverständlich, dass verschiedene andere Anpassungen und Modifikationen innerhalb des Gedankens und Umfangs der Erfindung durchgeführt werden können. Demgemäß ist es die Aufgabe der angehängten Ansprüche, alle diese Variationen und Modifikationen, die innerhalb des wahren Gedankens und Umfangs der Erfindung stattfinden, abzudecken.