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: 1 para un píxel negro y 0 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 3 – 1D
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: 1 bit (0 o 1) y 7 bits para especificar el número de caracteres consecutivos.
RLE (Run Length Encoding)000000000000001111111000000000001111
Byte Valor en decimal Valor en hexadecimal
1 14 E
2 0 0
3 7 7
4 1 1
5 11 B
6 0 0
7 4 4
8 1 1
CCITT Grupo 3 1D
• 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 3
RLE Blanco Código RLE Negro Código
1 000111 1 010
2 0111 2 11
3 1000 3 10
4 1011 4 011
5 1100 5 0011
Códigos Grupo 3
• A partir de 64 píxeles se generan códigos “makeup” en múltiplos de 64 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 132 píxeles blancos:– “makeup” 128 = 10010– Terminación 4 = 1011– TOTAL = 100101011
Algoritmo de Huffman
1.-Calcular la probabilidad de cada elemento2.-Mientras haya mas de un elemento
3.-Ordenar en orden creciente de probabilidad4.-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 2, si no parar y asignar códigos binarios.
Ejemplo
• Comprimir la palabra MULTIMEDIA
• A(1) D(1) E(1) T(1) L(1) U(1) I(2) M(2)
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 10%• Una derivación optimizada son los diccionarios
LZW
Codificación aritmética no adaptativa
• El mensaje se representa por el intervalo 0 – 1 (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.
CCITT Grupo 3 2D
• Es bidimensional.
• La razón de compresión entre 10 y 20.
• 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 3 2D
• 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 3 1D.
• Dicha línea se convierte en la referencia para la siguiente línea.
• Por ejemplo una línea de texto se puede corresponder a 20-30 líneas de píxeles, en este caso la diferencia entre unas y otras será sólo la de los contornos.
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 a1)
• 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 b1)
• Se calcula la diferencia entre ambas posiciones (Delta = b1 – a1)
Procedimiento de codificación con respecto a la línea de referencia
Si Delta se encuentra entre -3 y +3 entonces se aplica un código denominado Vertical.
3 0000010
2 000010
1 010
0 1
-1 011
-2 000011
-3 0000011
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 0001– Bien el código Horizontal 001
Ejemplo código vertical
Línea de referencia 0000000001111111111100000000111100000000111111111111100000000011Línea a codificar
a0 a1 a2
b0 b1 b2
b1 es el primer píxel que cambia a un valor 1, b2 es el siguiente píxelque cambia a 0.
a0 es el primer píxel de la línea a codificar, a1 es el primer píxel que cambia a 1, a2 el siguiente píxel que cambia a 0.
Delta = b1 – a1 = 10 – 9 = 1Código a emplear: 010
Ejemplo código de Paso
Línea de referenciaLínea a codificar
0000000011110000000000111111100000000000000111111100000000
a1 a2
b1 b2
La línea a codificar posee un primer píxel de cambio a1 a la derechade b1 y fuera del intervalo vertical (-3, +3) y no se puede aplicar dichocódigo.
Esto significa que a1 ha pasado a b1 y entonces se aplica el código de paso 0001.
A continuación se efectúa el desplazamiento del puntero b1 a la siguienteposición b2 y se compara de nuevo con a1.
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 +4.
• Este código se utiliza conjuntamente con el código RLE para el grupo 3 1D.
001 + código makeup + código terminación
Compresión JPEG
Comisión estandarización
• Comenzó sus trabajos en junio de 1982.• En junio de 1987 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 1992 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 1 y como máximo 255 componentes o planos.
C1
C2
CN
* * * * * * * * * ** * * * * * * * ** * * * *
muestras
X
Y
Preparación de la imagen II
• Cada componente de Ci puede tener diferente número de píxeles en los ejes horizontal (Xi) y vertical (Yi).
• 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 Ci puede ser:
– Igual X1 = X2 = X3 y Y1 = Y2 = Y3, por ejemplo en la representación RGB.
– Distinta X1 = 4X2 = 4X3 y Y1 = 4Y2 = 4Y3, por ejemplo en el caso de la representación YUV.
• Cada píxel está representado por p bits con valores en el rango 0 a 2p-1.
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 12 bits por píxel.
• En el modo JPEG sin pérdidas la precisión es de 2 a 12 bits.
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 Xi
– Y el máximo de todas las Yi
– Hi y Vi valores relativos de las razones de muestreo horizontal y vertical para cada componente i.
– Los valores Hi y Vi son enteros en el rango 1-4.
Preparación de la imagen VI
• Consideremos una imagen con una resolución máxima horizontal y vertical de 512 píxeles y los siguientes factores de muestreo:– Nivel 0: H0 = 4, V0 = 1– Nivel 1: H1 = 2, V2 = 2– Nivel 2: H2 = 1, V2 = 1
• Si asumimos X = 512, Y = 512, Hmax = 4 y Vmax = 2• El resultado sería:
– Nivel 0: X0 = 512, Y0 = 256– Nivel 1: X1 = 256, Y1 = 512– Nivel 2: X2 = 128, Y2 = 256
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.
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.
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 1 sería:– d100d101d110d111d200d201d300d310d400
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.
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 -128, +127.
• Las unidades de datos formadas por los valores de 8 x 8 píxeles desplazados se definen por Syx (x e y en el rango 0-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
Dominioespacial
Dominiofrecuencias
Procesamiento de la imagen VEcuació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 k1 y la columna k2 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 VIIComparación entre FFT y DCT
Procesamiento de la imagen VIII
132 136 138 140 144 145 147 155
136 140 140 147 140 148 155 156
140 143 144 148 150 152 154 155
144 144 146 145 149 150 153 160
150 152 155 156 150 145 144 140
144 145 146 148 143 158 150 140
150 156 157 156 140 146 156 145
148 145 146 148 156 160 140 145
MATRIZ DE DATOS
Procesamiento de la imagen IX
173 -18 15 -8 23 -9 -14 19
21 -34 24 -8 -10 11 14 7
-9 -8 -4 6 -5 4 3 -1
-10 6 -5 4 -4 4 2 1
-8 -2 -3 5 -3 3 4 6
4 -2 -4 6 -4 4 2 -1
4 -3 -4 5 6 3 1 -1
0 -8 -4 3 2 1 4 0
MATRIZ DESPUÉS DE LA DCT
Comparación de matrices132 136 138 140 144 145 147 155
136 140 140 147 140 148 155 156
140 143 144 148 150 152 154 155
144 144 146 145 149 150 153 160
150 152 155 156 150 145 144 140
144 145 146 148 143 158 150 140
150 156 157 156 140 146 156 145
148 145 146 148 156 160 140 145
173 -18 15 -8 23 -9 -14 19
21 -34 24 -8 -10 11 14 7
-9 -8 -4 6 -5 4 3 -1
-10 6 -5 4 -4 4 2 1
-8 -2 -3 5 -3 3 4 6
4 -2 -4 6 -4 4 2 -1
4 -3 -4 5 6 3 1 -1
0 -8 -4 3 2 1 4 0
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 64 entradas.
• Cada entrada será usada para la cuantización de uno de los 64 coeficientes dividiendo cada coeficiente por su entrada correspondiente.
Cuantización II
4 7 10 13 16 19 22 25
7 10 13 16 19 22 25 28
10 13 16 19 22 25 28 31
13 16 19 22 25 28 31 34
16 19 22 25 28 31 34 37
19 22 25 28 31 34 37 40
22 25 28 31 34 37 40 43
25 28 31 34 37 40 43 46
MATRIZ COEFICIENTES CUANTIZACIÓN
Cuantización III
43 3 2 0 0 0 0 0
3 3 2 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
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
MATRIZ COEFICENTES DCT DESPUÉS CUANTIZACIÓN
Comparación de matrices173 -18 15 -8 23 -9 -14 19
21 -34 24 -8 -10 11 14 7
-9 -8 -4 6 -5 4 3 -1
-10 6 -5 4 -4 4 2 1
-8 -2 -3 5 -3 3 4 6
4 -2 -4 6 -4 4 2 -1
4 -3 -4 5 6 3 1 -1
0 -8 -4 3 2 1 4 0
43 3 2 0 0 0 0 0
3 3 2 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
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
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.
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.
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:• (6) (61) 0110 111101
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 0.• Tamaño: número de bits utilizados para
codificar la amplitud.• Amplitud: valor de los componentes AC
distintos de 0.
Codificación de entropía VII
• Ejemplo de codificación componentes AC: 000000 256 AC = 01 AC = 25(6, 9) (25)
Si runlength > 15 el símbolo es (15, 0) que indica 16 ceros.
Por ejemplo (15, 0) (7, 4) (12) indica que delante del número 12 hay 23 ceros (16 + 7)
Codificación de entropía VIII61 -3 2 0 2 0 0 -1
4 -4 2 0 0 0 0 0
-1 -2 0 0 -1 0 -1 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 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
MATRIZ DESPUÉS DE CUANTIZACIÓN
Secuencia zig-zag
61,-3,4,-1,-4,2,0,2,-,0,0,0,0,2,0,0,0,1,0,0,0,0,0,0,-1,0,0,-1,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,0,0,0,0,0,0,0
Codificación de entropía IX
Secuencia zig-zag61,-3,4,-1,-4,2,0,2,-,0,0,0,0,2,0,0,0,1,0,0,0,0,0,0,-1,0,0,-1,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,0,0,0,0,0,0,0
Secuencia de símbolos intermedios(6)(61),(0,2)(-3),(0,3)(4),(0,1)(-1),(0,3)(-4),(0,2)(2),(1,2)(2),(0,2)(-2),(0,2)(-2),(5,2)(2),(3,1)(1),(6,1)(-1),(2,1)(-1),(4,1)(-1),(7,1)(-1),(0,0)El símbolo (0,0) indica que el resto de componentes AC=0
Codificación de entropía X
Secuencia de símbolos intermedios(6)(61),(0,2)(-3),(0,3)(4),(0,1)(-1),(0,3)(-4),(0,2)(2),(1,2)(2),(0,2)(-2),(0,2)(-2),(5,2)(2),(3,1)(1),(6,1)(-1),(2,1)(-1),(4,1)(-1),(7,1)(-1),(0,0)
Secuencia de bits definitiva11101111010010010000011000110110110111001011111
11101111011101011111011011100011101101111101001010
La secuencia final 1010 significa EOB (End Of Block)
Codificación de entropía XI
Longitud en bits BCD Codificación DC
0 0000 0
1 0001 -1, 1
2 0010 -3, -2, 2, 3
3 0011 -7..-4, 4..7
4 0100 -15..-8, 8..15
5 0101 -31..-16, 16..31
6 0110 -63..-32, 32..63
7 0111 -127..-64, 64..127
8 1000 -255..-128, 128..255
9 1001 -511..-256, 256..511
CODIFICACIÓN COEFICIENTES DC
Codificación de entropía XI
(RUNLENGTH, TAMAÑO) CÓDIGO
(0,0) EOB 1010
(0,1) 00
(0,2) 01
(0,3) 100
(1,2) 11011
(2,1) 11100
(3,1) 111010
(4,1) 111011
(5,2) 11111110111
(6,1) 1111011
(7,1) 11111010
CÓDIGOS HUFFMAN COEFICIENTES AC
Codificación de entropía XII
AMPLITUD CÓDIGO
-4 011
-3 00
-2 01
-1 0
1 1
2 10
3 11
4 100
CODIFICACIÓN DE AMPLITUD