# Vector de movimiento

El vector de movimiento es una estimación del desplazamiento horizontal y vertical de cada región de una cierta imagen con respecto a uno o varios frames de la misma secuencia.

## Contexto

En el caso de compresión MPEG existen dos tipos de codificación, codificación tipo intra y codificación tipo inter. En esta última, la información es relativa a las imágenes enviadas anteriormente. El codificador no debe enviar toda la información de cada imagen, sólo deberá enviar las variaciones con respecto a la imagen anterior, es decir, el movimiento que han sufrido las distintas particiones de la imagen. La diferencia entre la imagen que resulta de aplicar los vectores de movimiento a la imagen anterior y la actual también se envía.

## Explicación detallada

Para imágenes en movimiento, como en el caso del vídeo, existe una redundancia temporal añadida a las imágenes en general. Puesto que en los sistemas actuales de televisión se transmiten unas 25 imágenes por segundo, las imágenes sucesivas son muy parecidas excepto en los cambios de plano. En televisión digital, se transmiten únicamente las variaciones entre imágenes ahorrando bits en la transmisión.
La imagen se divide en macrobloques de N píxels x N píxels y para cada bloque se indica mediante dos valores el desplazamiento horizontal y vertical entre imagen e imagen.
Cuando un macrobloque toma un cierto valor, se busca en las imágenes cercanas la zona que más se asemeja y se asume que el macrobloque se ha movido. Esta búsqueda se realiza en una región alrededor del macrobloque que tiene por área (2N-1)x(2N-1) donde NxN es el tamaño del macrobloque. En tal caso, se envía únicamente y especialmente la información del movimiento. El macrobloque queda por tanto definido a partir de una zona cuya información se halla en la memoria del decodificador. Una vez codificados, la idea de macrobloque desaparece como tal. La búsqueda de porciones de imagen en la imagen de referencia se hace por lo tanto píxel a píxel lo que mejora la precisión. En algunos sistemas, la búsqueda se llega a hacer en saltos de 1/4 de píxel. Para conseguir esta precisión se hace un interpolado de la imagen de referencia.

## Codificación

Al buscar una zona que presente máxima coincidencia el codificador debe elegir para cada bloque la forma de codificar dependiendo del grado de coincidencia:
1- Coincidencia total: Existe una zona en la imagen de referencia idéntica al macrobloque actual y además se encuentra exactamente en la misma posición. En este caso al codificar el macrobloque anterior al que no sufre modificación, se incrementa en 2 el contador secuencial de macrobloques para indicar que se salta un macrobloque. Así por cada macrobloque que no cambia respecto a la imagen anterior el contador sumará 2. El receptor puede reconstruir sin problemas esta porción de imagen ya que se encuentra en la memoria de la imagen anterior.
2- Coincidencia parcial: Existe una zona idéntica en la imagen de referencia pero no se encuentra en la misma posición. En este caso, se introduce el vector de movimiento en la cabecera del macrobloque y la zona de datos queda vacía puesto que el decodificador obtiene los datos de la imagen de referencia.
3- Coincidencia mínima: Existe una zona en la imagen de referencia que no es idéntica pero supera el grado de coincidencia establecido como mínimo. En este caso se envía el vector de movimiento o información del desplazamiento entre el macrobloque actual y la zona parecida en la cabecera. En la zona de datos se envía únicamente la información referente a las diferencias existente entre la imagen actual y la de referencia.
4- Coincidencia nula: No existe ninguna zona cuya información supere el grado mínimo de coincidencia con el macrobloque actual. En este caso, la codificación de este bloque es de tipo intra y no tendrá ningún vector de movimiento en su cabecera.

## Decodificación

El decodificador lee la cabecera de cada porción de imagen y en función de lo que contiene procede a la decodificación correspondiente que es diferente para imágenes I, P y B. En el caso de imágenes de tipo I, la decodificación es inmediata. Sin embargo, en el resto de casos, se necesita de la decodificación previa de la imagen de referencia para la codificación de la imagen actual. Para el caso de las imágenes P que tienen un solo vector de movimiento, se necesita la decodificación de la imagen I o P anterior y para el caso de las imágenes B, se necesitan tanto la imagen (I o P) anterior como la posterior. En este último caso, habrá dos vectores de movimiento, uno que indica el movimiento que ha sufrido el macrobloque respecto a la imagen anterior y otro para el desplazamiento respecto a la imagen siguiente. Las imágenes resultantes al aplicar estos vectores se ponderan.

## Predicción

Un aspecto a tener en cuenta en vídeo es cuando se produce únicamente una panorámica de la cámara, todos los macrobloques sufren el mismo desplazamiento con respecto a la imagen anterior. En estos casos, es útil aprovechar esta redundancia y no enviar todos los vectores de movimiento. Por tanto, bastará con enviar el vector de movimiento de algunos macrobloques repartidos por la imagen y el resto se predice. En el caso de compresión MPEG, se predice el vector de movimiento antes de que este sea enviado gracias a los vectores de los macrobloques vecinos. La información de la predicción se suma con la información de los vectores de movimiento enviados y el resultado es el vector de movimiento real.