# Prädiktive Kodierung

Die prädiktive Kodierung ist eine spezielle Form der Kodierung, die maßgeblich auf Vorhersagen und Mutmaßungen basiert.
Anhand der bereits gelesenen (bekannten) Daten wird versucht, eine Aussage über die kommenden Daten zu treffen. Wenn man beispielsweise weiß, dass sich ein Objekt im Bild bewegt, kann man versuchen vorherzusagen, wo es sich, beziehungsweise Teile von ihm, in den nächsten Bildern befinden. Die Differenz zwischen Vorhersage und wahrem Bild wird gespeichert. Außer Videokomprimierungsverfahren nutzen auch Verfahren für Audio- und Bildkomprimierung die prädiktive Kodierung.
Der Vorteil dabei ist, dass bei einer guten Vorhersage die Abweichung zu den echten Werten nur sehr klein (nahe bei Null) ist. Die abzuspeichernden Werte sind also sehr klein bzw. ähnlich und können leicht von einer anschließenden Kompression (z. B. Lauflängenkodierung oder Entropiekodierung) weiter reduziert werden.
Prädiktive Kodierung ist daher keine Datenreduktion (die Menge der Information bleibt gleich), sondern eine Transformation der Werte in eine Form, die für andere Kodierverfahren einen besseren Ausgangspunkt darstellt.
Sie hat jedoch den Nachteil des steigenden Dekodieraufwands, da man auch hier die Vorhersage treffen muss, um sie um die Abweichung zu korrigieren und somit den Ausgangswert zu errechnen. Ferner sind Kodierer und Dekodierer voneinander abhängig; es ist nicht möglich, die Vorhersageart im Kodierer zu ändern, ohne auch den Dekodierer anpassen zu müssen.
Aufgrund des relativen Bezugs zu vorangegangenen Werten benötigt die prädiktive Kodierung periodisch absolute Stützstellen, wenn ein Video für Streaming eingesetzt wird oder Spulen möglich sein soll. Die Stützstellen sind sogenannte I-Bilder, die komplett abgespeichert werden und auf deren Basis die nachfolgenden Bilder vorhergesagt werden können.

## Vorhersagearten bei Bildkompression

Sehr einfache Vorhersagealgorithmen für Bilder sagen für den aktuellen Pixel ein (gegebenenfalls gewichtetes) Mittel aus bereits bekannten Pixeln voraus. Da die meisten Rasterbildformate die Bilddaten zeilenweise von oben nach unten, pro Zeile von links nach rechts abspeichern, liegen die (im Dekoder) bekannten Pixel links und oberhalb des aktuellen Pixels. Das PNG-Dateiformat kennt vier verschiedene, sogenannte Vorfilter. Je nach Bildinhalt ergibt ein anderer Filter ein besseres (d. h. nach der Komprimierung kleineres) Ergebnis. Da die Filter für jede Bildzeile wechseln können, ergibt sich eine große Zahl an Filterkombinationsmöglichkeiten. Ein „Optimierer“ für PNG-Dateien kann diese alle durchprobieren, um so die kleinste Dateigröße zu ermitteln. Die meisten Programme, die PNG-Dateien schreiben können, benutzen jedoch einen festen Vorfilter für das gesamte Bild. Dieser ist entweder fix, abhängig von der Farbtiefe oder wird über eine einfache Heuristik aus dem Bildinhalt bestimmt.

## Vorhersagearten bei Videokompression

* kontextfreie Prädiktion (Bewegungsvorhersage)
Hier erfolgt die Prädiktion ausschließlich über Ermittlung von Helligkeitsveränderungen im Bild ohne semantische Information; es ist z. B. egal ob ein Auto oder ein Ball gefilmt wird, nur die Helligkeitsveränderung der Bewegungen ist wichtig.
* modellbasierte Prädiktion (Bewegungsvorhersage)
Basiert auf Vorwegnahme von dargestellten Bildinhalten. Ein gutes Beispiel ist Videotelefonie, bei der sich das Bild zumeist nur unwesentlich ändert, da der Hintergrund gleich bleibt und die telefonierende Person sich wenig bewegt.
* objekt- und regionenbasierte Prädiktion (Bewegungsvorhersage)
Die aufwändigste Prädiktionsart ist die Segmentierung/Objekterkennung und -verfolgung. Hier werden einzelne Objekte (semantisch) erkannt und die Bewegung über mehrere Bilder vorhergesagt (z. B. Ball rollt an Kamera vorbei).
* Kamerabewegung (Bewegungskompensation)
Oftmals ändert sich ein Bild größtenteils dadurch, dass die Kamera sich geradlinig bewegt (vorbeiziehende Straße aus Autoseitenfenster gefilmt), rotiert oder ein Zoom verwendet. In allen Fällen können sehr viele Bildinhalte wiederverwendet werden, in dem Bildinhalte beibehalten und nur über Bewegungsvektoren verschoben werden.