Subido por MARCONIA Filmaking

05 - Capà tulo 2 - Técnicas de compresión de la señal de video.pdf 2

Anuncio
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
Descargar