Context-Adaptive Binary Arithmetic Coding
# Context-Adaptive Binary Arithmetic Coding

CABAC (Context-based Adaptive Binary Arithmetic Coding) beschreibt eine effektive Art der verlustfreien Komprimierung von Binärdateien. Der Referenz-Algorithmus für CABAC wurde von der ITU-T und der ISO/IEC im Zuge der Standardisierung des Videocodecs MPEG-4/Part10 (H.264/AVC) entwickelt.
Wie der Name andeutet, handelt es sich bei CABAC um eine auf Binärdaten spezialisierte arithmetische Kodierung, die ihre Kodiertabellen kontextabhängig ändern kann. Wie alle arithmetischen Kodierer ist auch CABAC ein Entropiekodierer. Im Vergleich zur bekannten Entropiekodierung nach Huffman schneidet CABAC wesentlich besser ab, ist aber auch um ein Vielfaches rechenintensiver.

## Funktionsweise

Das Codieren eines Datensymbols mit CABAC umfasst die folgenden Schritte:
* Binarisierung: CABAC verwendet Binary Arithmetic Coding, was bedeutet, dass nur binäre Entscheidungen (0 oder 1) codiert werden. Ein nicht-binäres Symbol wird „binarisiert“ oder vor der arithmetischen Kodierung in einen Binärcode umgewandelt. Dieser Prozess ähnelt dem Prozess der Umwandlung eines Datensymbols in einen Code variabler Länge, aber der Binärcode wird vor der Übertragung durch den arithmetischen Kodiererweiter codiert. Die Schritte 2, 3 und 4 werden für jedes Bit des binarisierten Symbols wiederholt.
* Auswahl des Kontextmodells: Ein Kontextmodell ist ein Wahrscheinlichkeitsmodell für eine oder mehrere Bits des binarisierten Symbols. Dieses Modell kann aus einer Auswahl verfügbarer Modelle in Abhängigkeit von der Statistik kürzlich codierter Datensymbole ausgewählt werden. Das Kontextmodell speichert die Wahrscheinlichkeit, dass jedes Bit 0 oder 1 ist.
* Arithmetische Kodierung: Ein arithmetischer Kodierer codiert jedes Bit gemäß dem ausgewählten Wahrscheinlichkeitsmodell. Es gibt nur zwei Unterbereiche für jedes Bit (entsprechend 0 und 1).
* Aktualisierung der Wahrscheinlichkeit: Das ausgewählte Kontextmodell wird basierend auf dem tatsächlichen codierten Wert aktualisiert.

## Die Buchstaben CABAC aufgeschlüsselt

Kontextbasierende adaptive (CABAC) Kodierung verweist auf die Möglichkeit des Kodierers, seine Kodiertabellen während des Kodiervorgangs dynamisch an das zu kodierende Material anpassen zu können.
Binäre (CABAC) Kodierung zeigt an, dass dieser Kodierer nur für binäre Daten funktioniert. Daten, die in einem anderen Format vorliegen, müssen zuerst in eine binäre Darstellung umgewandelt werden.
Arithmetische Kodierung (CABAC) ist eine äußerst effektive Art der Entropiekodierung.

## CABAC und H.264

In den Profilen "Main Profile" und "High Profile" des Videostandards MPEG-4/Part10 (H.264/AVC) wird CABAC eingesetzt und ist dort mit verantwortlich für die gute Bildqualität, die hohe Kompressionsrate und den hohen Rechenaufwand.
In den niedrigeren Profilen des Videostandards H.264 kommt das einfachere Kodierverfahren CAVLC (Context-Adaptive Variable Length Coding) zum Einsatz.