Compensación de movimiento
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.
Codificador basado en detección de movimiento
[editar]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:
- Cada imagen se divide en bloques, generalmente de 8 x 8 o de 16 x 16 píxeles.
- Por cada bloque de la imagen, se genera una predicción, buscando donde se encontraban estos bloques en la imagen anterior (compensación de movimiento).
- Se resta la predicción al bloque de la imagen actual.
- Se aplica una DCT a la diferencia entre la predicción y el bloque actual.
- Se cuantifican los coeficientes DCT, eliminando las componentes de altas frecuencias y se codifican en un código, generalmente no-uniforme.
- En caso de que no hubiera fotograma previo o hubiera mucha diferencia, se codifica el bloque de nuevo en lugar de la diferencia de la predicción.
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:
- El resultado de aplicar la DCT y la cuantificación a cada bloque diferencia.
- Los vectores de movimiento de los elementos de dentro los macrobloques.
- Se aplica un filtro a la DCT para eliminar las componentes de alta frecuencia y aumentar la compresión.
Tratamiento de los fotogramas
[editar]La compresión anterior se puede aplicar a los fotogramas de dos maneras:
- Compresión intrafotograma: La DCT se aplica a bloques de la imagen original pero no se hace ninguna predicción sobre el movimiento (la compresión es similar a las imágenes JPEG). Se denominan fotogramas I. Esta compresión es útil si la compensación de movimiento no proporciona una buena predicción.
- Compresión no-intrafotograma: La DCT se aplica a los bloques de la imagen diferencia y se calcula la predicción de movimiento. Se generarán dos tipos de fotogramas: los P y los B
Acceso a una secuencia de imágenes
[editar]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:
- Fotogramas I (intra): Se codifican aisladamente, sin referencia a otros fotogramas, como si fueran imágenes estáticas. Sirven por permitir un acceso aleatorio e impedir la propagación de errores.
- Fotogramas P (predictivos): Se codifican aplicando compensación de movimiento al último fotograma I o P (el que sea más reciente). Los fotogramas I y P se denominan fotogramas de anclaje.
- Fotogramas B (bidireccionalmente predictivos): Se codifican aplicando compensación de movimiento a los dos fotogramas de anclaje más recientes en el pasado y en el futuro. Con la predicción bidireccional se suele conseguir una mejor relación de compresión que con predicciones basadas sólo en el pasado: es posible que un bloque del fotograma actual no aparezca en un fotograma pasado pero sí en uno de futuro. Sólo se pueden crear después de que se hayan creado los fotogramas I y P. También toleran más error porque no se usan para hacer otras predicciones.
Agrupación de fotogramas: GOP
[editar]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:
- Un fotograma I (el primero).
- Uno o varios fotogramas P.
- Varios fotogramas B intercalados.
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:
- Orden de visualización, como lo ve el usuario.
- Orden de bitstream, como se generan los fotogramas.
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 |
Características particulares de los formatos que utilizan compensación de movimiento
[editar]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.