Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 2 TÉCNICAS DE COMPRESIÓN DE LA SEÑAL DE VÍDEO La compresión es el proceso de compactar los datos en un menor número de bits. En el caso de la compresión de vídeo hemos dicho que necesitamos disminuir la tasa necesaria (unos 216 Mbps) para poder almacenar y transmitir este tipo de información. 2.1 Sistemas de compresión Un sistema de compresión de información suele estar formado por dos etapas que se ilustran en la figura 2.1. La transformación de los datos es un procedimiento genérico que se utiliza para representar la información en una forma alternativa y en la que, en principio, resulta más evidente la redundancia existente en los datos originales. Es necesario que esta transformación sea invertible, es decir, que a partir de los datos transformados podamos recuperar de forma lo más exacta posible la información original. Figura 2.1 Proceso general de codificación y decodificación de la información Consideremos como ejemplo la aplicación de una transformada de Fourier a las señales que representan la información de un fragmento de audio. Es posible que resulte más eficiente codificar los datos resultantes de esta transformación que los datos originales. En efecto, en el dominio transformado de Fourier es más simple identificar las regiones espectrales que tienen una energía por debajo del umbral de audición, o analizar las bandas que resultarán enmascaradas por otras señales y que por lo tanto no serían audibles. Si este análisis de la señal es factible, no tendrá sentido codificar toda aquella información que el sistema auditivo humano es incapaz de escuchar y resulta más rentable dedicar los bits a las zonas audibles. El resultado final es que en este dominio transformado podemos codificar la información de forma más eficaz. No obstante, 15 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 debemos recordar que al final de la cadena de codificación / decodificación, deben presentarse los datos en el mismo formato de entrada para que puedan ser correctamente interpretados por el sistema auditivo. Esto significa que deberemos aplicar la transformación inversa sobre los datos codificados para devolverlos a su dominio de representación original. En general, la compresión puede ser con pérdidas (lossy) o sin pérdidas (lossless) en función de si la información que se recupera coincide exactamente con la original o es sólo una aproximación. Los métodos de codificación sin pérdidas se utilizan sobre todo en aplicaciones de codificación de datos binarios de aplicaciones informáticas en los que es absolutamente necesario recuperar la información original. Los formatos más populares son el zip y el arj. En tratamiento de imágenes los métodos de compresión sin pérdidas encuentran su aplicación en la codificación de imágenes médicas o científicas en las que puede resultar crítico la pérdida de parte de la información. El formato JPEG dispone de una versión de codificación sin pérdidas que suele emplearse en estas aplicaciones. La compresión con pérdidas es la más habitual en la codificación de señales de vídeo y audio. Evidentemente, las pérdidas son tolerables siempre que la calidad de las señales decodificadas sean aceptables. El principio general sobre el que se sustenta la codificación con pérdidas es que no resulta necesario codificar aquellas componentes de la información que no son observables por los sistemas de percepción humana. Por lo tanto, estos métodos se fundamentan en las características psicofisiológicas de los sistemas auditivo y visual, que son, en última instancia, los que deben evaluar la calidad del algoritmo de compresión. Por ello, es fundamental comprender las limitaciones y características de estos sistemas de percepción para diseñar codificadores en los que las pérdidas de información resulten poco evidentes o incluso inapreciables. La principal ventaja de estas estrategias de codificación es que consiguen unos factores de compresión muy superiores a los que se obtienen con los métodos sin pérdidas. Además, suelen ser métodos escalables con la aplicación, es decir, el grado de pérdida de calidad que se tolera depende del ámbito al que se destine el codificador. Así, la calidad que se exige en una aplicación de vídeo en directo para Internet es muy inferior a la que se exige para la radiodifusión de televisión. Análogamente, un codificador de vídeo para aplicaciones multimedia (MPEG-1) deberá realizar una compresión mucho mayor que un codificador para aplicaciones de televisión (MPEG-2), ya que las tasas de transferencia 16 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 de bits que admite un CDROM son mucho menores que las que admiten los canales de televisión. 2.2 Técnicas de compresión de imágenes La compresión de imágenes y de secuencias de vídeo se basa en la eliminación de tres tipos de redundancias: • Redundancia Espacial: Se basa en los píxeles que están cerca unos de otros, ya que estos tienen un parecido muy grande entre ellos. Para eliminar esta redundancia se usan métodos transformados, como por ejemplo la (DCT, Discret Cosinus Transform) y la cuantificación. Estas técnicas serán conocidas como codificación Intratrama. • Redundancia Estadística: Consiste en determinar que valores de bit se repiten más en una secuencia. Utilizaremos métodos como el VLC (Variable Length Code) y el RLC (Run Length Code) para poder eliminar esta redundancia. • Redundancia Temporal: Pretende aprovechar el hecho de que un píxel se repita a lo largo del tiempo. Para poder eliminar este tipo de redundancia se utilizaran técnicas predictivas para poder deducir la posición futura de los píxeles. En concreto utilizaremos una predicción Intertrama con la técnica de compensación de movimiento, basada en obtener la imagen de predicción a partir de vectores de movimiento de imágenes pasadas y/o futuras. Esta eliminación de redundancia es la que nos comprimirá más el video. En este apartado sólo se expondrán los aspectos generales de los métodos más utilizados en algoritmos de compresión de vídeo. Normalmente, cualquiera de las técnicas empleadas están basadas en bloques, que en el caso genérico serán de tamaño NxM, aunque en la mayoría de los casos se toman bloque cuadrados, NxN. En el siguiente capítulo se detallarán estas técnicas para el caso de MPEG-2. 2.2.1 Redundancia espacial Como hemos dicho se usan dos métodos para eliminar este tipo de redundancia, además del ya conocido submuestreo de las componentes de color, que también se puede considerar como eliminación de este tipo de redundancia. En este apartado se presentará 17 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 la transformada coseno discreta. El método de cuantificación será explicado para el caso particular del codificador MPEG más adelante. Transformada coseno discreta (DCT) La codificación de imagen utilizando algún tipo de transformadas es bastante popular y se extiende a otras transformaciones como Fourier, Walsh-Hadamard, Hart, KarhunenLoeve, Wavelet, etc. Estos procedimientos de codificación se conocen con el nombre genérico de métodos transformados. Este método de codificación se basa en el esquema de la figura 2.2. La imagen a comprimir se divide en bloques o subimágenes de tamaño reducido sobre las que se aplica la transformación. El resultado de la transformada de cada bloque se cuantifica y posteriormente se aplican códigos eficientes para transmitir o almacenar esta información. La compresión de imagen se produce principalmente durante el proceso de cuantificación, donde parte de la información se descarta o se cuantifica con un número de niveles muy reducido. Veremos que la información de cada subimagen puede quedar muy bien empaquetada en unos pocos coeficientes transformados, de modo que resulta suficiente con determinar qué coeficientes son los más representativos y codificar la imagen utilizando únicamente estos elementos. Evidentemente, también existe alguna ganancia de compresión debido a la codificación de los coeficientes mediante algoritmos eficientes, aunque en ningún modo es tan significativa como la debida a la parte de cuantificación. Figura 2.2 Proceso general de codificación y descodificación de imágenes mediante la transformada coseno 18 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 La decodificación de la imagen se realiza aplicando el proceso inverso: los coeficientes se descodifican y se aplica la transformada inversa, de manera que se recuperan los elementos de imagen en el dominio espacial original. Posteriormente, es necesario recomponer la imagen a partir de los bloques en los que se ha divido originalmente. Esta recomposición de la imagen suele ser uno de los principales problemas de los métodos transformados. En efecto, debido a la cuantificación de los coeficientes transformados, la subimagen se recupera con cierto error respecto a la original. Este error es muy crítico si se produce en los límites de las subimágenes, debido a que al fusionar todos los bloques aparecerán cambios de nivel de gris bruscos que pueden reproducir la descomposición en bloques cuando se observa la imagen descomprimida. El problema es particularmente notorio con algunas transformadas como la de Fourier o Walsh-Hadamard. La transformada coseno presenta excelentes propiedades en la codificación de los contornos de las subimágenes que, de hecho, ha sido uno de los motivos principales por los que se ha elegido esta transformada en casi todos los estándares de codificación. Otro de los aspectos cruciales en la codificación por métodos transformados es la elección del tamaño de las subimágenes. En principio es aconsejable elegir los tamaños de los bloques para que exista cierto grado de correlación entre bloques adyacentes. Otra restricción importante es que los tamaños de las subimágenes deberían ser una potencia de 2 para facilitar el uso de algoritmos rápidos en la implementación de la transformación. El factor de compresión que puede obtenerse aumenta a medida que se utilizan bloques más grandes, aunque también se incrementa la carga computacional. En la mayoría de aplicaciones pensadas para una resolución espacial similar a la de los sistemas de televisión, los bloques son de tamaño 8x8 o 16x16. Antes de introducirnos en los detalles de la transformada coseno analizaremos sus características principales, que justifican su amplio uso en codificación de imagen y que, posteriormente, nos ayudarán a comprender algunas de sus particularidades. • Capacidad de compactación de la energía en el dominio transformado. La transformada coseno discreto (DCT- Discrete Cosine Transform) consigue concentrar la mayor parte de la información en unos pocos coeficientes transformados. Esto permite obtener importantes ventajas para una codificación eficiente de la imagen, puesto que basta con codificar de forma precisa estos coeficientes principales para obtener una buena representación de todo el bloque de la imagen. Debe tenerse en cuenta que la capacidad de compactación de la energía en unos pocos coeficientes es un parámetro puramente estadístico, lo 19 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 que significa que siempre es posible encontrar un bloque de imagen en la que la energía en el dominio transformado esté dispersada entre todos los coeficientes. No obstante, esto tiene una probabilidad de ocurrencia muy baja y no suele producirse nunca si trabajamos con imágenes naturales. La capacidad de compactación de la energía de la DCT es muy superior a la que se obtiene con las transformadas de Walsh- Hadamard, Hart y también Fourier. La transformada Karhunen-Loeve consigue una compactación óptima, aunque al precio de un elevado coste computacional. La transformada Wavelet también consigue concentrar la energía en unos pocos coeficientes, aunque en este caso, la posición de los coeficientes con mayor energía depende de la imagen. • Es una transformada independiente de los datos. Esto significa que el algoritmo es independiente del contenido de la imagen. Prácticamente todas las transformadas que hemos venido comentando son independientes de los datos, con la excepción de la Karhunen-Loeve, donde las matrices asociadas a la transformación deben calcularse en función de las características de la propia imagen. Por este motivo, la transformada de Karhunen Loeve es óptima en el sentido de compactación de energía. • Existen algoritmos eficientes para el cálculo rápido. Existen algoritmos análogos al de la FFT (Fast Fourier Transform) para realizar la transformación. Los algoritmos se encuentran disponibles en circuitos integrados especializados en realizar esta transformación. La restricción para poder utilizar estos algoritmos es que los bloques tengan un tamaño que sea múltiplo de una potencia de dos. Si no es así, deberán añadirse ceros a las subimágenes, aunque esto supone que aumenta notablemente el riesgo de que aparezca el efecto de bloques al decodificar la imagen. • Errores reducidos en los contornos de los bloques. Probablemente éste es uno de los motivos principales por los que se ha elegido la DCT frente a otras transformadas. La presencia de errores de codificación muy pequeños en los límites de la subimagen es necesaria para evitar la aparición del efecto de bloques en la imagen reconstruida. • Identificación e interpretación frecuencial de los componentes transformados. Para aprovechar al máximo la capacidad de compresión de un método es conveniente que los coeficientes puedan interpretarse desde el punto 20 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 de vista frecuencial con facilidad. Esto permite introducir conceptos psico-visuales, permitiendo dedicar un menor número de bits a aquellas componentes que de antemano sabemos que no resultan críticas para el sistema visual. La ecuación que se utiliza para la transformada NxN bidimensional (se suponen bloques cuadrados) es: N −1 N −1 2 ⎡ (2 x + 1) uπ ⎤ ⎡ (2 y + 1) vπ ⎤ cos ⎢ F(u, v ) = C(u )C(v )∑∑ f (x, y )cos ⎢ ⎥ N ⎣ 2N ⎦ ⎣ 2 N ⎥⎦ x =0 y =0 con u, v, x, y =0, 1, 2, … N-1 donde x, y son coordenadas espaciales en el dominio espacial u, v son coordenadas en el dominio transformado C (u ),C (v ) = 1 para u,v = 0 2 C (u ), C (v ) = 1 para u, v = 1,2,…,N-1 Ecuación 2.1 Transformada discreta del coseno 2D En general sólo trataremos con bloques cuadrados cuyos tamaños son, como hemos comentado, una potencia de 2. De forma análoga, la ecuación para la transformada inversa es: f ( x, y ) = 2 N ⎡ (2 x + 1)uπ ⎤ ⎡ (2 y + 1)vπ ⎤ cos ⎢ ⎥ ⎥⎦ 2N ⎦ ⎣ 2N N −1 N −1 ∑∑ C (u )C (v )F (u, v )cos⎢⎣ u =0 v =0 Ecuación 2.2 Transformada inversa discreta del coseno 2D 21 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 Vemos un ejemplo numérico de esta transformada en la figura 2.3. 120 108 90 75 69 73 82 89 127 115 97 81 75 79 88 95 134 122 105 89 83 87 96 103 137 125 107 92 86 90 99 106 131 119 101 86 80 83 93 100 117 105 87 72 65 69 78 85 100 88 70 55 49 53 62 69 89 77 59 44 38 42 51 58 100 0 0 0 0 0 DCT 700 90 90 0 0 0 0 0 0 0 -90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 Figura 2.3 Ejemplo numérico y gráfico de la transformada discreta del coseno Tal y como se dijo anteriormente, la DCT consigue concentrar la mayor parte de la información en unos pocos coeficientes transformados. Además, podemos ver cómo estos coeficientes distintos de cero se encuentran situados en las frecuencias bajas. 22 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 2.2.2 Redundancia estadística Códigos de longitud variable (VLC) La idea básica de los códigos de longitud variable es asignar palabras código de longitudes distintas en función de la probabilidad de los mensajes. Los mensajes más probables se codificarán con un menor número de bits que los mensajes menos probables. Para que los códigos de longitud variable resulten eficaces es necesario disponer de procedimientos sistemáticos para generar estos códigos directamente a partir de las características de las fuentes. Además, es fundamental que los códigos obtenidos resulten eficientes, es decir, que permitan obtener una tasa media de bits próxima a la entropía de la fuente. Entre estos códigos podemos destacar los códigos de Huffman y sus variantes. Codificación por longitud de series (RLC) Esta codificación comenzó a utilizarse a mediados de la década de los 50 para la codificación de documentos digitalizados. Para documentos de texto o gráficos binarios, que únicamente contienen los niveles blanco y negro, podemos codificar cada línea indicando, de forma alternada, cuantos píxeles toman el nivel blanco y cuantos el nivel negro en palabras sucesivas. Para ello, es necesario establecer que siempre empezamos por uno de los niveles. A este procedimiento básico, podemos añadir un código de Huffman que tenga en cuenta la estadística con la que se producen los mensajes que indican la longitud de las series de blancos y negros. Aquellas longitudes que se producen con mayor frecuencia serán codificadas con palabras de menos longitud. La idea básica del RLC puede extenderse a fuentes con varios mensajes o símbolos, pero en las que predomine uno de los mensajes con gran probabilidad. En el caso del proceso de codificación de imágenes, muchos de los coeficientes de la transformada coseno obtenidos, una vez cuantificados, toman el valor nulo, por lo que resulta más eficiente especificar la cantidad de coeficientes consecutivos que toman este valor. 23 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 2.2.3 Redundancia temporal La redundancia temporal se basa en que dentro de una secuencia de vídeo, los cambios producidos entre imágenes son mínimos, ya que gran parte de los objetos y elementos permanecen en la misma posición y con las mismas características de un fotograma a otro. Un área de la imagen actual proviene por lo general de un área cercana de la imagen anterior, por lo que podemos emplear la información anterior y fijarnos en las diferencias. Normalmente los métodos para eliminar la redundancia temporal se realizan en secciones rectangulares o bloques. En la figura 2.4 se muestran dos fotogramas seguidos, las diferencias entre ellos a simple vista son inapreciables, pero si representamos la imagen diferencia podemos ver que efectivamente ha habido cambios. En esta imagen un nivel medio de gris representa una diferencia nula y los niveles más claros o más oscuros de gris serán diferencias positivas o negativas, respectivamente. La mayor parte de los elementos no se han modificado pero en los contornos si ha habido modificaciones. Esto puede ser debido o bien al movimiento de la cámara, o al movimiento de los objetos. Figura 2.4 Ejemplo de dos fotogramas seguidos y su diferencia Esta técnica es ampliamente utilizada en los codecs para la producción de vídeo en soporte informático. El procedimiento general suele conocerse con el nombre de codificación de fotogramas en diferencias. Normalmente, la secuencia de vídeo suele descomponerse en fotogramas clave (key frame) y fotogramas diferencia (delta frames). Los fotogramas claves deberán codificarse de forma independiente del resto de fotogramas, teniendo en cuenta únicamente la redundancia espacial de la imagen. Periódicamente se insertará un fotograma clave en la secuencia codificada para evitar la propagación de errores de codificación en las imágenes delta. Esta técnica, aunque se utiliza a menudo, no es óptima cuando se producen desplazamientos de los objetos dentro de la imagen o aparecen nuevos motivos debido al 24 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 movimiento de la cámara u otros aspectos. En la figura 2.5 mostramos un movimiento de la cámara en una imagen simplificada. Imagen a codificar Redundancia temporal Imagen de referencia Figura 2.5 Ejemplo de bloques utilizados para realizar la predicción en codificación diferencial La figura muestra cuál sería la sección de la imagen utilizada para predecir el bloque de interés. En este caso la ganancia del codificador es nula debido a que el error de predicción es precisamente igual a la imagen. Técnicas de compensación de movimiento La compensación de movimiento es una técnica de predicción temporal que intenta optimizar los resultados obtenidos por la codificación diferencial analizando el movimiento que realizan los objetos dentro de la imagen y compensándolos. Siguiendo con el ejemplo de figura anterior, en el caso de compensación de movimiento, el bloque que utilizaríamos para la predicción es el mostrado en la figura 2.6. Ahora, el error de predicción puede llegar a ser nulo, por lo que no es necesario volver a codificar el bloque, simplemente habría que transmitir el vector de desplazamiento que hay que utilizar en la imagen de referencia para construir este fragmento de la imagen. 25 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 Imagen a codificar Redundancia temporal Imagen de referencia Figura 2.6 Ejemplo del bloque utilizado para la predicción en una codificación por compensación de movimiento Como es de esperar, los vídeos reales no son tan simples como el ejemplo que hemos puesto. Los objetos pueden sufrir deformaciones, cambios de perspectiva o de tamaño o trasladarse en el espacio mediante rotaciones. Todos estos efectos no se pueden modelar mediante vectores de traslación. Por esta razón, para codificar las secuencias de vídeo de forma óptima, el procesador deberá ser capaz de identificar las regiones de la imagen con nuevos componentes y codificarlos basándose en la redundancia espacial, y los elementos que se parezcan a imágenes pasadas o futuras, con la técnica de compensación de movimiento. Podemos resumir el proceso de codificar un bloque mediante esta técnica en los siguientes pasos: 1. Buscar un área o bloque de la imagen de referencia (pasada o futura, la única condición es que haya sido codificada y transmitida previamente) que sea óptima para realizar la predicción del bloque actual. Para realizar esto, se compara el bloque de la trama actual con alguno o todos de los posibles bloques de la trama referencia. Este proceso se conoce como estimación de movimiento. 26 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 2. La zona elegida se convierte en el predictor para el bloque actual y lo que se hace es restar al bloque actual el predictor. Así, tenemos un bloque residual. Este proceso es la compensación de movimiento. 3. El bloque residual se codifica y transmite junto con la diferencia de posición entre los bloques actuales y de referencia. Esta diferencia son los llamados vectores de movimiento (componente de desplazamiento vertical y horizontal). Figura 2.7 Cálculo del vector de movimiento para la compensación de movimiento Cuando queramos decodificar esta información se parte de que el decodificador ya ha decodificado la imagen de referencia. Entonces, lo que hay que hacer para recuperar la información del bloque es desplazar el bloque referencia con el vector de movimiento y añadir el bloque diferencial. La señal de error (bloque residual) puede ser transmitida tal cual o usando métodos transformados como se hacía para eliminar la redundancia espacial. También se podrá emplear códigos de longitud variable para el error y los vectores de movimiento. Hemos dicho que las imágenes referencia puede ser tanto pasadas como futuras. A esto se le conoce como compensación de movimiento bidireccional. La idea básica consiste en codificar una imagen utilizando no sólo las imágenes de referencia del pasado, sino también las futuras. En principio esto da una solución no causal, pero lo que se hace es modificar el orden de codificación y transmisión de las imágenes, que no será el orden en que se representen en un display. En este caso, el procesador deberá calcular dos vectores de movimiento que se denominan hacia delante (forward) y hacia atrás (backward). A partir de estos dos vectores el codificador elegirá entre codificar el error de predicción forward (imagen 27 Técnicas generales de compresión de la señal de vídeo Decodificador vídeo MPEG-2 futura), backward (imagen pasada), bidireccional (ambas imágenes) o codificar el bloque sin predicción (error demasiado grande). 28