COMPRESIÓN de DATOS Teoría a de la Información curso 2005 Objetivo de la compresión Principales funciones A qué datos se puede aplicar? Tipos de compresión Modelos Métodos sin pérdida (lossless compression) Técnicas con pérdida más difundidas Evaluación de similitud Temario
Objetivo: Reducir la cantidad de datos necesarios para representar la información deseada Principales funciones : Incrementar la capacidad de almacenamiento de los dispositivos Aumentar el ancho de banda de los vínculos digitales de comunicación Brindar adicionalmente encriptación de datos Datos originales Compresor Descompr. canal de comunicación disp. almacenamiento Datos decodificados Tipos de datos comprimidos Texto en lenguaje natural Código fuente y código objeto Imágenes (B/W, en escala de grises, color) datos numéricos gráficos datos geográficos mapas de terrenos sonido música datos binarios (Fax, etc.) video digital animaciones HDTV (High Definition TV) etc. 2
Tipos de Compresión Algoritmos sin pérdida (lossless - noiseless compression) Los datos obtenidos luego del proceso de compresióndescompresión son idénticos a los originales no hay distorsión de los datos La longitud media del código no puede ser menor que la Entropía Tasas de compresión: 2: (texto) a 4: (imágenes) Algoritmos con pérdida (lossy compression) Es posible desechar algunos datos no relevantes, para reducir aún más el tamaño de los datos hay cierta distorsión de la información La Entropía ya no se considera cota inferior de la longitud media Tasas de compresión: 4: a 32: (imág.fijas) o mucho más (video, etc.) Modelo de probabilidades Estático (+) requiere una sola pasada sobre los datos (+) no se debe transmitir / almacenar la distribución ( -) la distribución usada puede diferir de los datos reales Semi-estático (+) la codificación se adapta a la distribución de los datos ( -) requiere dos pasadas ( -) se debe transmitir / almacenar la distribución Dinámico (+) requiere una sola pasada (+) la codificación se va adaptando a la distribución real ( -) algoritmo y estructuras de datos más complejas 3
Modelo - Codificador Mensaje original símbolo probab. código MODELO Codificador Mensaje codificado símbolo Esquema dinámico o adaptativo: puede usar estadística de orden 0, ó más puede ser estático, semi-estático o dinámico Mensaje original Leer símbolo de entrada Codificar Mensaje codificado Modelo Actualizar modelo Técnicas de Compresión sin pérdida con pérdida Shannon, Fano Huffman (estático-semiest.) Huffman Dinámico (FGK) Codificación Aritmética Algoritmos Lempel - Ziv Run - Lenght Run- Lenght con pérdida JPEG (standard) VQ (Cuantificación Vectorial) Codificación Fractal DPCM (codif. diferencial) MPEG (audio/video) 4
Algoritmos sin pérdida (LOOSLESS) Métodos de compresión estadísticos (codifican un símbolo de la fuente por vez) Esquemas basados en diccionario (codifican cadenas de símbolos de la fuente) Algoritmo de Huffman P(A) = 0.4 P(B) = 0.3 P(C) = 0.2 P(D) = 0. P(A) = 0.4 P(B) = 0.3 P(C,D) = 0.3 P(B,C,D) = 0.6 P(A) = 0.4 P(A,B,C,D) = 0 B 0 A 0 C D Árbol de codificación de Huffman Se puede utilizar un modelo estático o semi-estático 5
Huffman Dinámico FGK () (Faller, Gallager, Knuth) Cada nodo tiene asociado un peso (frecuencia) Ante cada codificación se verifica la Propiedad de Sibling: si los nodos se listan en orden de peso menor a mayor, de abajo hacia arriba y de izquierda a derecha, todos los nodos deben aparecen adyacentes a su hermano en la lista Ejemplo: Árbol Lista Ø Ø º) codificar 2º) actualizar el árbol In: a 0 Ø,a Ø a Out: a In: b 2 0 0 Ø,b Ø b a Out: 0 b 2,a Huffman Dinámico FGK (2) In: b Out: 0 2 0 3 0 Ø 2,b,a Se intercambian los nodos en conflicto : 3 0 2,b 0 Ø,a Ø 2 b 2 a 3 No cumple la propiedad de sibling Ø a 2 b 3 El decodificador funciona de manera similar (algoritmo simétrico) 6
Mensaje número en el intervalo [0,) Ejemplo: mensaje b a a c Codificación Aritmética () 0.2 0.4 0.4 a b c 0 0,2 0,6 a b c 0,2 0,28 0,44 0,6 a b c 0,2 0,26 0,248 0,28 a b c 0,2 0,2032 0,2096 Codificación del mensaje: cualquier número en el rango [0,2096, 0,26) 0,26 Rango = lim.superior lim.inferior Nuevo lim.inferior (simb)= lim.inferior + rango * prob.acum. inferior (simb.) Nuevo lim.superior (simb)= lim.inferior + rango * prob.acum. superior (simb.) Problemas: Codificación Aritmética (2) La operación de contracción del intervalo requiere alta precisión No se puede enviar el mensaje hasta completar la codificación Dificultad del decodificador para determinar el fin del mensaje Soluciones de implementación: Se usa aritmética entera en lugar de punto flotante Se aplica transmisión incremental (cuando los límites comienzan a tener dígitos en común) Fin del mensaje: se utiliza un símbolo especial de EOF (con prob.<< o se indica, previo al mensaje, la longitud (en esq. semi-estáticos) El decodificador funciona de manera similar (algoritmo simétrico) Se puede aplicar también sobre modelos dinámicos 7
Algoritmos LZ (Lempel-Ziv) Codificación de Diccionario cadenas de elementos de longitud variable Código: puntero a una cadena coincidente ya procesada Ventana finita (LZ77) o infinita (LZ78) Existe una gran cantidad de variantes de cada uno (LZ77: LZSS, LZB, LZH, - LZ78: LZW, LZC, LZT, LZMW, LZJ, LZFG) a b b a c c a b b a a b... El compresor es más lento (costo de búsqueda del mejor matching) que el descompresor (sólo debe recuperar la cadena dada por el puntero) => algoritmo asimétrico Los compresores compress, arc, pkzip, arj, GIF se basan en LZ Utiliza ventana finita o corrediza N Puntero: < i, j, a > LZ 77 N F (ya procesados) F (a procesar) Inicio de la cadena longitud primer símbolo diferente Se busca el matching más largo en la ventana de símbolos procesados Ejemplo: a b a ba c a b b c a <0,0,a> <0,0,b> <2,,c> <4,3,EOF> 8
LZW Es una variante de LZ78, publicada por Welch (984) LZ78 () Elimina el símbolo al final del puntero pasa a integrar la frase siguiente Comienza con el diccionario pre-cargado con los símbolos individuales Cada vez que se codifica se agrega una nueva frase al diccionario Ejemplo: a b a c a b a c a codific. salida agrega a 2 b pre-cargadas 3 c a 4 a b b 2 5 b a a 6 a c c 3 7 c a a b 4 8 a b a a c 6 9 a c a a LZ78 (2) La descompresión requiere: Leer nro.frase y decodificarla, buscando la cadena de símbolos asociada Agregar nueva frase al diccionario (última cadena decodif.+ º símb. cadena actual) Ejemplo: 2 3 4 6 entrada salida agrega a 2 b 3 c a 2 b 4 a b a 5 b a 3 c 6 a c 4 a b 7 c a 6 a c 8 a b a pre-cargadas a 9 a c a Problema de LZ: llenado del diccionario Enfoques de solución vaciado y re-inicio / comportamiento estático 9
Run Lenght Coding (RLC) Codificación: secuencia de pares (símbolo, longitud) longitud = cantidad de valores iguales a símbolo consecutivos Especialmente usado para imágenes Ejemplo: c c c c c2 c2 c c c c3 (c, 4) (c2,2) (c,3) (c3, ) Conviene fijar una longitud mínima de corrida y utilizar un bit de flag para indicar si sigue un par codificado () o un símbolo original (0) Imágenes B/W: secuencia de cantidad de blancos y negros alternados (inicia el 0 por convención) Ejemplos: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 5 0 2 4 3 2 Algoritmos con pérdida (LOOSY) 0
Run-Lenght con pérdida Codificación: ( valor, longitud ) valor es la intensidad del primer pixel de la secuencia se considera un factor de toleracia (calidad de la imagen) secuencia de símbolos: tono - tol valor tono + tol Ejemplo: 0 0 2 8 8 9 54 54 55 56 50 50 20 23 2 9 20 (0, 6) ( 54, 6 ) ( 20, 5 ) tolerancia = 5 JPEG (Joint Photographic Experts Group) Standard JPEG - compresión Imagen Original DCT Cuantización Codificación de Entropía Imagen Comprimida Transformada discreta del coseno (DCT) : DCT( i, j) = Cuantización : c( i) c( j) 2 N N N x= 0 y= 0 ValorCuantizado ( i, j ) = (2x + ) i π (2y + ) i π ( pixel ( x, y) cos cos ) 2 N 2 N DCT ( i, j ) Quantum ( i, j ) C( x) = 2 Codificación de Entropía : Según factor de calidad codificación Huffman o aritmética y RLC para secuencias de ceros si x si x = 0 0
Standard JPEG - descompresión La decodificación consiste en el proceso inverso (algoritmo simétrico) Imagen Comprimida Decodif. de Entropía Decuantización DCT inversa Imagen Reconstruida Decodificación de Entropía : decodificación Huffman o aritmética y RLC Decuantización : Valor DCT ( i, j ) = Valor cuantif.( i, j ) * Quantum ( i, j ) Anti-transformada : pixel( x, y) = 2 N N N (2x + ) i π (2y + ) i π c( i) c( j) DCT ( x, y) cos cos N i= 0 j= 0 2 N 2 Standard JPEG - ejemplos Imagen original Imágenes descomprimidas factor 5 (0:) factor 5 (6:) factor 25 (20:) 2
Cuantificación Vectorial (VQ) Se codifican bloques de n x n pixeles (vectores) como un índice a una tabla de vectores representativos (codebook) Formar el codebook: selección inicial de vectores representativos de la imagen fase de optimización (LBG) comprimir la imagen: codebook + conjunto de índices que representan cada uno de los bloques de la imagen Imagen Original Codebook Inicial Establecer Particiones (codificación) Algoritmo LBG Calcular distorsión Є Obtener centroide Є < Umbral no si Imagen Comprimida Cuantificación Vectorial (VQ) Decodificación: leer codebook por cada índice del archivo codificado Acceder al índice en el codebook Recuperar el vector correspondiente => Procesos asimétricos factor 2: factor 30: 3
Compresión Fractal () Fractal: imagen con propiedades de autosimilitud Helecho de Barnsley Pueden ser generados por funciones matemáticas o a partir de un conjunto de transformaciones afines (rotaciones, cambios de escala, desplazamientos) copo de nieve de Koch Set de Mandelbrot Compresión Fractal (2) Problema : resolver el proceso inverso (dada una imagen encontrar el conjunto de transformaciones que la describen) Propuesta de Barnsley Teorema del Collage: establecer particiones de la imagen y determinar auto-similitudes (semi-automático) Propuesta de Fisher correspondencia entre bloques rangos y dominios considerando transformaciones afines (automático) Dominios w Rangos w2 w 3 w 4 transformaciones afines (+) las tasas de compresión pueden ser muy altas ( -) la búsqueda de transformaciones convenientes es muy costosa 4
Descompresión Fractal Es un proceso iterativo mucho más veloz que la compresión (=> procesos asimétricos) Se aplica a partir de cualquier imagen inicial La imagen generada por la aplicación de las transformaciones es imagen inicial de la siguiente iteración Iteración 0 Iteración Iteración 2 Iteración 3. Iteración 0 Compresión de sonido Compresión sin pérdida: 80 60 40 LZSS + Huffman Codificación diferencial Se codifica cada valor como la diferencia con respecto a la muestra anterior 20 0-20 -40-60 -80 Compresión con pérdida: Codificación de silencios valores de silencio = cero ± tolerancia se codifican como corrida de nulos (RLC) 5
Compresión de audio-video MPEG (Moving Picture Experts Group ) Standard para compresión de audio e imágenes en movimiento. Logra tasas de compresión de hasta 200:, casi a cualquier nivel de calidad Video: explota 3 tipos de redundancias: -Espacial - Temporal - Psicovisual Codificación intra-frame (imágenes I) con JPEG + codific. inter-frame (imágenes P y B) con predicción de movimiento Parámetros de evaluación Relación de compresión (Tam.Original vs. Tam.Comprimido) Tiempo de compresión Tiempo de descompresión Error entre valores originales y reconstruidos - Error Cuadrático Medio (RMS) e RMS = m n N. M x= 0 y= 0 - Error Absoluto promedio [ f '( x, y) f ( x, y) ] 2 e abs = N. M m n x= 0 y= 0 f ( x, y) f ( x, y) Imagen de error 6
Bibliografía R.Gonzalez, R.Woods, Digital Images Processing, Addisson - Wesley, 992 M.Nelson, The Data Compression Book, M&T Publishing, 992 T. Bell, J.Cleary, I. Witten, Text Compression, Prentice - Hall, 990 R.Clarke, Digital Compression of Still Images and Video, Academic Press, 995 G.Wallace, "The JPEG Still Picture Compression Standard", Commun. ACM, Vol.34, pp. 3-44, Apr. 99 D. Gall, "MPEG: A video compression standard for multimedia applications, Commun. ACM, Vol. 34, pp. 46--58, Apr. 99 7