\chapter{Introducción a la compresión de vídeo}

A medida que las comunicaciones digitales se imponen cada vez más en
el mundo de hoy, el procesamiento digital de señales obtiene un
interés especial, debido a que este es la base para muchas
aplicaciones importantes, como la televisión digital, la multimedia,
el sonido digital, etc..

Hace una década, la posibilidad de difundir vídeo digital destinada al
público en general a través de una red de transmisión de datos como
puede ser Internet parecía muy lejana, incluso se pensaba que su
introducción no llegaría antes del final de este siglo XX.

La razón fundamental para afirmar esto era el importante flujo de
datos que se necesitaba para transmitir una imagen de vídeo
digitalizada, el cual era como mínimo de 100 Mbps.

A partir de finales de los años 80, el rápido desarrollo de eficaces
algoritmos de compresión de vídeo, como el estándar JPEG (Joint
Photographic Experts Group) para imágenes fijas y MPEG (Moving
Pictures Experts Group) para imágenes en movimiento, reducirían de
forma significativa el flujo necesario para la transmisión de
imágenes, lo que cambió radicalmente el panorama, al llevar aquellas
cantidades a valores mucho más razonables (de 1,5 a 30 Mbps,
dependiendo de la resolución de las imágenes en movimiento). Además
los progresos en integración permitían considerar la realización
práctica de circuitos de descompresión, así como los circuitos de
memoria asociados, a un precio asequible.

En los siguientes apartados describiremos el estándar MPEG-1, así como
algunos conceptos de compresión de vídeo generales, particularizando
para dicho estándar.


\section{Compresión de vídeo en el estándar MPEG-1}

En el año 1990, la ISO (International Organization for
Standardization) y la IEC (International Electrotechnical Commission),
preocupados por la necesidad de almacenar y reproducir imágenes de
vídeo digitales y su sonido estéreo correspondiente, creo un grupo de
expertos que llamó MPEG (Moving Pictures Expert Group), procedentes de
aquellas áreas implicadas en el problema (telecomunicaciones,
informática, electrónica, radio difusión, etc.).

El primer trabajo de este grupo se conoció en el año 1992 como la
norma ISO/IEC 11172, mucho más conocida como MPEG-1. Este estándar
está dividido en cinco partes:
\begin{itemize}
\item 11172-1 (Sistema): Describe la sincronización y multiplexación de señales de audio y vídeo.
\item 11172-2 (Vídeo): Describe la compresión de señales de vídeo, centrándose en el escaneo progresivo (no entrelazado) y considerando especialmente las aplicaciones de vídeo en CD (Compact Disc).
\item 11172-3 (Audio): Describe una familia genérica de codificadores de audio, con tres miembros jerárquicamente compatibles, denominados layer-1, layer-2 y layer-3.
\item 11172-4 (Test de conformidad): Describe los procedimientos para determinar las características de los bitstreams (flujo de bits) codificados y el proceso de descodificación, así como los tests de conformidad con los requerimientos establecidos en las otras partes.
\item 11172-5 (Simulación por software): Es un informe técnico sobre la implementación por software de las tres primeras partes de MPEG-1.
\end{itemize}

MPEG-1 fue creado para reproducir vídeo a pantalla completa con una
resolución de $352 \times 288$ (NTSC a 30 fps --frames per second--), y
a una tasa de transferencia de 1,5 Mbps\footnote{Mbps = $10^6$ bits per second}, de los cuales 1,15 Mbps son
para el vídeo y los 350 kbps\footnote{kbps = $10^3$ bits per second} restantes para el sonido y datos
auxiliares. Es el equivalente a un lector de CD-VideoCD, CDTV, CD-i, o
CD-ROM de velocidad 1X. Este formato se acerca a la calidad ofrecida
por los vídeos VHS.

Las aplicaciones de MPEG-1 son muchas. Es utilizado con frecuencia en
enciclopedias, juegos y demostraciones publicitarias. El mayor éxito
cosechado por este estándar es el sistema VideoCD. Se trata de un
formato especial de vídeo, compatible MPEG-1 ($352 \times 288$ pixeles
a 30 fps en el caso de NTSC --National Television System Commitee--)
capaz de almacenar 70 minutos de imágenes con calidad VHS y sonido con
calidad CD, en un simple CD. Este vídeo es reproducible en
cualquier unidad preparada para ello, como los reproductores de
VideoCD y ordenadores equipados con un lector de CD-ROM y software o
hardware reproductor de MPEG-1.

\subsection{Formato del vídeo de entrada}

El formato de entrada para MPEG-1 es el SIF (Source Input Format). Fue
derivado del CCIR601 (International Radio Consultative Committee), un
estándar de TV digital. CCIR601 especifica las coordenadas de color
(Y, Cb, Cr) donde Y es la componente de luminancia (blanco y negro) y
Cb y Cr son dos componentes de crominancia (diferencias de color). Se
adoptó una frecuencia de muestreo de 13,5 MHz. Existen varios formatos
de muestreo tales como 4:4:4, 4:2:2, 4:1:1 y 4:2:0. En 4:4:4, la
frecuencia de muestreo para Y, Cb y Cr es la misma. En 4:2:2, la
frecuencia de muestreo para Cb y Cr es la mitad que para Y.

Para convertir la señal de TV analógica a digital con la frecuencia de
muestreo de 13,5 MHz del CCIR601 a 720 pixeles por 576 líneas (PAL
--Phase Alternating Line--) y de 720 pixeles por 480 líneas (NTSC) a
30 y 25 fps respectivamente usando el formato 4:2:2 se necesitan
aproximadamente 166 Mbps. Para poder conseguir vídeo con buena calidad
a 1,5 Mbps, lo que se hizo fue reducir la resolución a un cuarto del
CCIR601, el resultado es $360
\times 240$ para señal NTSC y $360 \times 288$ para señal PAL. Por
motivos del algoritmo de estimación de movimiento el número de píxeles
de ambas dimensiones deben ser múltiplos de 16. Para ello se descartan
los 4 pixeles de los extremos derecho e izquierdo dando una resolución
de $352 \times 240$ a 30 fps para NTSC y de $352 \times 288$ a 25 fps
para PAL respectivamente.

\subsection{Tipos de imagen MPEG}

En MPEG cada secuencia de vídeo está dividida en uno o más GOPs (Group
of Pictures). Estos están formados por tres tipos de imágenes: I, P y
B.

\subsubsection{Las imágenes I (Intra)}

Son imágenes que no requieren información adicional para su
descodificación. Son codificadas sin ninguna referencia a otras
imágenes, es decir, contienen todos los elementos necesarios para su
reconstrucción por el descodificador.

Las imágenes I permiten realizar accesos aleatorios al vídeo
comprimido, y además, movernos por la secuencia de una forma
rápida. Una secuencia con imágenes de tipo I es más editable. Además,
la inclusión de este tipo de imágenes hace que el error de compresión
propagado de imágenes anteriores P y B termine, ya que no necesita de
una imagen previa de cualquier tipo (I, P o B) para mostrarse. 

Para comprimir las imágenes I se elimina la redundancia espacial, que
es aquella provocada por el hecho de que los puntos adyacentes son en
general bastante semejantes en intensidad.

Una técnica para eliminar dicha redundancia es la codificación basada
en transformadas, donde se utiliza una transformada lineal y
reversible que hace corresponder una imagen con un conjunto de
coeficientes en el dominio de la frecuencia. La imagen en el dominio
de la frecuencia se puede transformar inversamente al dominio
espacial, reproduciendo la imagen tal y como estaba originalmente
\cite{Pratt}.

En el dominio de la frecuencia, los coeficientes mas grandes tienden a
agruparse en regiones, especialmente alrededor de las zonas de baja
frecuencia. Como resultado, hay áreas generalmente grandes de la
imagen donde los coeficientes tienen un valor muy pequeño o cero. Esto
ocurre porque existe una alta correlación entre las componentes de
frecuencia presentes en la imagen y las funciones base que definen la
transformada. En consecuencia, la versión en el dominio de la
frecuencia de la imagen es generalmente una representación muy
eficiente de la imagen original. Las técnicas de compresión de
imágenes basadas en transformadas se aprovechan de esta característica
de la imagen en el dominio de la frecuencia, simplemente eliminando
los coeficientes de la imagen que tienen los valores más
pequeños. Puesto que la energía acumulada por estos coeficientes es
mínima, cuando la imagen se transforma nuevamente hacia el dominio
espacial, la eliminación de estos coeficientes causa una pequeña
distorsión.

Por último, indicar que las imágenes I tienen una tasa de compresión
relativamente pequeña, comparada con la que se consigue para imágenes
tipo P y B.


\subsubsection{Las imágenes P (previstas)}

Se basan en que en una secuencia de imágenes en movimiento, en
general, existe una alta dosis de redundancia temporal, esto es, que
dos imágenes adyacentes en el tiempo van a ser, en general, bastante
parecidas. Puesto que en la mayoría de las escenas lo que se producen
son traslaciones de objetos, una técnica muy eficaz de estimar el
contenido de una imagen en función de otra anterior es la estimación
de movimiento.

%Se codifican con respecto a las imágenes de tipo I o P anteriores,
%gracias a las técnicas codificación temporal y compensación de
%movimiento.

%La codificación temporal busca la redundancia que existe entre
%imágenes sucesivas cuando estas son similares. En lugar de enviar la
%información de cada imagen por separado, se envía la diferencia
%existente entre la imagen previa y la actual en forma de codificación
%diferencial. Desafortunadamente como existe la posibilidad de
%transmitir errores, no es posible utilizar una secuencia ilimitada de
%imágenes previstas ya que entonces el error se propagaría y
%amplificaría de forma ilimitada y no podríamos solventarlo. Por eso se
%utilizan un número limitado de imágenes previstas para garantizar una
%mejor transmisión de los datos.

\begin{figure}
\centering
\epsfig{file=figuras/eps/compensacion_movimiento,width=9cm}
\caption[Ejemplo de estimación de movimiento]
{Un ejemplo de estimación de movimiento donde se obtienen los
vectores de movimiento.}
\label{fig:compensacion_movimiento}
\end{figure}

\begin{figure}
\epsfig{file=figuras/eps/imagen_intra,width=12.5cm}
\caption[Uso periódico de la imagen I]
{Uso periódico de la imagen I. Se muestran dos tipos de imágenes I
(imagen intra) y P (imagen prevista).}
\label{fig:imagen_intra}
\end{figure}


La estimación de movimiento trata de calcular el movimiento de los
objetos en una escena. La estimación de movimiento trabaja de la
siguiente forma: cuando una imagen I es enviada, esta es almacenada de
tal modo que pueda ser comparada con la siguiente imagen de entrada,
para encontrar así los posibles vectores de movimiento (véase Figura
\ref{fig:compensacion_movimiento}), los cuales pueden ser localizados
en diferentes áreas de la imagen. Luego la imagen I es combinada de
acuerdo a estos vectores. La imagen prevista resultante es comparada
con la imagen actual para producir una predicción de error, también
llamada imagen residual. La predicción de error es transmitida con los
vectores de movimiento. En el receptor la imagen I original es también
retenida en la memoria, y es cambiada de acuerdo con los vectores de
movimiento transmitidos, para crear la imagen prevista y luego la
predicción de error es adicionada, recreando la imagen original.

La Figura \ref{fig:imagen_intra} muestra la relación que existe entre
las imágenes I y P. Mientras la imagen I requiere grandes cantidades
de información, ya se que envía la información completa de la imagen,
las imágenes P requieren una cantidad menor, ya que se codifica la
diferencia con la imagen anterior. Por tanto, la tasa de compresión de
imágenes P es claramente mayor que la de las imágenes I. En la
práctica estas requieren aproximadamente la mitad de los datos de las
imágenes I.


\subsubsection{Las imágenes B (bidireccionales)}

Las imágenes de tipo B se insertan entre las de tipo I y P, y son el
resultado de una codificación bidireccional.

Cuando un objeto se mueve, este oculta lo que hay detrás de él, pero a
medida que se va moviendo, permite observar el fondo. El revelado
del fondo exige nuevos datos a ser transmitidos, ya que el área del
fondo había sido ocultada anteriormente y la información no pudo ser
obtenida desde una imagen previa.

La codificación bidireccional ayuda a minimizar este problema, ya que
permite utilizar información de imágenes anteriores y posteriores a la
imagen observada. Si el fondo ya ha sido revelado, y este es
presentado en una imagen posterior, la información puede ser movida
hacia atrás en el tiempo, creando parte de la imagen con anticipación.

%\begin{figure}
%\centering
%\epsfig{file=figuras/eps/codif_bidireccional,width=13cm}
%\caption[Concepto de codificación bidireccional]
%{Concepto de codificación bidireccional.}
%\label{fig:codif_bidireccional}
%\end{figure}

%La Figura \ref{fig:codif_bidireccional} muestra en qué se basa la
%codificación bidireccional. En el centro del diagrama un objeto se
%mueve revelando su fondo, pero éste no se conoce hasta la siguiente
%imagen. Entonces se toman los datos de las imágenes anteriores y
%posteriores, o incluso se utiliza el promedio de los datos,
%descubriendo de esta forma el fondo.

\begin{figure}
\centering
\epsfig{file=figuras/eps/eje_codif_bidireccional,width=12cm}
\caption[Ejemplo de codificación bidireccional]
{Un ejemplo de codificación bidireccional.}
\label{fig:eje_codif_bidireccional}
\end{figure}

La Figura \ref{fig:eje_codif_bidireccional} muestra un ejemplo de
codificación bidireccional. Primero se toma una imagen I y con la
ayuda de una imagen P se pueden obtener imágenes B, mediante
interpolación, las cuales son llamadas también imágenes
bidireccionales. Las imágenes B utilizan estimación de movimiento para
su compresión.

Como no se utilizan para describir otras imágenes, las imágenes B no
propagan los posibles errores de compresión.

Este tipo de imágenes es el que ofrece el factor de compresión más
alto, que generalmente es de una cuarta parte de los datos de las
imágenes I.

Dependiendo de la complejidad del codificador utilizado, se podrán
codificar sólo las imágenes I, las imágenes I y P o las imágenes I, P
y B; sin duda, con resultados absolutamente diferentes a nivel del
factor de compresión y en cuanto a las posibilidades de acceso
aleatorio, así como del tiempo de codificación y de la calidad
percibida.

\subsubsection{Ejemplo de encadenado de imágenes. Factor de compresión}

Como ya hemos indicado anteriormente, en el estándar MPEG-1, una
secuencia de imágenes que está constituida por una imagen I y las
siguientes imágenes P o B hasta el comienzo de otra imagen I se
denomina grupo de imágenes GOP (Group of Pictures).

Existen dos parámetros que definen la manera en que las imágenes I, P
y B se encadenan dentro del GOP, estos son M y N:

\begin{itemize}
\item M es la distancia (en número de imágenes) entre dos imágenes P (previstas) sucesivas.
\item N es la distancia entre dos imágenes I (Intra) sucesivas.
\end{itemize}

Para alcanzar un flujo de vídeo de 1,15 Mbits con una calidad
satisfactoria, al tiempo que se mantiene una velocidad de acceso
aleatorio aceptable ($<$ 0,5 segundos)\footnote {El tiempo de acceso
en una secuencia de vídeo varía en función del número de imágenes I
que contenga. A mayor número de imágenes, mayor velocidad de acceso.},
los parámetros comúnmente utilizados son M=3 y N=12, como se muestra en
la Figura \ref{fig:GOP_MPEG}.

\begin{figure}
\centering
\epsfig{file=figuras/eps/gop_mpeg,width=12cm}
\caption[Ejemplo de grupo de imágenes]
{Un ejemplo de grupo de imágenes (GOP), para M=3, N=12.}
\label{fig:GOP_MPEG}
\end{figure}

En este caso, una secuencia de vídeo se compone de 1/12 (8,33\%) de
imágenes I, 1/4 (25\%) de imágenes P y de 2/3 (66,66\%) de imágenes
B. El factor de compresión global se ve favorecido por el hecho de que
son las imágenes más frecuentes (imágenes B) las que tienen un factor
de compresión mas alto.

En la visualización, tras la codificación y descodificación, es
evidente que las imágenes de la secuencia de vídeo deben ser
reproducidas en el mismo orden en que se captaron.

Con los parámetros definidos anteriormente (M=3, N=12), la forma en
que van llegando al compresor las imágenes es la siguiente:

\begin{quote}
1(I) 2(B) 3(B) 4(P) 5(B) 6(B) 7(P) 8(B) 9(B) 10(P) 11(B) 12(B) 13(I) 14(B) 15(B) 16(P)\ldots
\end{quote}

Sin embargo, para codificar o descodificar una imagen B
(bidireccional), el codificador y el descodificador necesitarán la
imagen I o P que la precede y la imagen P o I que la sigue. El orden
de las imágenes será, por tanto, modificado antes de la codificación,
de forma que el codificador y el descodificador dispongan, antes que
de las imágenes B, de las imágenes I y/o P necesarias para su
tratamiento, o sea que la llegada real de las imágenes al descompresor
es:

\begin{quote}
1(I) 4(P) 2(B) 3(B) 7(P) 5(B) 6(B) 10(P) 8(B) 9(B) 13(I) 11(B) 12(B) 16(P) 14(B) 15(B)\ldots
\end{quote}

Para conseguir factores de compresión mayores, manteniendo la misma
calidad de reproducción, se aumenta el número de imágenes P y B en el
GOP. Esto sin embargo dificulta la recuperación eficaz de una
secuencia de imágenes comprimidas que ha llegado con errores de
transmisión.

\subsection{Estructura del bit-stream de vídeo en MPEG-1}

La estructura de una secuencia de MPEG-1 está formada por seis capas
siendo estas: El bloque (block), el macrobloque (Macroblock), la
rebanada (Slice), la imagen (Picture), el grupo de imágenes (Group of
Pictures o GOP) y la secuencia de vídeo (video sequence).

\subsubsection{Bloque (Block)}

Es la unidad fundamental de la información de la imagen y está
representada por un bloque de coeficientes DCT (Discrete Cosine
Transform), que tiene un tamaño de $8\times8$, los cuales
representan datos Y, Cr o Cb.

Aquí, el coeficiente DC es enviado primero ya que este representa con
mayor precisión la información de este bloque (de hecho, a su
media). Los demás coeficientes AC son enviados a continuación.

\subsubsection{Macrobloque (Macroblock)}

Cada macrobloque tiene un tamaño de $16\times16$ pixeles y es la
unidad fundamental de la imagen que se emplea para compensar (estimar
y eliminar) el movimiento. Cada macrobloque genera un vector de
movimiento en las dos dimensiones del espacio. En una imagen B, el
vector de movimiento puede ser hacia adelante o hacia atrás en el
tiempo.

Usando los vectores, el descodificador obtiene información acerca de
las imágenes anteriores y de las posteriores, produciendo así la
predicción de imágenes que hizo el codificador (véase la Figura \ref{fig:esquema_codificador_mpeg}). Los macrobloques son
transformados inversamente para producir una imagen de rectificación
que es adicionada a la imagen prevista que ha sido producida a la
salida del descodificador.




\subsubsection{Rebanada (Slice)}

Los macrobloques son agrupados en rebanadas, y siempre deben
representar una fila horizontal que está ordenada de izquierda a
derecha.

En MPEG, las rebanadas pueden comenzar en cualquier sentido y ser de
tamaño arbitrario, pero el ATSC (Advance Television Systems Committee)
estableció que deben comenzar en el borde izquierdo de la imagen. Las
rebanadas son la unidad fundamental de sincronización para la
codificación de la longitud variable que se encarga de encontrar una
representación eficiente para los coeficientes DCT cuantificados y
para los vectores de movimiento. Los vectores iniciales en una
rebanada son enviados completamente, mientras que los demás vectores
son transmitidos diferencialmente.

Por otra parte, en las imágenes I, los primeros coeficientes DC de las
rebanadas son enviados completamente y los demás coeficientes AC son
transmitidos en forma diferencial.

\subsubsection{Imagen (Picture)}

Cuando un número de rebanas se combinan, construyen una imagen. La
imagen de soporte inicial define qué imágenes I, P o B codifica e
incluye una referencia temporal (el número de secuencia) para que la
imagen pueda ser representada en el momento adecuado. Un vector global
puede ser enviado para toda la imagen, y luego se pueden enviar
vectores individuales que lleguen a crear la diferencia en el vector
global.

\subsubsection{Grupo de imágenes (Group of Pictures o GOP)}

Las imágenes son agrupadas para producir un GOP (grupo de imágenes)
que siempre comienza con una imagen I. El GOP es la unidad fundamental
de codificación temporal. Entre imágenes I, un número variable de
imágenes P y/o B pueden ser colocadas como se ha descrito
anteriormente.

%Un GOP puede ser abierto o cerrado. En un GOP cerrado, las ultimas
%imágenes B requieren de una imagen I para el siguiente GOP por
%descodificar y la secuencia de bits puede ser cortada al final del
%GOP. En un GOP abierto algunas imágenes B necesitan para
%descodificarse imágenes I o P pertenecientes a otro GOP. Por ejemplo
%en la Figura
%\ref{fig:GOP_MPEG} se presenta un GOP cerrado.

\subsubsection{Secuencia (video sequence)}

La unión de dos o más GOPs produce una secuencia de vídeo. Al comienzo
de la secuencia se especifica el tamaño horizontal y vertical de la
imagen, norma de barrido, la tasa (temporal) de imágenes, si se usa un
barrido progresivo o entrelazado, el perfil, nivel, velocidad de
transferencia de bits, y qué matrices de cuantificación se usan. Sin
estos datos, un descodificador no puede comprender el flujo de bits y
por lo tanto no puede comenzar la operación de descodificación
correcta. Esto ocurre generalmente cuando un televidente está
cambiando canales de un lugar a otro en su televisor.

\subsection{El codificador y el descodificador en MPEG-1}

\begin{figure}
\centering
\epsfig{file=figuras/eps/esquema_codificador_mpeg, width=13cm}
\caption[Esquema de bloques de un codificador MPEG-1]
{Esquema de bloques de un codificador MPEG-1.}
\label{fig:esquema_codificador_mpeg}
\end{figure}


El estándar internacional no define explícitamente el proceso de
codificación, sino únicamente la sintaxis y semántica del flujo de
bits (bit-stream) a la salida del codificador. Esto deja una gran
libertad a la hora de diseñar el codificador.

Un codificador de MPEG-1 cuyo esquema de bloques está representado por la Figura \ref{fig:esquema_codificador_mpeg} incluye los siguientes módulos:

\begin{itemize}

\item Reordenación de las imágenes: A este módulo llegan las imágenes originales en el orden en que fueron tomadas. Se encarga de reordenarlas para poder usar la codificación diferencial y bidireccional utilizada al comprimir imágenes de tipo P y B.

\item Estimación de movimiento: A la entrada de este módulo tenemos la serie de imágenes reordenadas. Se obtienen los vectores de movimiento y los modos de codificación para cada macrobloque de $16 \times 16$ pixeles. También se decide el modo de codificación de cada uno de ellos. A la salida además tendremos las imágenes reordenadas que recibimos a la entrada.

\item Memoria + Predicción: Recibe la imagen reconstruida, los vectores de movimiento y los modos de codificación. En este módulo se calcula la imagen predicha, bien a partir de la imagen de referencia (I o P) pasada y en algunos casos futura (caso de imágenes B) que luego será eliminada de la imagen original, dando lugar a la imagen residuo. 

\item DCT: A este módulo van llegando las imágenes residuo las cuales se van separando en bloques de $8 \times 8$ aplicando la DCT a cada uno de ellos. A la salida tendremos la imagen residuo transformada.

\item Q: A este módulo van llegando las imágenes residuo transformadas, se las cuantifica usando una matriz preestablecida y obteniendo de esta forma muchos ceros en los coeficientes transformados.

\item VLC: A la entrada de este módulo tendremos la imagen residuo transformada y cuantificada. Se codifican los coeficientes de la imagen aplicando una tabla VLC (Variable Lenght Coding, en concreto una codificación Huffman\cite{Huffman}), haciendo que se pueda representar la imagen con una menor cantidad de datos. A la salida tendremos la imagen comprimida.

\item Control del bit-rate: Tiene como entrada el tamaño ocupado del buffer. Se encarga de controlar el estado de ocupación. Para ello se cambian los valores de la matriz de cuantificación para obtener un mayor número de ceros, consiguiendo que después en la etapa VLC se realice una mayor compresión. A la salida tendremos una secuencia MPEG-1.
  
\item Buffer: En este módulo se va almacenando el flujo de bits completo utilizable por un descodificador MPEG-1.
\end{itemize}




Un descodificador MPEG-1 invierte las operaciones del codificador. El
esquema de bloques se muestra en la Figura
\ref{fig:esquema_decodificador_mpeg}. El descodificador incluye los siguientes módulos:

\begin{itemize}
\item Buffer: A este módulo va llegando la secuencia MPEG-1 del canal de transmisión.  

\item Demultiplexor + VLC: A este módulo van llegando las imágenes provenientes del buffer, se realiza la separación de la información relativa a la imagen comprimida, los vectores de movimiento y los modos de codificación. Se aplica la descodificación VLC a la imagen comprimida dando lugar a la imagen residuo transformada y cuantificada.

\item Q$^{-1}$: Este módulo realiza la descuantificación de cada uno de los bloques de $8 \times 8$ que forman la imagen residuo, obteniendo de esta forma la imagen residuo transformada.

\item DCT$^{-1}$: Una vez descuantificada la imagen, se aplica la DCT$^{-1}$ a los bloques de $8 \times 8$, dando lugar a la imagen residuo, que en el caso de imágenes I o P pasa a la memoria para ser usada como imagen de referencia para sucesivas imágenes.

\item Memoria + Predicción: Este módulo se encarga de obtener la imagen predicha que después servirá para adicionada con la imagen residuo obtener la imagen reconstruida. Para ello necesita de los vectores de movimiento y de los modos de codificación de los bloques de $8 \times 8$ que forman la imagen además de la imagen de referencia previa.

\item Reordenación de las imágenes: Una vez que tenemos las imágenes reconstruidas, se tienen que ir reordenando en función del orden de visualización.

\end{itemize}


\begin{figure}
\centering
\epsfig{file=figuras/eps/esquema_decodificador_mpeg,width=13cm}
\caption[Esquema de bloques de un descodificador MPEG-1]
{Esquema de bloques de un descodificador MPEG-1.}
\label{fig:esquema_decodificador_mpeg}
\end{figure}

\section{Codificación escalable. Tipos}

En este apartado describiremos los distintos tipos de escalabilidad
que existen, particularizando después en el estándar MPEG.

En términos generales, la codificación escalable es aquella que nos
permite visualizar el vídeo a distintas calidades (resolución,
frame-rate o SNR), en función de la necesidad del momento. Para
conseguir aumentar la calidad en alguna cualidad es necesario disponer
de una información suplementaria que se añade a una información
base. Este es el principio de la codificación escalable.

Esta técnica es útil para un gran número de aplicaciones donde el
vídeo necesita ser descodificado a diferentes resoluciones y en
distintos niveles de calidad, por ejemplo, en videoconferencia, en
televisión de alta definición (HDTV), en televisión estándar,
etc. Básicamente existen tres tipos de escalabilidad:

\begin{itemize}
\item Espacial (Spatial scalability). La escalabilidad espacial nos permite ver la secuencia de vídeo a
distintas resoluciones, es decir, a distintos tamaños de imágenes
(véase la Figura \ref{fig:escalabilidad_espacial}).

\item Calidad (SNR scalability). La escalabilidad en calidad (SNR) nos permite ver la secuencia de
vídeo a distinta calidad de imagen pero mantenimiento la misma
resolución espacial y temporal (véase la Figura
\ref{fig:escalabilidad_SNR}).

\item Temporal (Temporal scalability). La escalabilidad temporal nos permite ver la secuencia de vídeo a
distinta resolución temporal, es decir, a un número distinto de
imágenes por segundo, mantenimiento la misma resolución espacial y calidad SNR.
\end{itemize}

Particularizando en el estándar MPEG, nos apoyaremos en el concepto de
layer o capa. Esta técnica se basa en la idea de comprimir la
información del vídeo a distintas calidades, formando la capa base
(base layer) y la/s capas de refinamiento (enhancement layers). Para
que las capas de refinamiento mejoren la calidad del vídeo es necesario
complementarla con la información de la capa base. 

Por ejemplo, en MPEG, para conseguir escalabilidad espacial, la capa
base se codifica con la menor resolución mientras que las capas de
refinamiento se codifican con resoluciones superiores. Para la
escalabilidad en calidad, en la capa base se codifican toscamente los
coeficientes de la transformada. En las capas de refinamiento se
almacenan los coeficientes que tienen información sobre los detalles,
utilizados para mejorar la calidad de imagen. Y para la escalabilidad
temporal, la capa base nos ofrece la resolución temporal más baja
mientras que con la capa de refinamiento obtenemos la más alta.

\begin{figure}[ht]
\centering
\fbox{\epsfig{file=figuras/eps/escalabilidad_espacial,width=0.7\textwidth }}
\caption[Ejemplo de escalabilidad espacial]
{Un ejemplo de escalabilidad espacial.}
\label{fig:escalabilidad_espacial}
\end{figure}


\begin{figure}[ht]
\centering
\fbox{\epsfig{file=figuras/eps/escalabilidad_SNR, width=0.7\textwidth}}
\caption[Ejemplo de escalabilidad SNR]
{Un ejemplo de escalabilidad SNR.}
\label{fig:escalabilidad_SNR}
\end{figure}

\section{Motivación del proyecto}


En los últimos años, los avances en comunicaciones han permitido que
la mayoría de usuarios tengamos acceso a Internet. La velocidad de
transmisión/recepción cada vez es más rápida, pero todavía no es lo
suficiente para poder disfrutar de una forma óptima de ciertos
servicios como pueden ser videoconferencia, vídeo bajo demanda, etc.

Otro inconveniente añadido, es que en Internet el ancho de banda de
que se dispone, en general, varía a lo largo del tiempo, por lo que no se
puede garantizar la disposición de un valor determinado de ancho de
banda en un instante dado. Por otra parte, para la transmisión de
vídeo es necesario disponer del mayor ancho de banda disponible en
cada momento para que su visualización sea a la mayor calidad
posible. Si no somos capaces de aprovechar al máximo el canal de
comunicación, estaremos infrautilizando los recursos de que
disponemos.

El estándar MPEG consigue escalabilidad mediante
capas\footnote{Escalabilidad de grano grueso.} según comentamos en el
apartado anterior. La escalabilidad por capas tiene el problema de que
bajo ciertas condiciones no aprovecha el canal de forma óptima.

Mostraremos un supuesto donde se ponga de manifiesto este
problema: supongamos que disponemos de un canal de comunicación que
nos permita transmitir a 128 kbps de forma constante. Disponemos
también de un compresor MPEG escalable en calidad, que al comprimir
genera tres capas, una capa base comprimida a 32 kbps y dos capas de
mejora comprimidas cada una a 64 kbps. Este sistema podría transmitir
la capa base y la primera capa de mejora, necesitando una velocidad de
transmisión de 96 kbps. La segunda capa de mejora no se puede
transmitir ya que no se dispone de ancho de banda suficiente, por lo
tanto se está desaprovechando un 25\% del canal de transmisión.

Debido a los problemas propios de Internet y de los estándares
existentes comentados anteriormente, el principal objetivo del
proyecto es desarrollar un sistema escalable que nos permita
aprovechar el canal de comunicación de una forma óptima.

El algoritmo desarrollado en este proyecto permite una escalabilidad a
nivel de bits\footnote{Escalabilidad de grano fino.} con un
bit-stream seccionable en cualquier momento de la transmisión, con lo
que se aprovecha el canal de transmisión de forma completa y adaptativa.
