La compensación de movimiento es una técnica utilizada en la codificación de vídeo, cuyo principal objetivo consiste en eliminar la redundancia temporal existente entre las imágenes que componen una secuencia, con el fin de aumentar la compresión.
El proceso se basa en un algoritmo que examina la sucesión de fotogramas consecutivos, generalmente muy similares entre sí, para analizar y estimar el movimiento entre los dos. Si el sistema detecta que una región de la imagen ya ha aparecido anteriormente, codifica la posición que ocupa en el fotograma actual en lugar de volver a codificar toda la región. De este modo, la predicción de la imagen actual vendrá dada por la compensación de movimiento basándose en las imágenes anteriores.
Hay varias técnicas para eliminar la redundancia temporal en una secuencia de imágenes, pero la mayoría actúan siguiendo el siguiente esquema:
Normalmente los bloques se agrupan en macrobloques para reducir el coste computacional: bloques más grandes significa que hay menos bloques a prever.
Realmente la predicción (compensación de movimiento) se realiza sobre los macrobloques: se calcula el vector de movimiento de cada elemento dentro del macrobloque. Así, para cada fotograma se guardan:
La compresión anterior se puede aplicar a los fotogramas de dos maneras:
Si sólo se codificaran las predicciones, no se podría tener un acceso aleatorio puesto que para acceder a una determinada imagen haría falta calcular las predicciones de todas las anteriores. Por otro lado un error en un fotograma se propagaría a todos los posteriores. Por eso es por lo que se combinan tres tipos de fotogramas en la secuencia:
Generalmente los fotogramas se agrupan en un Grupo de Fotogramas o GOP (Group Of Pictures). Se trata de la unidad de acceso aleatorio más pequeña. Un GOP está formado por:
Usualmente en un GOP encontramos 12 fotogramas, pero el codificador puede cambiarlo dinámicamente. En el caso de detectar un cambio de escena, forzará un fotograma I que dará inicio a un nuevo *GOP.
Teniendo en cuenta que para formar un fotograma P necesitamos un I y que para formar los B necesitamos tener los I y los P, podemos ordenar la secuencia de fotogramas desde dos puntos de vista diferentes:
En la siguiente tabla se ve el orden en que el usuario verá los fotogramas, junto con el orden en el que son creados y enviados:
Orden de visualización | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
I | B | B | P | B | B | P | B | B | P | B | B | I |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
Ordren de bitstream | ||||||||||||
I | P | B | B | P | B | B | P | B | B | I | B | B |
1 | 4 | 2 | 3 | 7 | 5 | 6 | 10 | 8 | 9 | 13 | 11 | 12 |
MPEG1: Apareció en 1993, con una tasa de entre 1 y 2 Mbps. Utiliza bloques de 8x8 píxeles. Estaba pensado específicamente para el almacenamiento digital en CD (VCD), con una calidad similar al VHS de la época. Sólo permite codificación progresiva.
MPEG2: Fecha de 1995, con una tasa de entre 4 y 20 Mbps. Aporta una mejora de calidad y es genérico, independiente de la aplicación. Permite la codificación entrelazada y diferentes modos de macrobloques. Se utiliza en el DVD, cable digital, TDT, etc.
MPEG4: Trata las escenas como una colección de objetos (fondo estático, rostros, etc.) dónde cada uno se codifica independientemente generando distintos bitstreams.
MPEG7: Incluye descripción de contenidos multimedia por palabras clave y por significados semánticos (quienes, que, cuando, donde) o estructural (formas, colores, texturas, movimiento, sonidos). Este material audiovisual es indexado y permite ejecutar búsquedas con facilidad.