Compresión de imágenes Tipos de imágenes Desde el punto de vista de la compresión Binarias: Blanco y negro. Escala de grises, color y estacionarias de vídeo.
Imágenes binarias Presentes en documentos que no contienen información continua del tono o en imágenes que pueden ser capturadas en blanco y negro. Ejemplos: Documentos de oficina, manuscritos, dibujos de ingeniería y arquitectura. Cuando no están comprimidas hay un bit por píxel: para un píxel negro y un píxel blanco. Redundancia en imágenes binarias Bastantes estudios muestran que las imágenes binarias son estadísticas por naturaleza ya que consisten de espacios en blanco y zonas formadas por píxeles negros: texto, líneas, áreas rellenas. Esto hace que exista bastante redundancia en términos de información. La compresión de imágenes reduce la redundancia de los datos de la imagen.
RLE (Run Length Encoding) Es el primero y mas simple procedimiento de compresión de datos. Utilizado primariamente para comprimir imágenes en blanco y negro. Posteriormente ha formado la base de otros procedimientos de compresión como por ejemplo el CCITT grupo D RLE (Run Length Encoding) El procedimiento consiste en sustituir una cadena de caracteres consecutivos repetidos por dos bytes: El primer byte contiene un número que representa el número de veces que el carácter está repetido. El segundo byte contiene al propio carácter. En otros casos se codifican en un solo byte: bit ( o ) y 7 bits para especificar el número de caracteres consecutivos.
RLE (Run Length Encoding) Byte 5 7 8 Valor en decimal 7 Valor en hexadecimal E 7 B CCITT Grupo D Basada en el RLE Es una versión modificada denominada codificación Huffman Su fundamento es el siguiente: A secuencias mayores de píxeles negros o blancos, menor es el código en bits utilizado.
Tabla de códigos Grupo RLE Blanco Código RLE Negro Código 5 5 Códigos Grupo A partir de píxeles se generan códigos makeup en múltiplos de píxeles. Para calcular el código de los valores intermedios se añaden al código makeup anterior el código de terminación correspondiente. Por ejemplo: para codificar píxeles blancos: makeup 8 = Terminación = TOTAL = 5
Algoritmo de Huffman.-Calcular la probabilidad de cada elemento.-mientras haya mas de un elemento.-ordenar en orden creciente de probabilidad.-agrupar los dos elementos de menor probabilidad y sustituirlos por un nuevo elemento cuya probabilidad sea la suma de ambos. 5.-Si queda mas de un elemento volver a, si no parar y asignar códigos binarios. Ejemplo Comprimir la palabra MULTIMEDIA A() D() E() T() L() U() I() M()
Codificación diatómica Es una variación de la RLE Determina la ocurrencia de los pares de bytes mas frecuentes. Por ejemplo en textos se conocen por estudios estadísticos que parejas de letras aparecen mas frecuentemente vinculadas. En estos casos la pareja de bytes se sustituye por un solo byte que no aparezca en el texto. Se pueden alcanzar reducciones del % Una derivación optimizada son los diccionarios LZW Codificación aritmética no adaptativa El mensaje se representa por el intervalo (números reales). Según el mensaje crece el intervalo se hace mas pequeño y el número de bits necesario para representarlo crece. 7
CCITT Grupo D Es bidimensional. La razón de compresión entre y. Ofrece una alta compresión, porque estadísticamente muchas líneas difieren muy poco de la línea de arriba o de la de abajo. CCITT Grupo D Utiliza un factor K mediante el que la imagen es dividida en diversos grupos de K líneas. La primera línea de cada grupo K según el procedimiento del grupo D. Dicha línea se convierte en la referencia para la siguiente línea. Por ejemplo una línea de texto se puede corresponder a - líneas de píxeles, en este caso la diferencia entre unas y otras será sólo la de los contornos. 8
Procedimiento de codificación con respecto a la línea de referencia Se analiza la línea a codificar y se buscan e identifican los cambios de píxel (p. e. El primer cambio en la posición a) Se analiza la línea de referencia y se buscan e identifican los cambios de píxel (p. e. El primer cambio en la posición b) Se calcula la diferencia entre ambas posiciones (Delta = b a) Procedimiento de codificación con respecto a la línea de referencia Si Delta se encuentra entre - y + entonces se aplica un código denominado Vertical. - - - 9
Procedimiento de codificación con respecto a la línea de referencia Si Delta está fuera de los límites anteriores entonces se aplica: Bien el código de Paso Bien el código Horizontal Ejemplo código vertical b b b Línea de referencia Línea a codificar a a a b es el primer píxel que cambia a un valor, b es el siguiente píxel que cambia a. a es el primer píxel de la línea a codificar, a es el primer píxel que cambia a, a el siguiente píxel que cambia a. Delta = b a = 9 = Código a emplear:
Ejemplo código de Paso b b Línea de referencia Línea a codificar a a La línea a codificar posee un primer píxel de cambio a a la derecha de b y fuera del intervalo vertical (-, +) y no se puede aplicar dicho código. Esto significa que a ha pasado a b y entonces se aplica el código de paso. A continuación se efectúa el desplazamiento del puntero b a la siguiente posición b y se compara de nuevo con a. Ejemplo código Horizontal Se aplica cuando no se pueden usar ni el código Vertical ni el de Paso. Cuando Delta es superior a +. Este código se utiliza conjuntamente con el código RLE para el grupo D. + código makeup + código terminación
Compresión JPEG Comisión estandarización Comenzó sus trabajos en junio de 98. En junio de 987 se presentaron diez técnicas diferentes para imágenes estáticas de color y escalas de grises. El análisis de las técnicas llevó a la conclusión de utilizar la transformada DCT. En 99 JPEG fue reconocido por la ISO como estándar.
Requerimientos que cumple JPEG Es independiente del tamaño de las imágenes. Es aplicable a cualquier imagen y razón de aspecto. La representación de color es independiente de implementaciones especiales. El contenido de una imagen puede ser de cualquier complejidad, con cualquier característica estadística. Debe funcionar sobre la mayoría de los procesadores estándar. Es posible la codificación línea a línea. Fases en la compresión JPEG Preparación de la imagen. Procesamiento de la imagen. Cuantización. Codificación de entropía.
Preparación de la imagen I Una imagen fuente puede consistir de al menos y como máximo 55 componentes o planos. muestras CN * * * * * * * * * * * * * * * * * * * * * * * * C Y C X Preparación de la imagen II Cada componente de C i puede tener diferente número de píxeles en los ejes horizontal (X i ) y vertical (Y i ). Estos componentes pueden asignarse a los tres colores RGB o a las señales YUV por ejemplo.
Preparación de la imagen III La resolución de los componentes individuales C i puede ser: Igual X = X = X y Y = Y = Y, por ejemplo en la representación RGB. Distinta X = X = X y Y = Y = Y, por ejemplo en el caso de la representación YUV. Cada píxel está representado por p bits con valores en el rango a p-. Preparación de la imagen IV Todos los píxeles de todos los componentes dentro una misma imagen están codificados por el mismo número de bits. En el modo JPEG con pérdidas la precisión es de 8 o bits por píxel. En el modo JPEG sin pérdidas la precisión es de a bits. 5
Preparación de la imagen V Las dimensiones de la imagen comprimida están definidas por nuevos valores: X el máximo de todas las X i Y el máximo de todas las Y i H i y V i valores relativos de las razones de muestreo horizontal y vertical para cada componente i. Los valores H i y V i son enteros en el rango -. Preparación de la imagen VI Consideremos una imagen con una resolución máxima horizontal y vertical de 5 píxeles y los siguientes factores de muestreo: Nivel : H =, V = Nivel : H =, V = Nivel : H =, V = Si asumimos X = 5, Y = 5, H max = y V max = El resultado sería: Nivel : X = 5, Y = 5 Nivel : X = 5, Y = 5 Nivel : X = 8, Y = 5
Preparación de la imagen VII Para el proceso de compresión la imagen se divide en unidades de datos: En el modo sin pérdidas utiliza un píxel como unidad de datos. El modo con pérdidas utiliza bloques de 8 x 8 píxeles. Esto es debido a que la DCT utiliza bloques conectados. Preparación de la imagen VIII En la mayoría de los casos las unidades de datos se procesan componente a componente. El orden de procesamiento de las unidades de datos es de izquierda a derecha y de arriba abajo. Este procedimiento se denomina ordenación de datos no intercalados. Utilizando este procedimiento el visualizador de imágenes, por ejemplo en RGB presentaría un color después de otro. Sin embargo suele ser mas conveniente utilizar un procedimiento de intercalado. 7
Preparación de la imagen IX Ejemplo de intercalado Preparación de la imagen X Las unidades de datos intercaladas de los diferentes componentes se combinan en las denominadas MCU (Minmum Coded Units). Si todos los componentes tienen la misma resolución (Xi x Yi), un MCU consiste en una unidad de dato por cada componente. En este caso el decodificador permite visualizar la imagen MCU tras MCU. Esto permite una presentación correcta del color incluso para imágenes parcialmente descodificadas. 8
Preparación de la imagen XI En el caso del ejemplo de intercalado, este posee cuatro componentes, los valores de Hi y Vi se dan para cada componente. El primer componente tiene la mayor resolución en ambas dimensiones y el cuarto presenta la menor resolución. Por ejemplo la MCU sería: d d d d d d d d d Procesamiento de la imagen I Después de la preparación de la imagen, las muestras sin comprimir se agrupan en unidades de datos de 8 x 8 píxeles y se pasan al codificador. El orden de las unidades de datos es definido por las MCU. Cada muestra simple se codifica usando 8 bits. 9
Procesamiento de la imagen II El primer paso en el procesamiento de la imagen en el modo de línea base es una transformación llevada a cabo mediante DCT. Los píxeles son desplazados en el rango -8, +7. Las unidades de datos formadas por los valores de 8 x 8 píxeles desplazados se definen por S yx (x e y en el rango -7) Procesamiento de la imagen III DCT es similar a la FFT. Mapea los valores desde el dominio del tiempo al dominio de las frecuencias. La DCT ayuda a separar la imagen en partes (o sub-bandas espectrales) de diferente importancia (con respecto a la calidad visual de la imagen). Cada coeficiente puede ser contemplado como una frecuencia bidimensional.
Procesamiento de la imagen IV Dominio espacial Dominio frecuencias Procesamiento de la imagen V Ecuación general bidimensional (imagen N x M) de la DCT f(i,j) es la intensidad del pixel en la fila i y la columna j F(u,v) es el coeficiente DCT en la fila k y la columna k en la matriz DCT. Para la mayoría de las imágenes, la mayoría de la energía de la señal reside en las bajas frecuencias; estas aparecen en la esquina superior izquierda de la DCT. Componente DC. La compresión se alcanza puesto que los valores cercanos a la esquina inferior derecha representan las altas frecuencias, y son a menudo suficientemente pequeñas pudiendo ser eliminadas sin ocasionar distorsión. Componentes AC
Procesamiento de la imagen VI Funciones básicas de la DCT Procesamiento de la imagen VII Comparación entre FFT y DCT
Procesamiento de la imagen VIII 8 5 7 55 7 8 55 5 8 5 5 5 55 5 9 5 5 5 5 55 5 5 5 5 8 58 5 5 5 57 5 5 5 8 5 8 5 5 MATRIZ DE DATOS Procesamiento de la imagen IX 7-8 5-8 -9-9 - -8-7 -9-8 - -5 - - -5 - -8 - - 5 - - - - - - - 5 - -8 - MATRIZ DESPUÉS DE LA DCT
Comparación de matrices 5 5 8 5 8 5 5 5 57 5 5 5 58 8 5 5 5 5 55 5 5 5 5 9 5 55 5 5 5 8 5 55 8 7 55 7 5 8 - -8-5 - - - - - - - 5 - - -8 - -5 - - -5 - -8-9 7 - -8-9 - -9-8 5-8 7 Ejemplo DCT Imagen original Transformada DCT
Cuantización I Se lleva a cabo con todos los coeficientes obtenidos tras la DCT y es una transformación con pérdidas. La aplicación JPEG proporciona una tabla con entradas. Cada entrada será usada para la cuantización de uno de los coeficientes dividiendo cada coeficiente por su entrada correspondiente. Cuantización II 7 9 5 7 9 5 8 9 5 8 9 5 8 9 5 8 7 9 5 8 7 5 8 7 5 8 7 MATRIZ COEFICIENTES CUANTIZACIÓN 5
Cuantización III MATRIZ COEFICENTES DCT DESPUÉS CUANTIZACIÓN Comparación de matrices - -8-5 - - - - - - - 5 - - -8 - -5 - - -5 - -8-9 7 - -8-9 - -9-8 5-8 7
Codificación de entropía I Durante el paso inicial de la codificación de entropía, los coeficientes DC cuantizados son tratados separadamente de los coeficientes AC cuantizados. El orden de procesamiento es una secuencia en zigzag. Codificación de entropía II La codificación mediante entropía puede utilizarse aplicando el código de Huffman mediante una tabla previamente construida. La primera codificación que se efectúa es un RLE de los coeficientes AC que son cero debido al gran número de ellos. 7
Codificación de entropía III Los coeficientes DC determinan el color básico de las unidades de datos. Entre unidades de datos adyacentes las variaciones de color son pequeñas. Por tanto los coeficientes DC se codifican como las diferencias entre un coeficiente y el anterior, procesándose sólo la diferencia. Codificación de entropía IV La codificación de Huffman sigue dos pasos: Formar una secuencia intermedia de símbolos. Convertir la secuencia anterior en una secuencia binaria. 8
Codificación de entropía V Codificación de Huffman del coeficiente DC: Se utilizan dos símbolos: (tamaño) (amplitud) El tamaño (valor en bits del número de bits necesarios para codificar la amplitud) se codifica mediante un código de longitud variable a partir de la tabla de Hufman. La amplitud se codifica mediante un entero de longitud variable. Por ejemplo: () () Codificación de entropía VI Codificación Hufman de los coeficientes AC: (runlength, tamaño) (amplitud) Runlength: número de ceros consecutivos antes de un componente AC distinto de. Tamaño: número de bits utilizados para codificar la amplitud. Amplitud: valor de los componentes AC distintos de. 9
Codificación de entropía VII Ejemplo de codificación componentes AC: 5 AC = AC = 5 (, 9) (5) Si runlength > 5 el símbolo es (5, ) que indica ceros. Por ejemplo (5, ) (7, ) () indica que delante del número hay ceros ( + 7) - Codificación de entropía VIII - - - - - - MATRIZ DESPUÉS DE CUANTIZACIÓN - Secuencia zig-zag,-,,-,-,,,,-,,,,,,,,,,,,,,,,-,,,-,,,,,-,,,,,,,,-,,,,,,,,,,,,,,,,,,,,,,
Codificación de entropía IX Secuencia zig-zag,-,,-,-,,,,-,,,,,,,,,,,,,,,,-,,,-,,,,,-,,,,,,,,-,,,,,,,,,,,,,,,,,,,,,, Secuencia de símbolos intermedios ()(),(,)(-),(,)(),(,)(-),(,)(-), (,)(),(,)(),(,)(-),(,)(-),(5,)(), (,)(),(,)(-),(,)(-),(,)(-),(7,)(-), (,) El símbolo (,) indica que el resto de componentes AC= Codificación de entropía X Secuencia de símbolos intermedios ()(),(,)(-),(,)(),(,)(-),(,)(-), (,)(),(,)(),(,)(-),(,)(-),(5,)(), (,)(),(,)(-),(,)(-),(,)(-),(7,)(-), (,) Secuencia de bits definitiva La secuencia final significa EOB (End Of Block)
Codificación de entropía XI CODIFICACIÓN COEFICIENTES DC Longitud en bits BCD Codificación DC -, -, -,, -7..-,..7-5..-8, 8..5 5 -..-,.. -..-,.. 7-7..-,..7 8-55..-8, 8..55 9-5..-5, 5..5 Codificación de entropía XI CÓDIGOS HUFFMAN COEFICIENTES AC (RUNLENGTH, TAMAÑO) CÓDIGO (,) EOB (,) (,) (,) (,) (,) (,) (,) (5,) (,) (7,)
Codificación de entropía XII CODIFICACIÓN DE AMPLITUD AMPLITUD - - - - CÓDIGO