D i g i t a l e s V í a l a Transformada Coseno Discreta

Texto completo

(1)

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

(2)

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

(3)

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.

(4)

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, la

uniformidad, 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 a

variaciones 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 la

Transformada 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 (a

diferencia 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

(5)

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

(6)

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ás

significativos al pixel de la izquierda.

3. La secuencia en que fue barrida la imagen es de izquierda a

derecha, de arriba hacia abajo.

(7)

Aplicación desarrollada,

continua

Componentes 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 la

imagen.

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.

(8)

Aplicación

desarrollada,

continua

Como 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 de

la 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.

(9)

Aplicación desarrollada,

continua

Como 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.

(10)

Aplicación desarrollada,

continua

Como 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

(11)

Aplicación desarrollada,

continua

Como 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 son

procesadas 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-coef

3.

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 siguiente

forma: aux <- dc-delta

- Si dc-delta <

O

Entonces

aux c- aux - 1

FinSi

Tomar los (LongTotal- LongBase) bits menos significativos de aux.

6. Concatenar

los

bits de CodigoBase con

los

obtenidos del paso anterior.

7. i <- 1

(12)

Aplicación desarrollada,

continua

Como se 8. Mientras mas elementos del vector de entrada

implementó el coef <- vector[¡]

Codificador - Si coef =

O

Entonces

de 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 FinSi

Tomar 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

(13)

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

(14)

Conclusiones

Los

recursos que exige almacenar o transmitir imágenes digitales son enormes, por

10

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 buenos

resultados.

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.

(15)

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

(16)

Anexo A,

continua

Tabla 3. Códigos AC (JPEG)

NoCerosAC/ CodigoBase LongBase LongTotal

Categoria AC

010 OOOA 4. EOB

o/

1

012 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 0079

O 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

(17)

Anexo

A,

continua

Tabla 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

(18)

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.

Figure

Tabla  1  Categorías correspondientes a coeficientes en D C   y  A C   (JFEG)

Tabla 1

Categorías correspondientes a coeficientes en D C y A C (JFEG) p.15
Tabla 2. Códigos  D C   (JPEG)

Tabla 2.

Códigos D C (JPEG) p.15

Referencias

Actualización...