Universidad Autónoma Metropolitana
I z
tapalapa
Reporte de
Proyecto de
Ingeniería Electrónica
1-11
"Compresión de Imágenes
D i g i t a l e s V í a l a
Transformada Coseno Discreta
2-D"
Asesor:
Alumno
:
,,.~/~;k,;.~/,~.''.
, , . .
,;L.
Dr. Hec
ir
or Pérez Meana
Rosendo Martinez
Silva.
87328592
indice
Introducción
Algoritmos de Campresión de Datos de Imágenes
Compresión de Imágenes Vía Transformadas Matemiticas
Aplicación Desarrollada
Pruebas
Análisis de Resultados
Conclusiones
Anexo A, Tablas del Codificador de Huffman (JPEG)
Bibliografía
Pág.
3
4
5
6
13
13
14
15
18
Introducción
Actualmente el uso de imágenes digitales esta muy difundido, podemos ver
aplicaciones con este tipo de imágenes en áreas tales como la medicina, la astronomía, la
fotografía, la educación, los negocios, etc., sin embargo, los recursos necesarios para
almacenar o transmitir imágenes digitales son enormes. Por ejemplo si se deseará almacenar
una imagen de 1024 x 1024 pixeles donde cada pixel este representado por 8 bits, sería
necesario 1 Megabyte de memoria; ahora bien si se quisiera transmitir video con imágenes
de este tipo a una resolución de 30 cuadros por segundo, sería necesario un canal con
ur
ancho de banda de 60 Mhz (usando una modulación PSK 1Hz por 2 bits).
De las cifras como las anteriores, surge la necesidad de utilizar algoritmos de compresión de
datos. La Organización Internacional de Estándares I S 0 y la Comisión de Comunicaciones Telegrafía y Telefonía CCITT desarrollaron el estándar JPEG para compresión de imágenes.
Este estándar se basa en la Transformada Coseno Discreta 2L; y en un Codificador de Huffman modificado.
En el presente trabajo se implementaron vía software mecanismos de compresión y
descompresión de imágenes tomando como base criterios del estándar JPEG.
Algoritmos de Compresión de
Datos
de Imágenes
Un algoritmo de compresión de imágenes debe cumplir esencialmente con 3
aspectos:
1. Brindar una alta tasa de compresión
2. Mínima distorsión al reconstruir la imagen
3. Sencillez para implementarse
Básicamente existen dos tipos de algoritmos de compresión de imágenes; uno de ellos
(métodos predictivos) explota características tales como la predictibilidad de
los
datos, launiformidad, la aleatoridad, etc., mientras el otro tipo (transformaclón de código) empaca la
mayoría de la información en un número pequeño de muestras vía una transformada
matemática.
Los métodos predictivos de compresión de imágenes son en general fáciles de implementar,
sin embargo son sensibles a variaciones del contenido de la imagen y la calidad de la imagen
se degrada mucho si se transmite en un canal con ruido.
Los métodos en
los
que se emplea una transformada matemática no son tan sensibles avariaciones del contenido de la imagen, si hay ruido en el canal de transmisión, éste se
distribuye uniformemente y aunque su implementación no es tan trivial existen circuitos
integrados que realizan esta tarea sin ningún problema.
Entre
los
algoritmos de compresión más populares se encmntra el que utiliza laTransformada Coseno Discreta 2-D. Su popularidad radica en que brinda una tasa de
compresión alta, ésta posible implementaria en un
solo
circuito integrado y minimiza (adiferencia de la Transformada de Fourier) la distorsión que se da en las fronteras de las
subimagenes (blocking artifact). Por las características anteriores se decidió en el presente
Compresión de Imágenes Vía Transformadas Matemáticas
Es posible mapear una imagen a un conjunto de coeficientes aplicándo una
transformación matemática (TKL, TDF, TDC, WHT, etc.). Estos coeficientes poseen la
cualidad de tener la mayor parte de la información de la imagen empacada en un número
pequeño de ellos, por lo que se pueden eliminar selectivamente o cuantizar en forma burda
reduciendo así el recurso necesario para su almacenamiento o transmisión. A continuación
se muestran los pasos para comprimir los datos de una imagen digital:
Se aplica una Se cuantizan los Se codifican Imagen Fuente subimagenes .
,
cuantizados la Transformada
Matemática
NxN
,
Comprimida
los coeficientes,
b
coeficientes de
,
Transformada
Después de descartar o cuantizar burdamente aquellos coeficientes que no contribuyen en
forma significativa a la reconstrucción de la imagen, se puede aplicar un código de longitud
variable (códigos cortos a valores de alta frecuencia y códigos largos a los de baja
frecuencia) con el fin de reducir aún más el recurso para almacenar o transmitir la imagen.
En la siguiente figura se ilustra el proceso para descomprimir la imagen:
Coz;!:ida
1 x 1
1-1
,
descuantizan Transformada Se aplica la
los coeficientes los coeficientes
Se agrupan Ilnagen
Descomprimida
Aplicación Desarrollada
Descripción
Antecedentes
Formato del
archivo que
contiene la
imagen
digitalizada
1. Software que dado un archivo que contiene una imagen digitalizada
le aplica un algoritmo de compresión de datos basado en la TCD-
2D, generando así un archivo con la imagen comprimida.
Sintaxis: comprime <imagen-fuente> <imagen-comp>
imagen-fuente: Nombre del archivo que contrene la imagen que se
va a comprimir.
imagen-comp: Nombre que se desea para e! archivo en el que se almacenará la imagen comprimida.
2. Software que dado una archivo que contiene una imagen
comprimida y otro que contiene la imagen original, las grafica con el
fin de ver sus diferencias.
Sintaxis: descomp cimagen-origina/> <imagen-comp>
imagen-original: Nombre del archivo que contiene la imagen a la
que se le aplicó el algoritmo de compresión.
imagen-comp: Nombre de la imagen que resultó del algoritmo de compresión.
Alumnos del trimestre anterior desarrollaron una tarjeta digitalizadora
de imágenes de video. Esta tarjeta permite capturar imágenes a través
de una PC y almacenarlas en disco; asignaba 4 bits por pixel y las
dimensiones de la imagen capturada eran de 256 x 256 pixeles.
1. Una imagen de 256 x 256 pixeles se encuentra almacenada en un
archivo de 32 KBytes.
2. cada byte contiene 2 pixeles correspondiendo
los
4 bits mássignificativos al pixel de la izquierda.
3. La secuencia en que fue barrida la imagen es de izquierda a
derecha, de arriba hacia abajo.
Aplicación desarrollada,
continuaComponentes 1. c0mprime.c: código principal del compresor de imágenes.
de la 2. desc0mp.c: código principal del descompresor de imágenes.
aplicación 3. libtcd2d.c librería en la cual estan implementadas las siguientes
transformadas rápidas:
0 Coseno Discreta 2-dimensional (Directa e Inversa)
0 Fourier Discreta N-dimensional (Directa e Inversa)
4. 1ibcuant.c: librería que contiene las funciones de cuantización y descuantización de
los
coeficientes de la transformada de laimagen.
5. 1ibencod.c: librería en la que esta implementada la función del
Codificador de Huffman.
6. huffdec0.h: archivo de cabecera en el que estan definidas las tablas
necesarias para el Descodificador de Huffman; también se
encuentra el cuerpo de las funciones básicas del descodificador.
7. huffenc0.h: archivo de cabecera en el que estan las tablas del
Codificador de Huffman.
Aplicación
desarrollada,
continuaComo se 1.
implementó
compresor de
datos
2.
3.
4.
5.
6 .
7 .
Como se 1.
implementó el
descompresor 2.
de datos 3.
4.
5.
Dada una imagen de 256 x 256 pixeles a 16 tonos de gris (4
bits/pixel) se procede a dividirla en subimagenes de 8 x 8.
Se procesarán las subimagenes empezando de izquierda a
derecha, de arriba hacia abajo.
R la subimagen se le hace un corrimiento de 8 niveles de gris hacia abajo. Esto se hace con el fin de distribuir sus valores alrededor de
cero.
Se le aplica la Transformada Coseno Discreta 2-D.
Se cuantizan los coeficientes obtenidos.
La matriz de los coeficientes cuantizados es barrida en forma de
zigzag de izquierda a derecha, de arriba hacia abajo, con lo cual se
obtiene un arreglo unidimensional. AI reordenar en esta forma la
matriz
los
coeficientes que más contribuyen a la reconstrucción dela imagen quedan al principio y al final cadenas largas de ceros.
El arreglo obtenido sirve de entrada al Codificador de Huffman. La
salida de codificador se dirige al archivo que guardará la imagen
comprimida.
FIN.
Dada una imagen comprimida, empieze por descodificarla
obteniendo así la ler. subimagen
Descuantiza la subimagen obtenida.
Aplica la Transformada Coseno Inversa al resultado anterior.
Aplica un corrimiento hacia arriba de 8 niveles de gris para
compensar el que se hizo hacia abajo en el proceso de compresión.
Repite los pasos anteriores hasta reconstruir la imagen por
completo.
Aplicación desarrollada,
continuaComo se Se utilizó un algoritmo basado en la Transformada Rápida de Fourier, el
implementó la cual consiste en
los
siguientes pasos:TCD-2D y su Transformada directa:
Inversa
l .
Dada la subimagen x(i, 1) con O <= i <= N;O
<= j <= N, se construye la función siguiente:u (i, 1) = x (2i, 2j); O < = i < = [ ( N - 1 ) / 2 ] , O < = j < = [ ( N - 1 ) / 2 ]
x (2N - 2i - 1, 2j); [(N+1)/2] <= i <= N -1, O <= j <= [(N - 1) / 2 ]
x (2i, 2N - 2j - 1); O <= i <= [(N - 1) / 21, [(N + 1) / 21 <= j <= N - 1
x (2N - 2i - 1, 2j, 2N - 2j - 1); [(N + 1) / 2 ] <= i <= N -1, O <= j <= [N-1/21 (1)
Es posible demostrar que la TCD-2D de x(i, 1) se puede expresar
como:
C(i, 1) = 2 [ Re {U(¡, j)} cos [Q(i+j)] + Im {U(¡, j)} sen [Q(i+j)] +
Re {U(¡, N-j)} cos [Q(i-j)] + Im {U(¡, N-j)] sen [Q(i-j)] ] (2)
donde Q = 2 d 4 N y
U(i, 1): es la Transformada de Fourier de u (i, 1)
2. Calcular la Transformada Rápida de Fourier de la función u (i, j).
3. Calcular la TCD-2D en base a la formula (2).
4. FIN
Transformada Inversa:
1. Dada la expresión (21, es posible demostrar que la Transformada de
Fourier de (1) esta dada por:
u(i, 1) = ( 1 4 [ (G(i, j)) - C(N-I. N-j) cos [Q(i+j)] + (C(N-i, j) + C(i, N-j)) sen [Q(i+j)] ] -
014) [ (C(N-i, j) + C (I, N-j)) cos [Q(i-j)] + (C(i, j) - C(N-i, N-j)) sen [Q(i-j)] ] (3)
y que C(N, j) = C (y, N) = O
Así de C(i, j ) se obtiene U(i, J)
2. Se obtiene u(¡, j) alpicando la Transformada de Fourier Inversa a U(¡, j) 3. Se obtiene x(¡, j) a partir de (1).
4. FIN.
Aplicación desarrollada,
continuaComo se Se basa en el hecho que para cualquier subimagen los coeficientes de
implementó el mayor magnitud de su transformada son los que más contribuyen a la
cuantizador reconstrucción de la misma. Típicamente estos coeficientes se
encuentran en la parte superior izquierda de la transformada. Las
subimagenes fueron cuantizadas según la siguiente expresión:
C’ (i, j) = redondea [ C (i, j) / N (i, j) ]
Donde N (i, j): Es una matriz adaptada de 256 tonos de gris a 16 de un
arreglo típico de normalización del estandar JPEG. A continuación se
muestra el contenido de la matriz JPEG y de N (i, j):
Matriz Normal JPEG: Matriz Normal Adaptada N(¡, j):
7 8 9 9 1 0 9 9 9
Aplicación desarrollada,
continuaComo se La entrada al codificador es el vector resultante de haber barrido en
implementó el zigzag de izquierda a derecha y de arriba hacia abajo a la matriz de
Codificador coeficientes cuantizados. El elemento superior izquierdo de la matriz es
de Huffman llamado coeficiente DC, la diferencia entre
los
coeficientes DC de subimagenes adyacentes es llamada dc-delta y el número de ceros consecutivos del vector es llamado NoCerosAC. Las subimagenes sonprocesadas de izquierda a derecha de arriba hacia abajo.
Las tablas del codificador se muestran en el anexo A.
Para Cada subimagen
m :
1. NoCerosAC <- O
2. dc-delta c- vector
[O]
- last-dc-coef3.
last-dc-coef <- vector[O]
4. Obtener CategoriaDC ubicando dc-delta en la tabla 1 del anexo A
5. 3btener CodigoBase, LongBase y LongTotal para CategoriaDC en !a tabla 2
6. Dado que el numero de bits del código debe ser LongTotal, calcular
los
LongTotal - LongBase bits restantes de dc-delta de la siguienteforma: aux <- dc-delta
- Si dc-delta <
O
Entoncesaux c- aux - 1
FinSi
Tomar los (LongTotal- LongBase) bits menos significativos de aux.
6. Concatenar
los
bits de CodigoBase conlos
obtenidos del paso anterior.7. i <- 1
Aplicación desarrollada,
continuaComo se 8. Mientras mas elementos del vector de entrada
implementó el coef <- vector[¡]
Codificador - Si coef =
O
Entoncesde Huffman NoCerosAc e- NoCeros + 1
Qt&l
Con coefobtener CateroriaAC en ta tabla 1
Con NoCeros y CateroriaAC obtener CodigoBase, LongBase y
LongTotal de la tabla 3.
aux e- coef
- Si aux O Entonces
aux e- aux
-
1 FinSiTomar los LongTotal-LongBase bits menos significativ. de aux
Concatenar los bits de CodigoBase con los obtenidos del paso
anterior.
FinSiOtro ¡ < - ¡ + I
FinMientras
Fin Para Cada subimagen
Pruebas.
Se corrio la aplicación a 4 imágenes de 32,768 Bytes. A éstas imagenes también se les
aplicó un algoritmo profesional de compresión de datos libre de error, obteniendose los
siguientes resultados:
Nombre del Archivo de Entrada (Imagen Original)
imagen.bin
dos. bin
tres.bin
cuatro.bin
Nombre del Archivo de Tamaiio de la Salida Imagen
(Imagen Comprimida) Comprimida (Bytes) imagen.cmp 5325
dos.cmp 5724
tres.cmp 5762
cuatro.cmp 4879
I
Compresión hecha por el paquete pkzip
(Bytes)
1 1097
7453
14837
15338
Observaciones
La distorsión es mínima
La distorsión es minima
La distorsidn es mínima La distorsión es ninima
La tasa de compresión en promedio de la aplicación para estas imgyenes es de 6: 1.
Análisis
de resultados
0 A pesar de que las imágenes con las que se trabajó tienen muy poca calidad (4
bits/pixel) se obtuvó una tasa de compresión aceptable y mucho mejor que la del
paquete pkzip
0 La aplicación es lenta, sin embargo, en un ambiente profesional la TCD-2D esta
implemetanda vía hardware y no vía software.
0 La distorsión asosiada a la imagen por el proceso de compresihn es mínima, esto habla
Conclusiones
Los
recursos que exige almacenar o transmitir imágenes digitales son enormes, por10
que el uso de algoritmos de compresión de datos esta ampliamente difundido.Generalmente se utilizan algoritmos en los que hay una pequeña distorsión de la imagen;
esto se debe a que sus tasas de compresión son altas y la distorsión es casi imperceptible.
Se ha demostrado que el algoritmo de compresión basado en
la
TCD-2D brinda buenosresultados.
La Organización Internacional de Estándares I S 0 y la Comisión de Comunicaciones,
Telegrafía y Telefonía CCITT desarrollaron un estándar (JPEG) de compresión de imágenes
basado en la TCD-2D. Este algoritmo de compresión antes que nada divide a la imagen en
bloques de 8 x 8; después procesa por separado cada subimagen. A cada subimagen le
aplica la TCD-2D (empaca la mayor parte de la información en número pequeño de
muestras), después cuantiza los coeficientes de la transformada (elimina aquellas muestras
que contribuyen muy poco a la reconstrucción de la imagen) y por último codifica las
muestras cuantizadas (asigna códigos largos a las muestras de poca frecuencia y cortos a
las de alta frecuencia).
En el caso de video se combina el método anterior con un método temporal como es la
modulación DPCM, aurovechando asi la redundancia entre un cuadro y otro.
Anexo A, Tablas del Codificador de Huffman
(JPEG)
Tabla 1 Categorías correspondientes a coeficientes en D C y A C (JFEG) Rango Categoría Categoría
de a de a A C D C
O O O O O NIA
-1 -1 1 1 1 1
-3 -2 2 3 2 2
-7 -4 4 7 3 3
-1 5 -8 8 15 4 4
-3 1 -1 6 16 31 5 5
-63 -32 32 63 S 6
-1 27 -64 64 127 7 7
-255 -128 128 255 8 8
-51 1 -1 28 128 255 9 9
-1 023 -51 2 512 1023 6.. A
-2047 -1 024 1024 2047 a . B
-4095 -2048 2048 4095 C C
-8191 -4096 4096 8191 3 D
-16383 -81 92 81 92 16383 E E
-32767 -1 6384 16384 32767 F NIA
Tabla 2. Códigos D C (JPEG)
Categoría D C CodigoBase LongBase LongTotal
O 0x0002 3 3
1 0x0003 3 4
2 0x0004 3 5
3 0x0000 2 5
4 0x0005 3 7
5 0x0006 3 8
Categoría D C CodigoBase LongBase LongTotal
6 OxOOOE 4 10
7 Ox001 E 5 12
8 Ox003E 6 14
9 Ox007E 7 16
A OxOOFE 8 18
B Ox01 FE 9 20
Anexo A,
continuaTabla 3. Códigos AC (JPEG)
NoCerosAC/ CodigoBase LongBase LongTotal
Categoria AC
010 OOOA 4. EOB
o/
1012 o13 014 015 016 017 O18 019 OIA Ill I12 I I3
114 I 15
1 16 117 I I8
I 19
1 /A 21 I
212 213 214 215 216 217 !I8 219 ?/A $11 $ 12
? 13
j 14
i15
i i6 1/7
Y 8
3 I9
j /A
O000
O00 1
0004 OOOB OOlA
O03 8 0078 03F6 FF82 FF83
oooc
0039 0079O 1 F6 07F6 FF84 FF85 FF86 FF87 FF88 OOlB 00F8
O3 F7 FF89 FF8A FF8B FFSC FF8D FF8E FF8F 003A
O 1 F7 07F7 FF90 FF9 1
FF92 FF93 FF94 FF95 4 2 2 3 4 5 6 7 10 16 16 4 6 7 9 1 1 16 16 16 16 16 5 8 I O 16 16 16 16 16 16 16 6 9 1 1 16 16 16 16 16 16 16 3 4 6 8 10 12 14 18 25 26 5 8 I O 13 16 22 23 24 25 26 6 IO 13 20 21 22 23 24 25 26 7 1 1 14 20 21 22 23 24 25 26 FF96
NoCerosACl CodigoBase LongBase LongTotal
Categoria AC
41 1
412 413 414 415 416 417 418 419 4lA
51 1 5 12
5 I3
514
515
516 517
518
5 I9 51A
61 1
512 513 514 515 516 517 518 519 í/A
71 1
712 'I3 '14 '15 '16 'I? ;I8 719 71A
003 B 03F8 FF97 FF98 FF99 FF9A FF9B FF9C FF9D FF9E 007A 03F9 FF9F FFAO FFA 1
FFA2 FFA3 FFA4 FFA5 FFA6 007B 07F8 FFA7 FFA8 FFA9 FFAA FFAB FFAC FFAD FFAE 00F9 07F9 FFAF FFBO FFB 1
Anexo
A,
continuaTabla 3. Códigos AC (JPEG)
NoCerosACl CodigoBase LongBase LongTotal Categoria
81 1
812 813 814 815 816 817 818 819 8lA
31 1
312 313 314 315 )I6 317 >I8 >I9 )1A
91 1
112 113
4 I4
115 416 117 118 \I9 4lA
31 1
312 313 314 31s 316 317 318 319 VA OOFA 7FC0 FFB7 FFB8 FFB9 FFBA FFBB FFBC FFBD FFBE 01F8 FFBF FFCO FFC 1
FFC2 FFC3 FFC4 FFCS FFC6 FFC7
O 1 F9 FFC8 FFC9 FFCA FFCB FFCC FFCD FFCE FFCF FFDO OlFA FFD 1
FFD2 FFD3 FFD4 FFDS FFD6 FFD7 FFD8 FFD9 8 15 16 16 16 16 16 16 16 16 9 16 16 16 16 16 16 16 16 16 9 16 16 16 16 16 16 16 16 16 9 16 16 16 16 16 16 16 16 16 9 17 19 20 21 22 23 24 25 26 10 I 8 19 20 21 22 23 24 25 26 I O 18 19 20 21 22 23 24 25 26 IO I 8 19 20 21 22 23 24 25 26
NoCerosACl CodigoBase LongBase LongTotal Categoria
c / 1 03 FA IO 1 1
c12 c13 Cl4 c15 Ci6 c17 CIS c19 CIA Dl 1
Dl2 D/3 D/4 Dl5 Dl6 Dl7 Dl8 Dl9 DIA E/ 1
E12 El3 E14 515 316 3 7 3 3 219 EIA FIO
F l 1
F12 F13 F14 '15 '16 :I7 718 :I9 :/A FFDA FFDB FFDC FFDD FFDE FFDF FFEO FFE 1
FFE2 07FA FFE3 FFE4 FFE5 FFE6 FFE7 FFE8 FFE9 FFEA FFEB OFF6 FFEC FFED FFEE FFEF FFFO FFF 1
Bibliografía
Makhoul “Fast Cosine Transformer”, IEEE Transactions on Acoustics, Speech, and
Signal Processing, Vol. SSP-28, No 1, pp. 27-34, February ,1980.
Jain
“Image Data Compression”, Proceedings of the IEEE, Vol. 69, No 3, pp. 349-389,March, 1981.
Gonzalez and Woods Digital Image Processing, Ed. Addison-Wesley;3ra. edición,
pp.307-411, USA, 1992.
Nussbaumer Fast Fourier Transform and Convolution Algorithms, New York, 1982.
Garcia, Guirao, lbánez “Optimization of HDTV Codec Algorithms” Telectra Review No.
45, pp. 67-81, May, 1990.