# Imágenes I, P y B

Las imágenes I, P y B son las que resultan de la compresión de la señal de vídeo en los estándares ITU-T o MPEG. Estas imágenes atienden a los siguientes tipos:
* Las imágenes I: son las que se codifican por sí mismas.
* Las imágenes P: son las predichas por extrapolación.
* Las imágenes B: son las predichas por interpolación.

## Contexto general

En los estándares de compresión de video, como ITU-T o MPEG, se utilizan estos tipos de imágenes para comprimir los datos. De hecho, en lugar de codificar cada imagen que compone el video, uno puede codificar una imagen totalmente y después las diferencias entre esta imagen y las imágenes * siguientes, explotando así la redundancia en las imágenes que siguen. Por ejemplo, en una secuencia de video con un segundo plano fijo, podemos representar solo las partes que se mueven, para no codificar cada vez el segundo plano que no cambia y ganar así mucho en capacidades de compresión.
En estos tipos de algoritmos, se codifican algunas imágenes por sí mismas y se predicen las otras. Las imágenes son divididas en macrobloques (en general de 16 X 16 píxeles) y siguen el concepto de compensación de movimientos para la predicción: por cada macrobloque de una imagen que queremos codificar a partir de una imagen de referencia (que puede ser una anterior o una posterior), se busca donde está en la imagen de referencia, y se define un vector de movimiento que va a dar el movimiento relativo entre los dos macrobloques que se corresponden. Por supuesto, entre dos imágenes, no se pueden encontrar siempre macrobloques todos completamente idénticos y se utiliza una técnica de comparación entre los macrobloques para buscar los que son los más correlacionados entre ellos. Se puede predecir una imagen a partir de la imagen de referencia y los vectores de movimiento, así obtenemos la diferencia entre esta imagen predicha y la imagen original que queremos codificar. Entonces, solo se puede enviar las imágenes codificadas por sí mismas, las matrices de vectores de movimiento, y las diferencias entre las imágenes de referencia y las otras para codificar todo el vídeo.
* Las imágenes I pueden ser codificadas por el formato JPEG además de otros, se utilizan para decodificar las otras imágenes que componen el vídeo y pueden ser utilizadas como puntos de acceso aleatorio para empezar a decodificar los videos a partir de cualquier momento. En general, la codificación de estas imágenes ocupa más espacio que las otras.
* Las imágenes P son las imágenes predichas con referencia a una imagen que puede ser de tipo I o P anterior en el tiempo, así que necesitan la decodificación de la imagen de referencia antes de poder ser decodificadas.
* Las imágenes B son las imágenes predichas con referencia a dos imágenes que pueden ser de tipo I o P, una anterior y una posterior, así que necesitan la decodificación de las dos imágenes de referencia así como la reordenación de las imágenes para poder ser descodificadas.
Algunos macrobloques de las imágenes P o B pueden ser codificados por sí mismos para refrescarlos y para evitar errores demasiado importantes que se pueden producir si hay muchas imágenes predichas entre la imagen I anterior y la imagen actual.

## Explicación detallada
### Imágenes I: Intra

* Es una imagen codificada sin referencia a ninguna imagen anterior, sino referida exclusivamente a ella misma.
* Puede ser generada por el codificador para crear un punto de acceso aleatorio, es decir, un punto que permita al decodificador empezar la decodificación adecuadamente en referencia a esa marca (localización de imagen).
* Típicamente, requieren mayor número de bits para su codificación que el otro tipo de imágenes (B,P).
* Éstas imágenes son frecuentemente utilizadas como punto de referencia para la decodificación de otras imágenes. Períodos de refresco de aproximadamente medio segundo se usan típicamente en aplicaciones de 'broadcast' de televisión digital y en almacenamiento en DVD. Por otra parte, períodos de refresco superiores al anterior pueden ser utilizados en medios como sistemas de videoconferencia, donde es muy habitual el envío de las imágenes I(intra).
* La codificación de las imágenes I es muy parecida a la que se utiliza en JPEG. La diferencia radica en las tablas de cuantificación y en los procedimientos que se utilizan para realizar cambios sobre las escalas de cuantificación.

### Imágenes P: Predicted

La codificación de las imágenes P es algo más compleja que las imágenes intra-trama, pues debe realizarse la estimación de movimiento y decidir cuál es la forma más eficiente de codificar un macrobloque en función de los resultados obtenidos. En este apartado definiremos los distintos tipos de macrobloques que puede producirse en la codificación de las imágenes P. Una de las primeras peculiaridades de las imágenes P es que puede saltarse la codificación de algunos macrobloques (skipped macroblock). Esto ocurre cuando el procesador considera que no es necesario codificar un macrobloque, puesto que la información que contiene puede aproximarse con suficiente precisión basándonos en la información que tenemos en la misma posición en la imagen de referencia anterior. En este caso, los 4 bloques que forman el macrobloque se sustituyen por los mismos píxeles que teníamos en la imagen anterior, lo que significa que, en el fondo, estamos realizando una compensación de movimiento con un vector de movimiento nulo y que el error de predicción obtenido es suficientemente próximo a cero como para que no sea preciso codificarlo.
Además de los macrobloques skipped es posible tener 7 tipos adicionales que se denotan como predmc, pred-c, pred-m, intra-d, pred-mcq, pred-cq y intra-q. Las abreviaturas que se utilizan para identificar los posibles tipos de macrobloque corresponden a:
* m: Macrobloque codificado utilizando compensación de movimiento forward. Se transmite el vector de movimiento asociado.
* c: Como mínimo se transmite la información de error asociada a uno de los bloques que forman el macrobloque.
* d: Se utiliza el cuantificador por defecto.
* q: Se realiza un cambio en la escala del cuantificador.
* skipped: Macrobloques que no son transmitidos.
La misión del codificador es elegir entre las distintas posibilidades de codificar un macrobloque aquella que proporcione la mejor opción. Generalmente, las decisiones no son evidentes y deben probarse varias posibilidades antes de llegar a una decisión. Las matrices de cuantificación utilizadas en el caso de realizar codificación mediante predicción tienen un paso de cuantificación uniforme para todos los coeficientes. Esto se debe a que el contenido frecuencial de las señales de error no muestra ninguna preferencia para concentrar su energía en unas frecuencias particulares y en principio todos los coeficientes tienen la misma importancia en la reconstrucción de las imágenes. En la figura se muestra la matriz de cuantificación por defecto que se utiliza en la codificación inter-trama.

### Imágenes B: Bi-predicted/Bi-directional

* Las imágenes B requieren decodificación previa de otras imágenes de la secuencia para ser descodificadas correctamente.
* Pueden contener tanto datos de imagen cómo vectores de desplazamiento, o también combinaciones de los dos elementos.
* Incluyen algunos modos de predicción que obtienen la predicción de una región en movimiento (por ejemplo, un macrobloque o una región de área menor) llevando a cabo un promediado de las predicciones obtenidas usando dos regiones de referencia previamente descodificadas.
* En estándares de codificación más antiguos (como MPEG-2), las imágenes B no se utilizan nunca cómo referencias para la predicción de otras imágenes. Como resultado, una codificación con menos calidad (resultado de la utilización de menos bits) puede ser utilizada en las imágenes B, ya que la pérdida de detalle no perjudicará la calidad de la predicción de las imágenes subsiguientes.
* En H.264, hay la opción de utilizarlas o no cómo referencias para la decodificación de otras imágenes (a discreción del codificador).
* En estándares de codificación más antiguos (como MPEG-2), se utilizan exactamente dos imágenes previamente codificadas cómo referencias durante la codificación, y solo se requiere una de esas dos imágenes para preceder la imagen B en el monitor y la otra para seguirla.
* En H.264, se puede utilizar una, dos o más imágenes previamente descodificadas cómo referencias durante la codificación, y pueden tener cualquier orden de reproducción arbitrario, relativo a la imagen/es utilizadas para su predicción.
* Típicamente, se requieren menos bits para codificar una imagen B que con las I o P.