7. Kodowanie obrazu nieruchomego i sekwencji wideo

7.5. Kompresja sekwencji wideo

Obraz ruchomy (sekwencja wideo) składa się z szeregu ramek (obrazów nieruchomych), które można byłoby kodować np. z wykorzystaniem algorytmu JPEG. Taka metoda nosi nazwę MJPEG (Motion JPEG) i wykorzystywana przy montażu sekwencji wideo, gdy rozdziela się i łączy poszczególne ujęcia. Dużo głębszą kompresję uzyskuje się dzięki wykorzystaniu podobieństwa kolejnych ramek. Można wówczas zastosować predykcję, która w kodowaniu obrazu pozwala na znaczną redukcję przepływności binarnej z zachowaniem wymaganej jakości. Na tej zasadzie działają algorytmy MPEG (Moving Pictures Expert Group). 
Jako przykład weźmy popularny koder sekwencji wideo H.264 [17]. W koderze tym, podobnie jak w wielu innych, wyróżnia się ramki typu I (intra), P (predictive) i B (bi-predictive). Ramki typu I są kodowane z pominięciem informacji pochodzącej z poprzednich ramek. Ma to na celu zatrzymanie propagacji błędu, pochodzącego z przekłamań transmitowanych bitów. Pewien rodzaj predykcji jest tu jednak stosowany -  wykorzystuje się podobieństwo sąsiednich bloków o rozmiarach 16x16 lub 4x4 piksele. Do zakodowania ramki I potrzeba znacznie więcej bitów niż dla ramek wykorzystujących predykcję. 
Ramka typu P jest kodowana z wykorzystaniem systemu odwołań do ramek poprzednich (ramek referencyjnych lub ramek odniesienia). Schemat kodowania ramek typu P jest pokazany na rys. 51. 

Rysunek 51 Kodowanie ramek sekwencji wideo z wykorzystaniem predykcji

Predykcji podlegają bloki pikseli o rozmiarach od 4x4 do 16x16. W ramkach odniesienia poszukuje się bloków, które uległy przemieszczeniu skutkiem ruchu obiektów lub ruchu kamery. Koduje się wektory przesunięć kolejnych bloków. Odejmując wynik predykcji od oryginalnej ramki, otrzymujemy bloki ramki rezydualnej, zawierającej błąd predykcji. Bloki pikseli błędu predykcji są kodowane w dziedzinie transformaty DCT, podobnie jak to miało miejsce w algorytmie JPEG. Sam proces kwantyzacji polega na dzieleniu współczynników DCT przez pewną liczbę, zwaną krokiem kwantyzacji (Qstep) i zaokrągleniu wyniku do liczby całkowitej. 
Skwantowane współczynniki DCT są poddawane bezstratnej kompresji (cały proces kodowania jest jednak stratny, ze względu na błąd kwantyzacji). Koduje się niezerowe wartości współczynników, stosując algorytmy CAVLC i CABAC. Pierwszy jest rodzajem adaptacyjnego kodu Huffmana, a drugi koderem arytmetycznym [17]. 
Oprócz ramek I oraz P można (opcjonalnie) wprowadzić ramki typu B, które są obliczane jako wynik predykcji z wykorzystaniem poprzednich i następnych ramek. Wymagają one niewielkiej liczby bitów do ich zakodowania. 
W koderze H.264 można zadeklarować strukturę danych w postaci sekwencji ramek I,P i B, tzw. GOP (Group Of Pictures).  Jest dostępnych 8 GOP (w nawiasie podano liczbę ramek w grupie): IPPPP(5), IPPPPPP(7), IPPPPPPPPP(10), IPPPPPPPPPPP(12), IBPBP(5), IBBPBBP(7), IBBPBBPBBP(10), IBBPBBPBBPBB(12). 
Przepływność binarna zależy od rozmiarów obrazu, liczby ramek na sekundę, wymaganej jakości, oraz samej sekwencji wideo. W systemie VBR (variable bit rate) szybki ruch powoduje zwiększenie przepływności a sekwencje statyczne (typu „mówiąca głowa”) dają się zakodować bardzo oszczędnie.