RESUMEN En el presente trabajo se presenta una técnica para la ...

157
RESUMEN En el presente trabajo se presenta una técnica para la compresión y descompresión de imágenes digitales usando como base un método predictivo que consiste básicamente en usar la correlación entre la vecindad de cada valor de pixel para una predicción de cada pixel, la cual se resta del valor del pixel actual para formar una imagen diferencial que está menos correlacionada dentro de la misma imagen La imagen diferencial es después cuantificada y posteriormente codificada. El proceso de cuantificación determina la tasa de bits que depende de la calidad de la imagen. Para mejorar la predicción se propone hacer uso de la Transformada Discreta Coseno (TDC). Esta propuesta consiste en hacer la predicción entre coeficientes en el dominio TDC aprovechando la correlación de los bloques vecinos que son de tamaño 8X8, posteriormente se cuantifican y se codifican mediante el código entrópico de Huffman. Gracias a la TDC se disminuye el impacto visual de la imagen (error de la imagen) provocado por la diferencia entre la imagen original y la imagen de predicción. Este algoritmo se programó en lenguaje C, y se visualiza en una PC, las imágenes tratadas son de tamaño 256X256 pixeles con 256 niveles de gris. ABSTRACT This work presents a technique for the compression and decompression of digital images based in a predictive method that consists basically on using the correlation among the neighborhood of each pixel value to predict each pixel. Difference between the value of the current pixel and its prediction permits to construct a differential image with less correlated pixels. The differential image is then quantified and coded. The quantification process determines the bit-rate and defines the quality of the image. To improve the prediction method, we applied our approach in the Discrete Cosine Transform (DCT) domain. This approach consists on making the prediction among coefficients in the DCT domain, because the correlation of the neighboring 8x8 blocks. Predicted blocks are then coded using an entropy-based code like Huffman. The use of predictive method in the DCT domain diminishes the visual impact of the coded image (visual error) caused by the difference between the original image and the predicted image. This algorithm was programmed in C language, and it is visualized in a PC, the source images are 256X256 pixels with 256 levels of gray.

Transcript of RESUMEN En el presente trabajo se presenta una técnica para la ...

Page 1: RESUMEN En el presente trabajo se presenta una técnica para la ...

RESUMEN En el presente trabajo se presenta una técnica para la compresión y descompresión de imágenes digitales usando como base un método predictivo que consiste básicamente en usar la correlación entre la vecindad de cada valor de pixel para una predicción de cada pixel, la cual se resta del valor del pixel actual para formar una imagen diferencial que está menos correlacionada dentro de la misma imagen La imagen diferencial es después cuantificada y posteriormente codificada. El proceso de cuantificación determina la tasa de bits que depende de la calidad de la imagen. Para mejorar la predicción se propone hacer uso de la Transformada Discreta Coseno (TDC). Esta propuesta consiste en hacer la predicción entre coeficientes en el dominio TDC aprovechando la correlación de los bloques vecinos que son de tamaño 8X8, posteriormente se cuantifican y se codifican mediante el código entrópico de Huffman. Gracias a la TDC se disminuye el impacto visual de la imagen (error de la imagen) provocado por la diferencia entre la imagen original y la imagen de predicción. Este algoritmo se programó en lenguaje C, y se visualiza en una PC, las imágenes tratadas son de tamaño 256X256 pixeles con 256 niveles de gris. ABSTRACT This work presents a technique for the compression and decompression of digital images based in a predictive method that consists basically on using the correlation among the neighborhood of each pixel value to predict each pixel. Difference between the value of the current pixel and its prediction permits to construct a differential image with less correlated pixels. The differential image is then quantified and coded. The quantification process determines the bit-rate and defines the quality of the image. To improve the prediction method, we applied our approach in the Discrete Cosine Transform (DCT) domain. This approach consists on making the prediction among coefficients in the DCT domain, because the correlation of the neighboring 8x8 blocks. Predicted blocks are then coded using an entropy-based code like Huffman. The use of predictive method in the DCT domain diminishes the visual impact of the coded image (visual error) caused by the difference between the original image and the predicted image. This algorithm was programmed in C language, and it is visualized in a PC, the source images are 256X256 pixels with 256 levels of gray.

Page 2: RESUMEN En el presente trabajo se presenta una técnica para la ...

GLOSARIO:

MDIC Modulación Diferencial de Impulsos Codificados.

TCD Transformada Coseno Discreta.

TCDD Transformada Coseno Discreta Directa.

TCDI Transformada Coseno Discreta Inversa.

SVH Sistema Visual Humano.

PÍXEL Elemento de una imagen.

u,v Índices que determinan la frecuencia espacial.

C(u,v) Valor de la función transformada en el dominio de la frecuencia en

algún punto.

RSR Relación Señal a ruido.

R Flujo de datos en una transmisión.

Rmax Flujo máximo de datos en una transmisión.

H(f) Entropía de una fuente de Información.

T Transformación.

Q Cuantificación.

C Codificación.

S0,Sa,Sb, Puntos de muestra sobre líneas sucesivas de una imagen.

S(i) Secuencia de entrada de una imagen digital.

S(p) Secuencia de valores de predicción de una imagen.

e(i) Error de predicción de una imagen

eq(i) Error cuantificado de una imagen.

di Conjunto finito de umbrales de decisión dentro de un cuantificador.

ri Conjunto finito de niveles de reconstrucción dentro de un

Page 3: RESUMEN En el presente trabajo se presenta una técnica para la ...

cuantificador.

MSE Error cuadrático medio.

D Medida de distorsión del error cuadrático medio.

QLM Cuantificador de Lloy-Max.

CLV Codificación de Longitud Variable.

θ Paso de cuantificador.

Mx N Tamaño del bloque en una imagen.

F(u,v) Función en el dominio de la transformada.

α(u),α(v) Constantes de normalización en direcciones u y v

f(x,y) Función analógica en dos dimensiones en algún punto.

x[m,n] Matriz de coeficientes.

A C Conjunto de coeficientes de un bloque Transformado de imagen

agrupados alrededor de la frecuencia cero o elemento F(0,0).

D C Coeficiente F(0,0) de un bloque transformado, el cual es el

promedio de luminancia de dicho bloque.

Page 4: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 1: “TÉCNICAS PARA LA COMPRESIÓN DE IMÁGENES”

Page 5: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 1: “TÉCNICAS PARA LA COMPRESIÓN DE IMÁGENES”

1.1 INTRODUCCIÓN:

En este trabajo se presenta una tabla con 17 técnicas para comprimir imágenes,

las cuales se clasifican en 4 grupos que son [4]:

• a) Codificación pixel por pixel.

• b) Codificación Predictiva.

• c) Codificación por Transformación.

• d) Otros Métodos.

Tabla 1.1 Técnicas para la compresión de imágenes.

CODIFICACIÓN PÍXEL POR

PÍXEL.

CODIFICACIÓN PREDICTIVA.

CODIFICACIÓN POR TRANSFORMACIÓN.

OTROS MÉTODOS.

CUANTIFICACIÓN PCM.

MODULACIÓN DELTA.

CODIFICACIÓN POR ZONAS.

CODIFICACIÓN HÍBRIDA.

CODIFICACIÓN DE LONGITID FIJA Y

VARIABLE.

DPCM LINEA POR LINEA.

CODIFICACIÓN DE UMBRAL.

CODIFICACIÓN GRÁFICA DE

2 TONOS.

CODIFICACIÓN DE PLANOS DE

BITS.

DPCM BIDIMENSIONAL.

TÉCNICAS MULTIDIMENSIONALES.

CODIFICACIÓN DEL COLOR DE LA

IMAGEN.

TÉCNICAS ADAPTABLES.

TÉCNICAS ADAPTABLES.

TÉCNICAS MISCELÁNEAS.

TÉCNICAS INTERCUADRO.

CUANTIFICACION VECTORIAL..

1.2 CODIFICACIÓN PÍXEL POR PÍXEL.

Un esquema general de esta técnica consiste básicamente en que cada

pixel se procesa independientemente. Es fácil de implementar, tiene una tasa de

compresión de 1.5 a 2 bits/píxel. Es muy sensible a los errores en el canal de

transmisión.

Page 6: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 1: “TÉCNICAS PARA LA COMPRESIÓN DE IMÁGENES”

1.3 CODIFICACIÓN PREDICTIVA.

Un esquema general de la codificación predictiva consiste básicamente en

usar la correlación entre la vecindad de cada valor de píxel para una predicción de

cada píxel, la predicción se resta del valor del píxel actual para formar una imagen

diferencial que está menos correlacionada con la imagen original.

La imagen diferencial se cuantifica y posteriormente se codifica (Figura 1.1). El

proceso de cuantificación determina la tasa de bits que depende de la calidad de

la imagen.

Imagen + Imagen Comprimida Original

Predictor

Cuantificador Codificación

Imagen Comprimida Imagen Descomprimida

+ Decodificación y

Cuantificador Inverso

Predictor

Figura 1.1 Diagrama a Bloques para la compresión de imágenes usando

Codificación Predictiva.

En la codificación predictiva se pretende remover una redundancia mutua

entre pixeles y codificar solamente la información nueva. Es fácil de

implementar, tiene baja complejidad en requerimientos de memoria y en número

Page 7: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 1: “TÉCNICAS PARA LA COMPRESIÓN DE IMÁGENES”

de operaciones que se van a desarrollar con respecto a la codificación por

transformación. Tiene una tasa de compresión de 2 a 2.5 bits/píxel.

1.4 CODIFICACIÓN POR TRANSFORMACIÓN.

Un esquema general de la codificación por transformación es el uso de una

transformada donde se involucra subdividir una imagen de N x N en pequeños

bloque de n x n y aplicar una transformación unitaria para cada subimagen.

(Figura 1.2) El objetivo de la transformación es descorrelacionar una señal original

y su descorrelación generalmente resulta de la energía de la señalque está

redistribuida entre un pequeño conjunto de coeficientes transformados. De esta

forma, muchos coeficientes son eliminan, después se cuantifican y finalmente se

codifican [15].

Imagen Original Imagen Comprimida Segmentación

de la imagen en bloques de

n x n

Cuantificación y

Codificación

Transformada

Directa

Imagen I Imagen Reconstruida.

Comprimida

Combinación de

bloques de n x n

Transformada

Inversa

Decodificación y Cuantificación Inversa.

Figura 1.2 Diagrama a bloques para la compresión de imágenes usando

Transformadas.

Page 8: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 1: “TÉCNICAS PARA LA COMPRESIÓN DE IMÁGENES”

Este tipo de codificación es una alternativa a la codificación predictiva, la

codificación por transformación opera directamente sobre los pixeles de una

imagen y se le llama: Método de dominio espacial. La tasa de compresión y la

complejidad computacional incrementan conforme incrementa el tamaño de la

subimagen. El tamaño más popular de una subimagen es de 8 X8 y 16 X 16. La

codificación por transformación logra tener una tasa de compresión mas grande

que la codificación predictiva. La tasa típica de compresión es de 2-4 bits/píxel.

1.5 COMPRESIÓN BASADA EN OTROS MÉTODOS.

La compresión se realiza basados en algoritmos que ofrecen una mínima

compresión, tratando de justificar dichos algoritmos, además de que

son de diferente naturaleza, debido a que por sí solos no son prácticos y no se

consideran como una buena opción para la compresión de imágenes como lo es el

método de compresión por Huffman, que por sí solo produce una compresión muy

pequeña y no es muy útil para las imágenes digitales, pero es parte fundamental

del proceso de compresión con la Codificación Predictiva y la Transformada

Coseno Discreta que se describirá en el capítulo 2, los métodos tienen igualmente

su propia técnica pero se distinguen entre ellos porque en algunos la compresión

es alta y la imagen recuperada es de muy mala calidad visual, se siguen

implementando mejoras para poder lograr un mejor desempeño[14].

Page 9: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 1: “TÉCNICAS PARA LA COMPRESIÓN DE IMÁGENES”

1.6.-FUNDAMENTOS DE LA IMAGEN DIGITAL.

El término imagen se refiere a una función bidimensional de intensidad de

luz f(x,y), donde x e y representan las coordenadas espaciales y el valor de f en un

punto cualquiera(x,y) es proporcional al brillo de la imagen en ese punto.

Una imagen digital es una imagen con función f(x,y) que se ha discretizado

tanto en coordenadas espaciales como en el brillo. Una imagen digital se puede

considerar como una matriz cuyos índices de fila y columna identifican un punto de

la imagen y el valor del correspondiente elemento de la matriz indica el nivel de

color en ese punto (Figura 1.3).

Para generar una imagen digital, la fuente se debe muestrear y discretizar en

ocasiones usando algún tipo de sensor (digitalizador, cámaras de video, fax, etc).

Los elementos de una distribución digital de este tipo se denominan

elementos de la imagen comúnmente llamados pixeles o pels, abreviaturas de la

palabra inglesa << picture elements>>. El valor del pixel producido por el sensor

es continuo sobre un rango finito son considerados linealmente como unidades

que radian la intensidad de energía en cada localidad muestreada. El uso del

término energía radiada, es relativo, puesto que el sensor puede ser sensible a

longitudes de onda fuera del intervalo del Sistema Visual Humano [1].

Page 10: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 1: “TÉCNICAS PARA LA COMPRESIÓN DE IMÁGENES”

Eje x

Eje y

f(x,y)

FIGURA 1.3-Ubicación de los ejes de referencia en una imagen digital, así como la

posición de un pixel.

Page 11: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Page 12: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Una regla fundamental de la compresión es que no se debe degradar

perceptiblemente su calidad visual, es decir, que la calidad de la imagen no se vea

deteriorada.

La compresión es posible gracias al alto grado de correlación en las imágenes, es

decir bloques adyacentes de la imagen que tienen intensidades similares.

La correlación de divide en:

1) Correlación espacial (intra-imagen): hace referencia a la redundancia

espacial, es decir, a la semejanza que existe entre los pixeles adyacentes.

2) Correlación temporal (inter-imagen): hace referencia a la semejanza que

existe entre imágenes sucesivas, es decir, es la recurrencia de los valores

de los pixeles de una imagen a otra dentro de una secuencia.

Figura 2.1. -- Correlación Espacial.

La correlación intra o inter-imagen se puede interpretar de dos formas:

a) información redundante.

b) información irrelevante.

Page 13: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

La redundancia de la información visual se puede medir utilizando las técnicas de

la teoría de la información [1].

La información irrelevante no se puede medir matemáticamente, por lo que su

medición resulta un tanto subjetiva, pues la historia de estímulos visuales de quien

está observando la imagen es factor determinante en la percepción visual.

La teoría de la información aporta el concepto de entropía a la compresión de

imágenes. Y según la misma teoría de información el contenido de información de

un símbolo estadísticamente independiente que pertenece a un alfabeto finito

está relacionado con el hecho de que el símbolo sea predecible o no. De acuerdo

a la teoría de la información, la longitud óptima para el código para el código de

un símbolo y el número de bits de información transmitidos cuando el símbolo es

enviado, está dado por:

Ls=log2(1/Ps) (2.1)

donde:

Ls es la longitud óptima del código.

Ps es la probabilidad de ocurrencia de un símbolo.

Entonces, la entropía de una fuente f de alfabeto x se define como el

promedio de la información transportada por cada símbolo, donde su

representación matemática se expresa de la siguiente manera:

H(f)= )/1(log2 ss

s PP∑ ) bits (2.2)

Page 14: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

donde:

H(f) es la entropía de una fuente.

Ps es la probabilidad de ocurrencia de los símbolos.

Entonces sí los símbolos presentan igual probabilidad de aparición, es

decir, son equiprobables, la entropía se maximiza, en el caso de que los símbolos

presenten probabilidades variadas de aparición, entonces la entropía tiende a

disminuir. Lo anterior se puede interpretar como que los símbolos de baja

probabilidad de aparición transmiten mayor información mientras que los símbolos

de alta probabilidad de aparición transmiten poca información.

De lo anterior surgen 2 teoremas fundamentales:

1) Teorema de Codificación sin pérdidas o de Shannon. El flujo de datos que es

posible lograr en un sistema de codificación sin pérdidas de una fuente

estadísticamente independiente es:

Rmin = H(f) +e bits/símbolo. (2.3)

donde:

R es el Flujo de la transmisión

H(f) es la entropía de una fuente

e es un valor cercano a 0

2) Teorema de Codificación con Pérdida. Es necesario establecer un umbral

mínimo del flujo de datos en función de la distorsión máxima permitida. Lo que

Page 15: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

lleva a definir una medida de distorsión que permita medir la degradación

introducida a la señal fuente y aunque debiera provenir de un modelo del SVH

(Sistema Visual Humano), esto no es posible, por lo que en la práctica se usa la

medida matemática denominada relación señal a ruido (RSR) que se deriva del

error cuadrático medio como se muestra a continuación:

⎟⎟⎟

⎜⎜⎜

−= ∑

imagen

imagen

xx

xRSR 2

2

10 ´)(log10 dB (2.4)

donde:

RSR es la relación señal a ruido

x es el conjunto de elementos que conforman a la imagen original.

x´ es el conjunto de elementos que conforman a la imagen descomprimida

(recuperada).

Para obtener una calidad apropiada de las imágenes codificadas, la

distorsión permitida debería ser equivalente a la información irrelevante desde el

punto de vista del SVH.

A partir de estos conceptos, podemos definir un esquema a bloques de un sistema

de compresión de imágenes, el cual se muestra en la figura 2.2

Page 16: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Figura 2.2. ----Esquema básico de compresión.

El esquema comprende 3 etapas:

La Transformación permite obtener una representación menos redundante de la

señal imagen (extracción de las características específicas tales como

frecuencias, estadísticas, etc). Es la detección de información relevante e

irrelevante.

La Cuantificación permite generar un número finito de símbolos que representen

la información imagen. Es la eliminación de la información irrelevante.

La Codificación es el proceso que permite asignar un código binario específico a

cada símbolo cuantificado.

Aquí el proceso de transformación no es destructivo o “lossless”, es decir, no

produce pérdida, pues busca utilizar transformaciones reversibles para mantener

calidad visual, en cambio, la compresión efectiva de la información se realiza en

las etapas de la cuantificación y la codificación puesto que buscan minimizar el

flujo de datos, por lo tanto son procesos destructivos o “lossy” produciendo pérdida

de información.

Page 17: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

La eliminación de la redundancia en la fuente de información se lleva a

cabo mediante un análisis estadístico de la fuente, mientras que la eliminación de

información irrelevante se realiza con un análisis psicovisual de la fuente de

información. La mayor parte de los sistemas de compresión se basan en la

eliminación de redundancia espacial mediante la transformación de datos (TCD,

ondículas, Transformada Haar, etc), la eliminación de redundancia temporal,

utilizando un esquema MDPC (MODULACIÓN DIFERENCIAL DE IMPULSOS

CODIFICADOS), en el dominio espacial y codificación entrópica [20].

Dentro de las 17 técnicas mencionadas en el capítulo 1 para comprimir imágenes,

se escogió al grupo de los códigos predictivos, por su fácil implementación y

programación computacional. MDPC es una técnica que pertenece a los códigos

predictivos y estos son fáciles de implementar, sensibles a los datos estadísticos,

son rápidos, tienen más baja complejidad en requerimientos de memoria y en

número de operaciones a ser desarrolladas[4].

Por lo tanto, se requiere un desarrollo de tesis implementado esta técnica en

software con lenguaje C para mejorar sus limitaciones que tiene hasta ahora y

obtener mejores índices de compresión de imágenes; dicha técnica no comprime

mucho, por lo que tenemos que auxiliarnos de otras técnicas para tener un alto

índice de compresión de imágenes por lo que se optó por auxiliarnos del grupo de

los “Sistemas Transformadores de Códigos“ y seleccionamos a la Técnica

llamada “ TRANSFORMADA DISCRETA COSENO” (TCD), razón por la cual se

Page 18: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

pretende hacer de las 2 técnicas una sola, aplicando las propiedades y

características de cada una y así lograr mejores índices de compresión.

La técnica desarrollada en el presente trabajo para lograr la compresión de una

imagen es el método MDPC (MODULACIÓN DIFERENCIAL POR

CODIFICACIÓN DE PULSOS); este método pertenece al grupo de los códigos

predictivos. Es un método simple, elegante y originalmente desarrollado para este

propósito que es la COMPRESIÓN DE IMÁGENES. Además no hace

suposiciones muy sofisticadas en el tratamiento de la imagen excepto cuando se

trata de aislar el ruido que hay en una imagen [4].

Hablando mas ampliamente de los códigos predictivos, tenemos que un

código predictivo usa valores obtenidos durante la digitalización de una secuencia

de imagen para estimar el valor del próximo elemento a través de una línea. Esto

es cuando se hace la predicción de elementos de una imagen en una dimensión.

El orden de un sistema predictor es simplemente el número de elementos previos

usados en hacer la predicción.

El método predictivo siempre es referido como ¨causal¨ a diferencia de otros

métodos que no dependen exclusivamente de elementos que han sido

previamente procesados los cuales nos referimos como ¨no causales¨.

Un sistema predictor se basa en un codificador y un decodificador, donde la

función del codificador es predecir y cuantificar una secuencia de imagen que se

va a transmitir; la función del decodificador es la reconstrucción de la imagen, es

Page 19: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

decir, sus elementos de reconstrucción dependen de muestras procesadas

previamente en el codificador.

El principio básico de operación de un código predictivo es:

Un número de elementos previos se usa para estimar el valor de la muestra

actual; y la diferencia entre el valor actual y el valor estimado forma la señal que

se va a transmitir.

La función del decodificador(que opera en sincronía con el codificador) es hacer la

misma predicción de muestras previamente codificadas donde se recibe y se

agrega la señal de error para regenerar el valor de muestra actual.

Esta técnica fue originalmente descrita por Cutler en (1952), luego por O´neal en

(1966), Musmann en (1979) y Jayant Noll en (1984) [2].

Una desventaja que presenta un sistema predictivo es que el sistema es muy

sensible a los errores de almacenamiento o en la transmisión de la señal. Esto se

puede compensar reduciendo la eficiencia del predictor y también no hay un alto

índice de compresión, puesto que entre mayor sea el índice de compresión mayor

es el error.

Como ya se mencionó en párrafos anteriores, el objetivo primordial de la

predicción es obtener el valor de la muestra actual a partir de valores de muestras

ya conocidos que ya han sido previamente procesados, los elementos de imagen

al ser capturados por una cámara se generan en forma serial (línea de imagen)

como se observa en la figura 2.3 [2].

Page 20: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Figura 2.3. – Disposición de puntos de muestra sobre líneas sucesivas de imagen

hecha por un digitalizador.

2.1-PREDICCIÓN EN UNA DIMENSIÓN.

Cuando se hace la predicción del elemento Sc, por ejemplo, solo se podrá

hacer con el valor de Sb y de Sd (ver Figura 2.3) y por consiguiente esto limita

mucho la eficiencia de predicción porque solo se pueden tomar valores conocidos

en la línea que se quiere hacer la predicción y solo deben distar del punto en

donde se requiera hacer la predicción una posición [2]. Lo anterior queda como se

muestra a continuación:

Page 21: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

⎟⎠⎞

⎜⎝⎛ +

=2

´ dbC

SSS (2.5)

donde:

Sb y Sd son pixeles sobre una línea de imagen, de valor conocido que se usan

para estimar el valor de Sc.

S´C es el valor estimado(predicho) sobre una línea de imagen.

2.2 PREDICCIÓN EN 2 DIMENSIONES.

Cuando se hace la predicción del elemento Se, por ejemplo, se puede

hacer la predicción de dicho elemento con los valores conocidos de Sb,Sc,Sd,Sa, y

So (ver Figura 2.3) y esto nos aumenta la eficiencia de predicción y por

consiguiente un buen índice de compresión[2]. Lo anterior queda como se

muestra a continuación:

⎟⎠⎞

⎜⎝⎛ ++++

=5

´ oadcbe

SSSSSS (2.6)

donde: Sb ,Sc,Sd,Sa y So son pixeles sobre una línea de imagen, de valor conocido que se

usan para estimar el valor de Sc

S´C es el valor estimado(predicho) sobre una imagen en 2 dimensiones.

Por eso se decidió hacer este sistema predictor MDPC en 2 dimensiones,

para mejorar la eficiencia del predictor.

Page 22: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Observemos a continuación las siguientes figuras donde se muestran los

diagramas a bloques del codificador (ver figura 2.4) y decodificador (ver figura 2.5)

del sistema DPCM.

Figura 2.4- Diagrama a bloques del codificador de un sistema MDPC.

Figura 2.5.-Diagrama a bloques del decodificador de un sistema MDPC.

El sistema codificador-decodificador (ver Figuras 2.4 y 2.5) opera de la

siguiente manera:

En la imagen digital se tiene una secuencia de valores discretos de imagen S(i),

donde el valor típico de cuantificación es uniformemente a 8 bits de resolución.

Cada uno de estos valores S´(i) de predicción se restan de la secuencia de la

Page 23: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

señal de entrada para producir la secuencia de error, (dicho esto en otras

palabras, de la imagen original restamos la imagen obtenida de predicción y

obtenemos la imagen con error) y esto matemáticamente es:

e(i)=S(i) – S´(i) (2.7)

donde:

e(i) es la secuencia de error en una imagen.

S(i) es la secuencia de entrada al sistema de una imagen digital.

S´(i) es la secuencia de predicción de una imagen.

Esta secuencia se cuantifica, donde se especifica el número de niveles a

cuantificar, y esto nos sirve para obtener el índice de compresión.

La operación se considera para agregar una cantidad de error de cuantificación

(imagen de error cuantificada) a cada muestra, lo que nos produce la secuencia

codificada:

e(i)q = e(i) + q(i) (2.8)

donde:

e(i)q es la secuencia de error cuantificado de una imagen.

e(i) es la secuencia de error de una imagen.

q(i) es la secuencia de cuantificación de una imagen.

Page 24: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Luego interviene la etapa de codificación de los símbolos cuantificados y

obtenemos la compresión de la imagen.

Cabe destacar que los valores utilizados en la predicción, tanto en el codificador

como en el decodificador, deben ser iguales [2].

2.3. -CODIFICACIÓN DIFERENCIAL.

La codificación diferencial juega un papel importante en los estándares de

compresión de imágenes. La base de la codificación diferencial es la Modulación

de Impulsos Codificados ó MPC, (ver Figura 2.6).

Figura 2.6-Forma de la MPC diferencial donde se hace la cuantificación de los

pixeles individualmente.

La MIC permite la transmisión discreta de la información en los límites del canal

de transmisión.

El envío de un código finito consta de:

Alfabeto de M elementos.

Transmisión de un código cada T segundos.

Page 25: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

El flujo de datos total (flujo entrópico) para las dos condiciones anteriores está

dado por:

R = (1/T) log2 M bits/seg (2.9)

donde:

R es la rapidez de información que tiene un flujo entrópico.

T es la rapidez de cada símbolo.

M es el número de elementos que tiene un código.

La capacidad que tiene un canal de comunicación de transmitir información,

está determinada por la cantidad de bits que se transmiten, y la cantidad de bits

que se modifican debido al ruido. Por lo tanto, la capacidad real de un canal de

comunicaciones está determinada por la cantidad de información que se puede

transmitir sin errores [20]. Por lo que la capacidad del canal C debe ser mayor

que R es decir:

CR ≤ bits/seg (2.10)

donde:

R es la rapidez de información que tiene un flujo entrópico.

C es la capacidad de un canal de comunicaciones.

En caso de tener un canal limitado en banda se tiene:

R=(2B) log2 M bits/seg (2.11)

Page 26: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

donde:

R es la rapidez de información que tiene un flujo entrópico.

B es al ancho de banda del canal de comunicaciones.

M es el número de elementos que tiene un código.

2.4. -CUANTIFICACIÓN.

La cuantificación es el proceso de la representación de un conjunto de valores

contínuos por un número finito de estados o valores.

Existen 2 tipos de cuantificación según sus tipos de entradas:

a) Cuantificación Escalar: cada muestra se trata independientemente.

b) Cuantificación Vectorial: conjuntos de muestras que son tratados

independientemente.

Existen 2 tipos de cuantificadores según su método de asignación de valores

finitos:

a) Cuantificador uniforme (lineal)

b) Cuantificador no uniforme (no lineal)

Cuantificación Escalar.

Un Cuantificador escalar Q(.) es una función definida en términos de un

conjunto finito de umbrales de decisión di y niveles ri de reconstrucción :

Q(s) = ri, si s ε [di-1,di]; i = 1, ....L (2.12)

Page 27: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

donde:

L es el número de niveles.

di son los umbrales de decisión.

ri son los niveles de reconstrucción.

Cuantificación Vectorial.

En la cuantificación vectorial se busca, un conjunto de vectores cuyos valores

contínuos sean representados por un conjunto finito de vectores de estado.

Por supuesto los elementos de reconstrucción ri son una aproximación, que

engendra un error, pérdida o distorsión:

Q(s) = s´ e= s-s´ (2.13) ⇒

Donde:

s es el valor de la muestra original.

s ´ es el valor de la muestra estimado.

e es el error que se produce.

La eficiencia de un codificador depende en gran medida de la eficiencia del

cuantificador, en función del error e, los umbrales de decisión di y los niveles de

reconstrucción ri.

Page 28: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

La s es una variable aleatoria en una función de densidad de probabilidad (pdf) y

si usamos el ECM (error cuadrático medio) como una medida de distorsión D dada

por:

D = E{(s -s´)2} (2.14)

donde:

E es un operador de la medida de distorsión D.

En general, existen 2 criterios para obtener cuantificadores óptimos:

1) Sea L el número de niveles fijo, donde hay que encontrar a ri , hacemos

(i=1…..L) y di (i =0…. L) de forma que minimizar a D. Este cuantificador es

conocido con el nombre de “Lloyd Max.”

2) Para una entropía de salida constante H(s´) donde hay que encontrar a ri y

di y L es desconocida de forma de minimizar a D. Este cuantificador es

conocido con el nombre de “cuantificador restringido a la Entropía”

Los cuantificadores de Lloyd-Max (QLM) son apropiados para la codificación de

símbolos de longitud fija.

Los cuantificadores restringidos a la Entropía son apropiados para la codificación

de símbolos de longitud variable (VLC), por ejemplo el Código de Huffman, o un

código aritmético [20].

Cuantificación Uniforme.

En el cuantificador uniforme, los niveles ri están igualmente espaciados:

Page 29: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

11 −≤≤Φ=+ Liri (2.15)

donde:

Φ es el paso de cuantificación.

El diseño de un cuantificador uniforme es una tarea trivial:

Un cuantificador de Lloyd-Max se puede convertir en un cuantificador uniforme si

p(s) está uniformemente distribuida sobre un intervalo [A, B] dado por:

p s( ) =⎧⎨⎩

1

0B A A s B

en otro caso− ≤ ≤ (2.16)

El diseño de un cuantificador uniforme es una tarea trivial:

L

AB −=Φ (2.17)

(2.18) LiiAdi ≤≤Φ+= 0

Lidr ii ≤≤Φ

+= − 121 (2.19)

Cuantificación No Uniforme.

El cuantificador (QLM) requiere minimizar:

Page 30: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

E{(s-ri)2} = (2.20) ( ) ( )s r p s dsii

L

di

di −−∫∑

=

2

1 1

La minimización de la función anterior debe ser con respecto a las variables ri y di.

Las condiciones necesarias para la minimización de EMC son:

Lidssp

dssspr di

d

d

di

i

i ≤≤=∫∫

− 1)(

)(

11

1 (2.21)

Lirr

d iii ≤≤

+= + 1

21 (2.22)

(2.23) ∞=−∞= Ldyd 0

Las expresiones anteriores se interpretan de la siguiente manera:

Cada nivel ri es el centroide de p(s) en el intervalo di-1<s<di, es decir, la

esperanza condicional de s en ese intervalo.

Los umbrales di son el punto medio de dos niveles de reconstrucción, excepto

para d0 y dL

La solución final puede encontrarse mediante métodos iterativos como Newton-

Raphson o de agrupamiento como el LGB(Linde, Buzo, Gray).

Los umbrales de decisión así como los niveles de reconstrucción no están

igualmente espaciados[20].

Page 31: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

2.5.- CODIFICACIÓN.

Un código es un conjunto de símbolos(letras, bits, números o similares)

utilizados para representar un cuerpo de información o un conjunto de sucesos. A

cada pieza de información o suceso se le asigna una secuencia de símbolos

codificados, denominada “palabra código”. El número de símbolos de cada palabra

código es su longitud [1].

2.5.1.-Codificación Entrópica.

La eliminación de la información redundante se da mediante la codificación

adecuada de los símbolos, basados en la entropía de cada uno.

Existen 2 tipos de codificadores de símbolos:

1) Codificación en longitud fija.

2) Codificación en longitud variable.

Codificación en longitud fija.

La codificación en longitud fija corresponde a la hipótesis que todos los símbolos

son equiprobables y en cantidad potencia de 2.

Toda codificación asignada a los símbolos tiene igual tamaño (Ver Figura 2.7)

Se usan 2 esquemas:

a) La Codificación binaria natural

b) La Codificación Gray (distancia =1)

Page 32: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Figura-2.7-Codificación en longitud fija.

La Codificación de Gray permite la detección de error y son ampliamente

usados en la codificación por planos.

La codificación por planos consiste en descomponer la imagen en n planos o

imágenes binarias, siendo n número de bits por pixel.

Cada imagen binaria está constituida por los pixeles de un mismo orden m

(2.24) 012

21

1 2.....22 aaaa mm

mm ++++ −

−−

Veamos un ejemplo de una codificación por planos mostrado en la figura 2.8

Figura 2.8 Ejemplo de una codificación por planos.

Page 33: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

El inconveniente de esta representación es que tiene ligeros cambios en los

valores de 2 pixeles consecutivos, debidos a ruido, y generan fuertes variaciones

en los planos, por ejemplo la representación en binario de:

127 es 0 1 1 1 1 1 1 1 y 128 es 1 0 0 0 0 0 0 0

Codificación en Longitud variable.

En la codificación en longitud variable el cálculo de probabilidad de aparición por

símbolo, permite generar códigos adaptados a la Entropía de la fuente.

Entre los algoritmos de codificación destacan:

• Shannon-fano.

• Huffman.

• Término.

• Aritméticos.

• Ziv-Lempel.

Codificación por Huffman.

Esta técnica fue descrita en 1952. El método de Huffman garantiza una

codificación en longitud variable sin ambigüedad y óptimo.

La codificación por Huffman es un esquema de compresión que usa las

estadísticas de un conjunto de datos a ser comprimido. Las probabilidades de

Page 34: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

ocurrencia son calculadas de todos los posibles valores del conjunto de datos (de

una imagen) y entonces se ordenan.

La técnica más popular para la eliminación de la redundancia de la codificación es

la de Huffman. Cuando se codifican individualmente los símbolos de una fuente de

información, la codificación por Huffman consigue el número más pequeño posible

de símbolos de código por símbolos de la fuente [15],[20].

El algoritmo reduce etapa por etapa la longitud de la codificación para cada

símbolo:

Se inicia con M símbolos a codificar.

La reducción termina cuando se llega a una etapa con 2 símbolos a considerar

(caso binario)

ALGORITMO:

1) Ordenar los símbolos en orden decreciente por su probabilidad de aparición.

2) Combinar las 2 probabilidades menores y reordenar la lista. Repetir hasta que

la lista cuente con solo 2 probabilidades.

3) Iniciar la codificación asignando un 0 o un 1 a cada una de las probabilidades

de la lista final.

4) Repetir la asignación hacia las listas precedentes heredando los valores

atribuidos.

Esto se entiende mejor, si se ve un ejemplo:

Suponga que se tienen 8 niveles de gris en una imagen, sus probabilidades de

una escala de grises están dadas por lo siguiente:

Page 35: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

0.35, 030, 0.15, 0.08, 0.05, 0.03, 0.03, 0.01

estas probabilidades de aparición generan el árbol binario de la figura 2.9.

Figura 2.9.- Generación del código de Huffman.

Las codificaciones en longitud variable generados cuentan con un símbolo binario

de término al final.

Las codificaciones generadas son más tolerantes a los errores de transmisión.

La MPC Diferencial ó (MDPC) es un proceso que permite aprovechar la

redundancia espacial o correlación de la señal de entrada de forma de disminuir

la dinámica de la información a cuantificar.

Reducción de la dinámica = Cuantificación eficiente.

Siendo la Modulación de Impulsos Codificados (MPC) un proceso basado en la

cuantificación de símbolos independientes, no es posible obtener grandes

Page 36: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

márgenes de compresión, por lo que nos tenemos que auxiliar de la codificación

por transformación para lograr mejores índices de compresión[20].

Codificación por Transformación.

La TCD pertenece a los grupos transformadores de códigos. Al igual que la

MICD, la codificación por transformación es una codificación con pérdida.

La pérdida en la señal es debido al proceso de cuantificación asociado a este tipo

de técnicas.

Sin embargo, la pérdida es selectiva de manera que se preserven las

características de base de la señal original.

En la codificación por transformación, la información se codifica por paquetes,

bloques o vectores:

Esta representación es favorable si se busca eliminar la correlación espacial en las

imágenes.

Las técnicas de codificación por transformación buscan convertir un conjunto de

valores inter-dependientes entre sí, en un conjunto de coeficientes

estadísticamente independientes [20].

2.6. –La Transformada Coseno Discreta (TCD).

Definida en 1974, sus ventajas son las siguientes:

La señal de entrada es proyectada sobre un plano generado por una base de

funciones ortogonales: Simplicidad de Cálculo.

Existe una transformación reversible usando la misma base ortogonal[20].

Page 37: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

La TCD se aplica sobre bloques de información de MxN elementos (normalmente

M=N)

La TCD directa [1] se define por:

))2

)12(cos()2

)12(cos(),()(()(),(1

0

1

0 Nvy

MuxyxfvuavuF

M

x

N

y

++= ∑∑

=

=

ππα ( 2.25)

para: u=0. M-1 y v=0.....N-1

donde:

1)(⎩⎨⎧

=N

uα para u=0 (2.26)

2)(⎩⎨⎧

=N

uα para u=1,2,.....N-1 (2.27)

En la ecuación (2.25) “x” representa el desplazamiento entre las muestras de la

fila (una unidad por muestra), “y” representa el desplazamiento entre las muestras

de la columna (una unidad por muestra), “u” representa un índice que determina la

frecuencia espacial. El término α(u) es simplemente un factor de normalización. La

constante aditiva (2x+1) ó (2y+1) se usan para cambiar los puntos de muestreo ya

que ellos son simétricos alrededor del centro del Intervalo de N puntos. La

descomposición de las muestras dentro del conjunto de los coeficientes TCD es

comúnmente llamada Transformada Coseno Discreta Directa (TCDD) [2].

La TCD Inversa [1] está definida por:

))2

)12(cos()2

)12(cos(),()()((),(1

0

1

0 Nvy

MuxvuFvuyxf

M

u

N

v

++= ∑∑

=

=

ππαα (2.28)

Page 38: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

para x=0. M-1, y=0........N-1

donde:

1)(⎩⎨⎧

=N

uα para u=0 (2.29)

2)(⎩⎨⎧

=N

uα para u=1,2,.....N-1 (2.30)

La distribución promedio de la energía en el espacio transformado se encuentra en

los elementos cercanos a F(0,0)

La amplitud de los coeficientes F(u, v) decrece a medida que u y v aumentan (se

alejan de F(0.0)

Los coeficientes representan la distribución de la luminosidad de los pixeles de un

bloque de imagen, esto quiere decir que hay una distribución de las frecuencias

espaciales.

Hay cambios progresivos de luminosidad representados por los coeficientes de

baja frecuencia, que son los coeficientes cercanos a F(0,0).

Hay cambios abruptos representados por los coeficientes de alta frecuencia, que

son los coeficientes alejados de F(0,0).

El coeficiente F(0,0) representa el promedio de luminosidad del bloque

multiplicado por un factor constante, que depende a su vez del tamaño del bloque:

Page 39: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Es decir )8(]255*8[)0,0(0 ==≤≤ NMF

Cabe hacer notar que la eliminación o alteración de algunos coeficientes

transformados no modifican de manera considerable el contenido visual de un

bloque imagen y el error se reparte de manera uniforme.

La compresión de imágenes por medio de la TCD se efectúa mediante la

cuantificación escalar de los coeficientes transformados:

Hay disminución de la dinámica de los valores de cada coeficiente, se eliminan los

menos relevantes.

La cuantificación se efectúa de manera fina en las bajas frecuencias y

burdamente en las altas frecuencias [20].

La compresión resulta de la cancelación de coeficientemente pequeños y la

cuantificación de la tasa-bit variable de los restantes. Los datos de una imagen

que se pueden someter a un buen grado de compresión tienen un valor

relativamente alto de coeficientes de correlación. Se ha demostrado también que

esta propiedad se extiende hacia el conjunto de coeficientes que se obtiene por

otras transformadas como la Transformada de Fourier y de esta manera suponer

encontrar coeficientes de gran magnitud, llamados coeficientes A.C., agrupados

alrededor de la frecuencia cero (ó elemento de D.C.) el cual está situado en la

esquina superior izquierda de la matriz de coeficientes. Los coeficientes de A.C.

son más pequeños de magnitud y se encuentran situados en lo que resta de la

Page 40: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

matriz de coeficientes, representando a las frecuencias altas en ambas

direcciones: horizontal y vertical) .

El coeficiente de D.C. es simplemente el promedio de luminancia de todos los

elementos en el bloque de una imagen [1],[2],[4],[5],[15].

2.7.- La Transformada Rápida Coseno.

La Transformada más óptima que se considera para la compactación es la

de Karhunen Loeve (TKL). Sin embargo, esta transformada no tiene una eficiente

implementación computacional. La Transformada Coseno Discreta que se ha

desarrollado se compara en optimización a la TKL y se puede implementar

computacionalmente como una aproximación de la Transformada Rápida de

Fourier [21], [23].

Esta Transformada tiene una eficiencia de compactación de energía casi óptima a

la de la TKL, es por eso que ha llegado a se el estándar en compresión de

imágenes [24].

La Transformada Coseno Discreta(TCD) se usa ampliamente en voz y codificación

de imagen. Se han propuesto muchos algoritmos para calcular la TCD, los cuales

se pueden clasificar en 3 grupos:

a) Cálculo indirecto usando la Transformada Rápida de Fourier y la

Transformada Walsh-Hadamard.

b) Cálculo directo a través de la factorización de matriz o cálculos recursivos.

c) Algoritmos óptimos basados en la teoría compleja [24].

Page 41: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Un gran número de algoritmos de Transformadas Rápidas Coseno (TRC) se

han desarrollado, entre los más eficientes destaca el de Chan y Ho [22].

Este algoritmo sigue una lógica similar a la de la Transformada Rápida de

Fourier (TRF), excepto que ésta, es precedida por un reordenamiento en los

datos de entrada [22].

Dado que la TCD posee la propiedad de separabilidad, el vector base

descompone el punto (NxN) de la TCD en cuatro puntos (N/2 x N/2), el proceso

se repite hasta que únicamente queden 2 puntos(2x2) de la TCD.

Un vector base 2-D de la TRC basado en el algoritmo de 1-D de la TRC ha

sido propuesto en aplicaciones tales como compresión de imágenes, en

bloques pequeños (típicamente 8X8 ó 16X16) que son transformados en un

apropiado número de bits almacenando la imagen en el dominio de la

transformada.

Este procedimiento es igual a la Transformada de Fourier (ver Figura 2.10)[22]

Figura 2.10.- Diagrama de la Transformada Rápida Discreta Coseno.

Page 42: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

⎥⎦

⎤⎢⎣

⎡ +⎥⎦

⎤⎢⎣

⎡ += ∑∑

=

= 2

221

0

1

0 1

112121 2

)12(2

)12(),(

24

),(1

1

1

2

21

NKn

CosN

KnCosnnx

NKKX

N

n

N

n

KK ππεε (2.31)

donde:

⎥⎦

⎤⎢⎣

⎡====

ji

CosKK

πεε I

JC 0;K para 2

122

(2.32)

caso otro para 122== KK εε (2.33)

El algoritmo se describe a continuación:

Primero se toma la Transformada Coseno Discreta de una sola dimensión la cual

está definida como sigue:

∑−

=⎥⎦⎤

⎢⎣⎡ +

=1

0 2)12(

)(2

)(N

n

k

Nkn

CosnxN

kXπε

(2.34)

donde: 0k para 2

1==kε (2.35)

caso otro para 1=kε (2.36)

donde: k=0,1,2,....,N

Los datos de entrada x(n) son reordenados como sigue:

)12()1(~

12N

,0,1,2,....n para )2(~

+=−−

−==

nxnNx

nxx (2.37)

Se substituye la ecuación (2.37) en la ecuación (2.34) y reduciendo se obtiene:

∑−

=⎥⎦⎤

⎢⎣⎡ +

=1

0 2)14(

)(~)(N

n Nkn

CosnxkXπ

(2.38)

Page 43: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Después se realiza lo que se conoce como escalamiento en frecuencia que se

emplea mucho en la Transformada Rápida de Fourier(TRF). El término X(k) se

expresa como elementos pares e impares con sus respectivos índices como se

indica a continuación:

Términos pares:

∑−

=⎥⎦⎤

⎢⎣⎡ +

=1

0 22)14(

)(~)2(N

n Nkn

CosnxkXπ

(2.39)

La ecuación anterior se puede expresar como sigue:

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

⎥⎦⎤

⎢⎣⎡

⎟⎠⎞

⎜⎝⎛

++= ∑⎟⎠⎞

⎜⎝⎛

=

22

)14(2

~)(~)2(2

0 Nkn

CosN

nxnxkX

N

n

π (2.40)

Términos Impares:

∑−

=⎥⎦⎤

⎢⎣⎡ ++

=+1

0 2)12)(14(

)(~)12(N

n Nkn

CosnxkXπ

(2.41)

Después de algunas operaciones se puede expresar como:

⎥⎦⎤

⎢⎣⎡

++

⎥⎦⎤

⎢⎣⎡

⎟⎠⎞

⎜⎝⎛

+−=+ ∑−

=)12(

2)14(

2~)(~2)12(

1)2/(

0k

Nn

CosN

nxnxkXN

n

π (2.42)

En esta ecuación se emplea la siguiente identidad trigonométrica:

( )[ ] [ ] ( )[ ]Φ−−Φ=Φ+ 122212 kCoskCoskCos

⎥⎦⎤

⎢⎣⎡

−+

⎥⎦⎤

⎢⎣⎡

⎥⎦⎤

⎢⎣⎡

+−−

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛

+⎥⎦⎤

⎢⎣⎡

⎟⎠⎞

⎜⎝⎛

+−=+

=

=

)12(2

)14(2

~)(~

22

)14(2

~)(~2)12(

1)2/(

0

1)2/(

0

kNn

CosN

nxnx

Nn

CosN

nxnxkX

N

n

N

n

π

π

(2.43)

Page 44: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

El segundo término de la ecuación (2.13) es X(2k-1), de aquí que ésta se reduzca.

)12( 2

2

)14(2

)14(2

~)(~2)12(1)2/(

0

−−

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛

+

⎭⎬⎫

⎩⎨⎧

⎥⎦⎤

⎢⎣⎡ +

⎥⎦

⎤⎢⎣

⎡⎟⎠⎞

⎜⎝⎛

+−=+ ∑−

=

kX

kNn

CosNn

CosN

nxnxkXN

n

ππ (2.44)

Para poder simplificar mejor estas ecuaciones, se recurre a una sustitución de

variables de algunos términos de las ecuaciones (2.33) y (2.44) como sigue:

⎟⎠⎞

⎜⎝⎛

++=2

~)(~)(00

Nnxnxnx (2.45)

⎟⎠⎞

⎜⎝⎛ +⎟

⎠⎞

⎜⎝⎛

⎟⎠⎞

⎜⎝⎛

+−=Nn

CosN

nxnxnx2

)14(2

2~)(~)(01

π (2.46)

Por consiguiente las ecuaciones (2.33 ) y (2.44) quedan redefinidas como sigue:

∑−

=

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

=1)2/(

000

22

)14()()2(

N

n Nkn

CosnxkXπ

(2.47)

)12(

22

)14()()12(

1)2/(

001 −−

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

=+ ∑−

=kX

Nkn

CosnxkXN

n

π (2.48)

En la figura 2.11, las ecuaciones (2.47) y (2.48) representan el siguiente diagrama

de flujo, en él se observa que X(1)= X(-1), las ecuaciones (2.46) y (2.45) son las

ecuaciones para las operaciones de las mariposas.

Page 45: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Figura 2.11.- Diagrama de las ecuaciones (2.47) y (2.48) donde ⎥⎦

⎤⎢⎣

⎡=

ji

CosC IJ

π

Se emplea otra vez un cambio de variables para las ecuaciones (2.47) y

(2.48) de la siguiente manera:

)2()(00 kXkY = (2.49)

)12()12()(01 −++= kXkXkY (2.50)

∑−

=

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

=1)2/(

00100

22

)14()()(

N

n Nkn

CosnxkYπ

(2.51)

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛

++= ∑

=

22

)14()()(

1)2/(

00101 N

knCosnxkY

N

n

π (2.52)

Page 46: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Las ecuaciones (2.51) y (2.52) se separan en términos pares e impares con

sus respectivos índices.

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

⎥⎦⎤

⎢⎣⎡

⎟⎠⎞

⎜⎝⎛

++= ∑−

=

22

)14(4

)()2(1)4/(

0000000 N

knCos

NnxnxkY

N

n

π (2.53)

)12(- 2

2

)14(

22

)14(2

4)()12(

00

1)4/(

0000000

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

⎪⎪⎭

⎪⎪⎬

⎪⎪⎩

⎪⎪⎨

⎟⎟⎟⎟

⎜⎜⎜⎜

⎟⎠⎞

⎜⎝⎛

+⎥⎦⎤

⎢⎣⎡

⎟⎠⎞

⎜⎝⎛

+−=+ ∑−

=

kY

Nkn

CosNn

CosN

nxnxkYN

n

ππ (2.54)

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛

+⎥⎦⎤

⎢⎣⎡

⎟⎠⎞

⎜⎝⎛

++= ∑−

=

22

)14(2

4)()2(

1)4/(

0010101 N

nCos

NnxnxkY

N

n

π (2.55)

)12(- 4

2

)14(

22

)14(2

4)()12(

01

1)4/(

0010101

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

⎪⎪⎭

⎪⎪⎬

⎪⎪⎩

⎪⎪⎨

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛

+⎥⎦⎤

⎢⎣⎡

⎟⎠⎞

⎜⎝⎛

+−=+ ∑−

=

kY

Nkn

CosNn

CosN

nxnxkYN

n

ππ (2.56)

Nuevamente se hace un cambio de variable para las ecuaciones anteriores.

⎟⎠⎞

⎜⎝⎛

++=4

)()( 000010

Nnxnxnx (2.57)

)14(000011 4

)( +⎟⎠⎞

⎜⎝⎛

⎟⎠⎞

⎜⎝⎛

+−= nNC

Nnxxnx (2.58)

⎟⎠⎞

⎜⎝⎛

++=4

)()( 010112

Nnxnxnx (2.59)

)14(010113 4

)()( +⎟⎠⎞

⎜⎝⎛

⎟⎠⎞

⎜⎝⎛

+−= nNC

Nnxnxnx (2.60)

Page 47: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

donde: ⎥⎦

⎤⎢⎣

⎡=

ji

CosC ij

π

Las ecuaciones (2.57) a la (2.60) representan las operaciones de la mariposa,

sustituyendo estas ecuaciones en las ecuaciones (2.53) y (2.56) se tiene:

∑−

=

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

=1)4/(

01000

42

)14()()2(

N

n Nkn

CosnxkYπ

(2.61)

∑−

=

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

=−++1)4/(

0110000

42

)14()()12()12(

N

n Nkn

CosnxkYkYπ

(2.62)

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

= ∑−

=

42

)14(1)4/(

01201 N

knCosxY

N

n

π (2.63)

∑−

=

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

=−++1)4/(

0130101

42

)14()()12()12(

N

n Nkn

CosnxkYkYπ

(2.64)

)2()( 0010 kYkY = (2.65)

)12()12()( 000011 −++= kYkYkY (2.66)

)2()( 0112 kYkY = (2.67)

)12()12()( 010113 −++= kYkYkY (2.68)

∑−

=

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

=1)4/(

01010

42

)14()()(

N

n Nkn

CosnxkYπ

(2.69)

Page 48: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

= ∑−

=

42

)14()()(

1)4/(

01111 N

knCosnxkY

N

n

π (2.70)

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

= ∑−

=

42

)14()()(

1)4/(

01212 N

knCosnxkY

N

n

π (2.71)

⎥⎥⎥⎥

⎢⎢⎢⎢

⎟⎠⎞

⎜⎝⎛+

= ∑−

=

42

)14()()(

1)4/(

01313 N

knCosnxkY

N

n

π (2.72)

La Figura 2.12 Muestra la segunda fase del algoritmo de la Transformada Rápida

Coseno Discreta (TRCD).

Figura 2.12.- Segunda fase del algoritmo de la TRCD

Page 49: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Si N=8 , las ecuaciones anteriores se reducen a lo siguiente:

⎥⎦⎤

⎢⎣⎡

+⎥⎦⎤

⎢⎣⎡

=45

)1(4

)0()( 101010

kCosx

kCosxkY

ππ (2.73)

⎥⎦⎤

⎢⎣⎡

+⎥⎦⎤

⎢⎣⎡

=45

)1(4

)0()( 111111

kCosx

kCosxkY

ππ (2.74)

⎥⎦⎤

⎢⎣⎡

+⎥⎦⎤

⎢⎣⎡

=45

)1(4

)0()( 121212

kCosx

kCosxkY

ππ (2.75)

⎥⎦⎤

⎢⎣⎡

+⎥⎦⎤

⎢⎣⎡

=45

)1(4

)0()( 131313

kCosx

kCosxkY

ππ (2.76)

Estas ecuaciones nos conducen a la última etapa del algoritmo. Como se puede

observar en la Figura 2.13

Figura 2.13.- Última etapa de la mariposa en la TRCD.

Page 50: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Para explicar la última salida de la TRCD tenemos que regresar a las ecuaciones

anteriores, por ejemplo, las ecuaciones (2.49),(2.50) y (2.56) se pueden escribir

como sigue:

)4()(10 kXkY = (2.77)

De manera similar se pueden deducir las ecuaciones (2.66) a la (2.68)

)24()24()(11 −++= kXkXkY (2.78)

)14()14()(12 −++= kXkXkY (2.79)

)34()14()14()34()(13 −+−++++= kXkXkXkXkY (2.80)

Por consiguiente, la salida de las últimas operaciones de la mariposa, se pueden

desarrollar en términos de la TRCD como se puede observar en la figura 2.14,

donde se reordenan la posición de esos valores usando la inversión de bits.

Figura 2.14.- Salida de los datos después de la inversión de bits.

Page 51: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Esas salidas de los datos se usan finalmente para obtener la TRCD. Como se

muestra en la figura 2.15 donde se emplea una suma recursiva.

Figura 2.15 Etapa de la Suma Recursiva.

Transformada Rápida Coseno Discreta Inversa.

El algoritmo para desarrollar la Transformada Rápida Coseno Discreta

Inversa es casi igual al de la Transformada Rápida Coseno Directa, la diferencia

es que ahora el proceso para calcularla empieza al revés, la figura 2.16 Indica el

procedimiento para el cálculo de ésta.

Page 52: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 2: “PRINCIPIOS DE LAS TÉCNICAS EMPLEADAS EN LA COMPRESIÓN DE IMÁGENES”

Figura 2.16.- Transformada Rápida Coseno Inversa.

Page 53: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Page 54: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Como se mencionó en el capítulo dos, se propone implementar un sistema de

Compresión de imágenes usando codificación DPCM adaptable en 2 dimensiones

bajo el dominio TCD. Dicha implementación fue hecha en lenguaje C.

Se realizó primeramente un diagrama a bloques para implementar dicha técnica,

el cual se muestra en la figura 3.1

Figura 3.1.- Diagrama a bloques del sistema (compresión-descompresión), que se

programó en lenguaje C.

El programa que se implemento en lenguaje C lee imágenes en formato BMP.

BMP.- Microsoft Windows Bitmap Format.

Formato de propósito General para grabar imágenes.

Page 55: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

El diagrama de la Figura 3.1 se implementó originalmente con simples

matrices, es decir, con imágenes simuladas hasta llegar hasta la compresión y

descompresión de una matriz que fue introducida desde el teclado de la

computadora, posteriormente se implementó con imágenes con el formato BMP

y se logró leer la imagen original, la imagen de predicción y la imagen con el error

de predicción restando de la imagen original la imagen de predicción.

RESULTADO DE LA IMPLEMENTACIÓN:

Se introduce una matriz inicial de imagen en lenguaje C. La imagen inicial es una

matriz cualquiera (arbitraria). Es de tamaño 5X5 [7] porque es el tamaño ideal para

el procesamiento digital de imágenes y así poder tener un buen índice de

compresión. Para cuestiones de simplicidad se podrían haber tomado imágenes

de 3X3 pero su índice de compresión es muy bajo.

La matriz inicial que se introdujo a través del teclado en el programa para

implementar el presente trabajo fue:

MATRIZ x[m,n]= (3.0)

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

25242322212019181716151413121110987654321

Posteriormente , se implementaron en la programación imágenes, las cuales se

segmentaron en submatrices de 5X5 para implementar el algoritmo de compresión

y descompresión [7].

Page 56: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

3.1 ALGORITMO PARA OBTENER LA PREDICCIÓN.

Veamos a continuación como se realiza el estudio de las submatrices de

imagen.

La submatriz de imagen de tamaño 5x5 se procesa como se muestra en la figura

3.2.

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

161514139

12111098

87657

43216

54321

bbbbAbbbbAbbbbAbbbbAAAAAA

Figura 3.2- Bloque de imagen de tamaño 5X5 a la cual se le aplica el algoritmo de

predicción bidimensional descrito en el capítulo dos.

donde:

A1,A2.....A9 son condiciones iniciales (coeficientes de imagen conocidos) .

b1,b2......b16 son los coeficientes de imagen que se van a predecir (ver Figura 3.3).

La predicción de nuestro sistema MDPC se hace de la siguiente manera [7]:

1) Primero se calculan los elementos base de una matriz de predicción que son:

b’6 = ½ (A3+A7) (3.1)

b’16 = ½ [½ (A5+A9)+(2b’6-A1)] (3.2)

b’8 = ½ [½ [A5+A7)+(2b’6-b’16)] (3.3)

b’14 = ½ [½ [A3+A9)+(2b’6-b’16)] (3.4)

Page 57: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Figura 3.3.-Matriz de predicción subdivida en 4 submatrices.

La justificación de estas fórmulas es que se subdivide la matriz de

predicción en 4 submatrices más pequeñas, donde cada uno de estos coeficientes

es el comienzo de la predicción. Se usan las condiciones iniciales, que son de

A1,A2......A9 que son coeficientes de imagen conocidos que operan como “Borde

de Ventana”, es decir, operan como el promedio de luminancia de la imagen, que

es el primer impacto visual que recibe el SVH al percibir una imagen y para hacer

una predicción se necesita partir de algo ya conocido.

Esto es porque en función a las características visuales representadas en la TCD

se busca predecir coeficientes dependiendo de la interacción que hay con los

coeficientes vecinos tanto horizontales, verticales y diagonales

La luminancia medida en lúmenes (lm), proporciona una media de la cantidad de

energía que un observador percibe procedente de una fuente luminosa [1].

2) Se calculan los demás elementos de la submatriz de predicción en base a sus 4

elementos base una vez predichos (ver ecuaciones (3.1) a (3.4)) de la siguiente

manera [7]:

Page 58: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

b’1 = (A1+A2+A3+A6+A7+b’6)/6 (3.5)

b’2 = (A2+A3+A4+b’1+b’6)/5 (3.6)

b’5 = (A6+A7+A8+b’1+b’2+b’6)/6 (3.7)

b’7 = (b’2+b’6 +b’8)/3 (3.8)

b’3 = (A3+A4+A5+b’2 + b’6+b’7+b’8)/7 (3.9)

b’4 = (A4+A5+b’3+b’7+b’8)/5 (3.10)

b’9 = (A7+A8+A9+b’5+b’6+b’14)/6 (3.11)

b’10 = (b’5+b’6+b’7+b’14+b’9)/5 (3.12)

b’11 = (b’6+b’7+b’8+b’10+b’14+b’16)/6 (3.13)

b’12 = (b’8+b’7+b’11+b’16)/4 (3.14)

b’13 = (A8+A9+b’9+b’10+b’14)/5 (3.15)

b’15 = (b’10+b’14+b’11+b’12+b’16)/5 (3.16)

La razón del uso de estas fórmulas es porque para predecir un coeficiente en

específico, se necesita conocer coeficientes de imagen ya conocidos y de los que

se acaban de predecir y se dividen entre el número de coeficientes que se

predijeron (Media Aritmética).

Los niveles de cuantificación que se pueden tomar en nuestro sistema

cuantificador son 2,4,8,16,32,64 y 128 y se muestran en la Tabla 3.1 la cual se

muestra a continuación:

Page 59: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Tabla 3.-1 Número de niveles de que se toman en el sistema cuantificador.

3.2.- ALGORITMO PARA OBTENER LA COMPRESIÓN.

Veamos a continuación 2 matrices de imagen mostradas en la Figura 3.4.

FIGURA 3.4.-Algoritmo para obtener la matriz error y así poder realizar la compresión de

la imagen.

En la figura 3.4 se realiza el algoritmo que realiza la primera etapa del sistema

codificador de un sistema MDPC, donde se produce la secuencia de error en la

imagen (ver capítulo 2, figura 2.4, ecuación (2.7)), la cual entra al cuantificador

Page 60: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

para producir la ecuación (2.8), donde posteriormente se codifica la imagen y

finalmente se comprime.

Cuantificación y compresión.

Para poder demostrar como se realiza la cuantificación y la compresión de

una imagen se exponen a continuación los siguientes ejemplos.

Supongamos que el programa obtuvo como resultado la siguiente matriz error:

MATRIZ DE ERROR. (3.17) ⎥⎦

⎤⎢⎣

⎡− 7.08.0

1.04.0

Se toman a continuación un valor máximo y mínimo de error:

Error máximo=0.8

Error mínimo = -0.7

Se selecciona el nivel de cuantificación (en este caso ,se toman 4):

donde: 4 niveles se representan con 2 bits:

00 =0

01 =1

10 =2

11 =3

Se hace una diferencia o resta del error máximo al mínimo y se divide entre el

número de niveles que se tomaron que en este caso en particular fue 4 quedando

como sigue:

Page 61: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

4.0375.04

)7.0(8.0≈=

−−

Luego, se hace un cuantificador lineal, es decir, se pretende agrupar en cada

intervalo del cuantificador(que en este caso es de 0.4) todos los valores posibles y

codificarlos como se muestra en la figura 3.5.

Figura3.5.- Cuantificador lineal donde se tomaron 4 niveles de cuantificación los

cuales posteriormente se van a codificar con un paso de cuantificador de 0.4.

El paso de cuantificador es de 0.4 para todos los intervalos. El primer intervalo

agrupa todos los valores posibles entre -0.7 y -0.3 y se le asigna el cero como

codificación

El siguiente nivel agrupa todos los valores posibles entre -0.3 y 0.1 y se asigna el

1 como codificación

Page 62: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Para el tercer nivel, agrupa todos los valores posibles entre 0.1 y 0.5 y se le

asigna el número 2 como codificación

Para el cuarto y último nivel, agrupa todos los valores posibles entre 0.5 y 0.9 y se

asigna el número 3 como codificación.

Generando la matriz codificada que es en realidad la de compresión y se hace de

la siguiente manera:

Observe la matriz error con la cual iniciamos este ejemplo( ver (3.17) ) y observe

bien cada uno de sus valores:

El primer elemento es 0.4 y según nuestra cuantificación se observa que dicho

valor cae en el intervalo del nivel cuya codificación es un 2, por lo tanto se le

asigna un 2 como primer elemento a nuestra matriz codificación.

El segundo elemento de la matriz error es 0.1 y se observa que dicho valor cae en

el intervalo del nivel cuya codificación es un 1, por lo tanto se le asigna un 1 como

segundo elemento a nuestra matriz codificación.

El tercer elemento es 0.8 y se observa que dicho valor cae en el intervalo del nivel

cuya codificación es un 3, por lo tanto, se le asigna un 3 como tercer elemento a

nuestra matriz codificación.

El cuarto y último elemento es de -0.7 y se observa que dicho valor cae en el

intervalo del nivel cuya codificación es un cero, por lo tanto, se le asigna un cero

como cuarto y último elemento a nuestra matriz codificación

Page 63: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Por lo tanto, la matriz de codificación, queda como se muestra a continuación:

MATRIZ DE CODIFICACIÓN. ⎥⎦

⎤⎢⎣

⎡0312

Luego se hace un promedio del intervalo donde se encuentra codificado el nivel y

se obtiene un nuevo valor y el conjunto de estos nuevos valores forman la matriz

de error cuantificada

Por ejemplo para el nivel del 2 se hace (como el 2 agrupa a todos los valores

comprendidos entre 0.1 y 0.5 )se tiene:

(0.1+0.5)/2=0.3

para el 1 se hace:

(-0.3+0.1)/2=-0.1

para el 3 se hace:

(0.5+0.9)/2=0.7

para el 0 se hace:

(-0.7-0.3)/2=-0.5

Generando así la matriz de error cuantificada. Observe que los nuevos valores

obtenidos en dicha matriz son muy parecidos a los que se tenían en la matriz error

con que iniciamos nuestro ejemplo y de esta manera se logra la compresión

usando 2 bits únicamente, mientras que la matriz original es de 8 bits/pixel

Page 64: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

⎥⎦

⎤⎢⎣

⎡−−

5.07.01.03.0

MATRIZ DE ERROR CUANTIFICADA, CON UNA COMPRESIÓN DE

2 BITS/PIXEL.

Y finalmente para hacer la descompresión de la matriz original, a la matriz de error

cuantificada se le suma la matriz imagen de predicción y se recupera o se

descomprime la matriz que se introdujo por teclado, donde más adelante

observaremos que entre más alto sea nuestro índice de compresión va a existir

mayor error.

Similarmente se hace otro ejemplo: se seleccionarán en este ejemplo en

particular, 8 niveles de cuantificación, los cuales se representan con 3 bits

quedando de la siguiente manera:

000=0

001=1

010=2

011=3

100=4

101=5

110=6

111=7

Page 65: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Se repite el mismo procedimiento explicado en el ejemplo anterior, solo que ahora,

no olvidar tener presente que se tomaron 8 niveles de cuantificación (VER

FIGURA 3.6) quedando como sigue:

2.018.08

)7.0(8.0≈=

−−

Figura 3.6.-Cuantificador lineal donde se tomaron 8 niveles de cuantificación los

cuales tienen un intervalo uniforme de 0.2.

Generando la matriz codificada y la matriz de error cuantificada con menor error se

tiene:

Page 66: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

MATRIZ DE CODIFICACIÓN. ⎥⎦

⎤⎢⎣

⎡0735

Haciendo el mismo procedimiento que en el ejemplo anterior se tiene:

⎥⎦

⎤⎢⎣

⎡− 6.08.0

04.0 MATRIZ DE ERROR CUANTIFICADA, CON UNA COMPRESIÓN DE

3 BITS/PIXEL.

De todo esto se concluye que entre menos niveles de cuantificación se tomen va a

existir mayor porcentaje de error

Investigando aún más sobre la predicción, se llegó a que si se hace la

predicción como se muestra en la figura 3.7 se mejora la eficiencia del predictor y

se disminuye mucho el error de predicción. Esto se debe a que se distribuye

uniformemente por toda la matriz y no se acentúa solo en algunas zonas

Veamos enseguida la partición real de una imagen mostrada en la figura 3.7.

Page 67: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Figura 3.7- Partición real de una imagen.

En la figura 3.7 se observa que una imagen se particiona en 64 submatrices

(bloques de coeficientes) donde la predicción se realiza bloque por bloque, es

decir, 64 bloques horizontales y 64 bloques verticales . También se observa que

se agrega al final de la imagen una fila y una columna y esto de debe a los

corrimientos que se hacen tanto verticales como horizontales y sirven para

completar los 64 bloques en ambas direcciones.

Se hace la predicción en el primer bloque de imagen, una vez concluido

éste, hacemos un corrimiento a la derecha y predecimos el nuevo bloque y así

sucesivamente hasta formar 64 bloques horizontales. Una vez concluido esto

hacemos hacia abajo un corrimiento de un renglón y volvemos hacer las

Page 68: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

predicciones de los 64 bloques, así sucesivamente hasta llegar hasta la última

hilera de bloques que se han de predecir. Este proceso concluye hasta hacer el

último corrimiento hacia abajo, es decir, tener 64 bloques verticales y finalmente

hacer los corrimientos hacia la derecha hasta tener los 64 bloques horizontales;

entonces podremos decir que la predicción total de la imagen está concluida.

Adaptación de los bloques en la Imagen.

Observe que la primer submatriz de imagen, el elemento central a predecir

es b6 (ver ecuación (3.1)) y dicho elemento es también el centro de las demás

submatrices [7], pero los corrimientos se generan de la siguiente manera:

En la primer submatriz tomando del 1 al 5 tanto horizontal como

verticalmente se tiene que del 1 al 5 son los elementos A1,A2,A3,A4 ,A5 y

A6,A7,A8,A9A10 que son nuestras condiciones iniciales de predicción (ver figura 3.3)

b6,b16,b8,y b14 son los elementos básicos de predicción y el resto de los elementos

se predicen a partir de los valores predichos b6,b16,b8 y b14 en el orden que se

muestra en el segundo algoritmo de predicción.

Una vez predicha la primer submatriz, se hace el primer corrimiento hacia la

derecha y lo que es la localidad 5,6,7,8,y 9 es ahora A1,A2,A3,A4, y A5 y lo que fue

en la primer submatriz b4,b8,b12 y b16 ahora se toman como A6,A7,A8 y A9 (ver

figura 3.7) y estas consideraciones se vuelven a tomar en cuenta para el siguiente

corrimiento hacia la derecha hasta llegar al 256 y por esa misma razón es la de

Page 69: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

porque se agrega la última columna, y esto hace que los bloques de coeficientes

se adapten unos en otros por eso decimos que es un método adaptable.

Similarmente, al hacer los corrimientos hacia abajo lo que fue en la primer

submatriz las localidades 5,b13,b14,b15 y b16 se toman ahora como A1,A2,A3,A4 y A5

(ver figura 3.3) y estas consideraciones se vuelven a tomar en cuenta para el

siguiente corrimiento hacia abajo hasta llegar al 256 y por esta razón se agrega la

última fila. El elemento b6 que se observa distribuido en la partición de la

imagen(ver figura 3.7) significa donde queda ubicado un nuevo bloque de imagen

cuando se van haciendo los corrimientos en ambas direcciones.

Investigando aún más para hacer todavía más óptimo el sistema de predicción se

descubrió que si se usa el promedio de luminancia de una imagen se obtienen

mejores resultados como veremos a continuación:

Usando la matriz inicial de prueba, introducida por el teclado, (ver (3.0) )su

promedio de luminancia se obtuvo sumando:

(1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+2

5)/25, es decir, se suma uno a uno cada coeficiente del bloque de coeficientes y

se divide el resultado entre el número de coeficientes que es de 25 (en este caso

en particular) cuyo promedio de luminancia fue de 13; por lo tanto, la matriz inicial

de prueba queda como sigue se muestra en la siguiente figura.

Page 70: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢

252423222113201918171613151413121113109876135432113

131313131313

Figura 3.8.-Matriz Inicial de prueba adaptada a su promedio de luminancia.

La figura 3.8 tiene la estructura de la matriz de la figura 3.3 solo que en este caso,

las condiciones iniciales para iniciar el proceso de predicción, es el “Borde de

Ventana” que se obtiene de su promedio de luminancia.

Posteriormente el programa se modificó para que funcione con imágenes y

ahora se trabaja con matrices o con bloques de los coeficientes de los pixeles de

la propia imagen como se indica en la figura 3.7, donde se trabaja bloque tras

bloque de imagen adaptándose sucesivamente.

Por más óptimo que sea la predicción siempre tendrá pérdida de

información con respecto a la imagen original y existe lo que se conoce como error

de predicción (Ver capítulo 2, ecuación (2.7) ). Una vez que se tenga presente el

error de predicción, la siguiente etapa a solucionar consiste en distribuir dicho

error de una manera uniforma por toda la imagen, es decir, no se debe dejar que

se concentre mas en una zonas que en otras. Esto se logra con el algoritmo

explicado para la figura 3.7.

Page 71: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Para conocer el error de predicción que posee una imagen, basta con

observarla, (una vez aplicada la ecuación (2.7), capítulo 2) y si se observan

secciones de la imagen o contornos de la misma, significa que la imagen contiene

cierto grado de error, pérdida o distorsión de información con respecto a la imagen

original.

El objetivo que se pretende alcanzar con el método predictivo MPC, es la

compresión y descompresión de las imágenes una vez que se tenga todo

implementado, se pretende aplicarlo a otro método de compresión de imágenes

como por ejemplo la TRANSFORMADA DISCRETA COSENO (TCD) y la razón de

esto, es que el método MDPC por si solo logra una compresión del 50% aunque

se podría forzar que el sistema obtenga una compresión del 80% pero con una

calidad de imagen pésima en la etapa de la descompresión (etapa del

decodificador, ver capítulo 2, figura 2.5) y esto no es la finalidad de la tesis, sino

que su objetivo, es tener un buen índice de compresión en la imagen y con una

buena o excelente calidad visual de la imagen al recuperar la imagen, desde el

punto de vista del sistema visual humano, razón por la cual se requiere la

aplicación de la TCD.

La forma que se implementó el sistema MDPC, apoyándonos de la

TRANSFORMADA DISCRETA COSENO (TDC) es:

Se usan imágenes estandarizadas de tamaño de 256X256, posteriormente la

imagen se subdivide a su vez en cuadros de 8X8, lo que quiere decir que la

Page 72: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

imagen de 256X256 queda divida en cuadros de 32x32 y cada cuadro es de 8X8

cada uno.

El algoritmo que se usó para implementar la DCT es el siguiente:

Una vez que se tiene subdividida la imagen de 256X256 pixeles, hay que

transformarla al dominio de la DCT segmentando la imagen en cuadros de 32X32

de 8X8 coeficientes cada uno, y se le aplica el algoritmo de predicción descrito en

párrafos anteriores, solo que en vez de predecir cuadros de 5X5, ahora se toman

cuadros de 8X8. Como estamos en el dominio de LA TCD, el algoritmo de

predicción, hace la predicción de los coeficientes DC y los coeficientes AC y el

sistema MDPCA para la parte del codificador queda como se muestra en la figura

3.9.

Una vez que se concluye todo el proceso de predicción, se aplica la

cuantificación, codificación, y se comprime la imagen. Dicha imagen se guarda en

un archivo, el cual se manda llamar para aplicarle el procedimiento de

decodificación, cuantificación inversa y predicción, se descomprime la imagen y

los coeficientes que aún se encuentran bajo el dominio de la TCD, se regresan al

dominio de los coeficientes de la imagen dado en pixeles, para que la PC las

pueda visualizar. Todo este procedimiento está implementado en un diagrama a

bloques mostrado en las figuras 3.10, y 3.11.y de manera general aplicando la

Transformada en la figura 3.12

Page 73: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Figura 3.9.- Diagrama a bloques del algoritmo de predicción del sistema MDPC

bajo el dominio de la TCD.

Page 74: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Figura 3.10.- Diagrama a bloques del codificador del sistema MDPC bajo el

dominio de la TCD.

Figura 3.11.- Diagrama a bloques del decodificador del sistema MDPC bajo el

dominio de la TCD.

La codificación y decodificación de manera general usando la TCD queda

como se muestra a continuación:

Page 75: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Figura 3.12.- Diagrama a Bloques de un sistema para comprimir y

descomprimir imágenes usando la TCD.

Como características más importantes con respecto a la Transformada

Coseno Discreta (TCD), se encuentran que la distribución promedio de la energía

en es espacio transformado se encuentra en el elemento F(0,0) o elemento DC

Los coeficientes a la derecha de este valor denotan frecuencias espaciales

horizontales cada vez más altas y otros coeficientes designan varias

combinaciones de frecuencias espaciales horizontales y verticales, son entonces

los coeficientes, los que representan la luminancia de los pixeles en un bloque

imagen o la distribución de las frecuencias espaciales.

Page 76: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

La amplitud de los coeficientes F(u,v) (ver capítulo 2, ecuación 2.25) decrece a

medida que u y v aumentan, es decir, cuando se alejan de F(0,0). De aquí que los

coeficientes cercanos se consideren de baja frecuencia y representan cambio

progresivos de luminosidad. Por el contrario, los coeficientes alejados a F(0,0) son

de alta frecuencia y dan cuenta de cambios abruptos de luminosidad como se

muestra en la figura 3.13, la cual se muestra a continuación:

Figura 3.13.-Cambios progresivos y abruptos de luminancia en un bloque de

imagen de 8x8 debido a la Transformada Discreta Coseno.

La compresión de imágenes por medio de la TCD se efectúa mediante la

cuantificación escalar de los coeficientes transformados, por lo tanto, se disminuye

la dinámica de los valores de cada coeficiente y se eliminan los menos relevantes,

la cuantificación de coeficientes de efectúa de manera fina en las bajas

frecuencias espaciales y con menos tratamiento (burdamente) en las altas

frecuencias.

Page 77: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Es parte de la naturaleza de la transformación con TCD que resulten pocos

valores de bajas frecuencias al contrario de los coeficientes de las frecuencias

espaciales altas.

Igual sucede con la percepción visual humana que muchas de las

frecuencias más altas son definidas sin detalle o completamente ignoradas sin que

se denote gran degradación de la imagen.

La TCD no reduce los datos, solo se busca la transformación en una forma menos

redundante con un esquema íntegramente reversible que mantiene la calidad

visual original.

La tarea del codificador entrópico es codificar los símbolos en un flujo de datos lo

más corto posible. En el caso de imágenes digitales es posible efectuar esto

después de la TCD dado el comportamiento estadístico de los coeficientes

obtenidos [20].

Como es una codificación en longitud variable, es por eso que se usa el código de

Huffman (ver capítulo 2, figura 2.9) en los diagramas de las figuras 3.10 y 3.11.

Page 78: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 3: ”DESARROLLO E IMPLEMENTACIÓN DE LA TÉCNICA SELECCIONADA”.

Page 79: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Page 80: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

En este capítulo, se muestran los resultados experimentales, desde los

resultados con la matriz inicial introducida por teclado, hasta los resultados con

imágenes con formato BMP.

Introduciendo por teclado la matriz inicial con la que hemos trabajado (ver

capítulo 3, ecuación (3.0)) se tiene:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

25242322212019181716151413121110987654321

Aplicando el algoritmo de la predicción explicado en el capítulo 2 a dicha matriz se

tiene:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

19181765.51413125.3398715.045.33005.115.000

Figura 4.1- Resultado del algoritmo de predicción aplicado a la matriz inicial

introducida por teclado.

Posteriormente obtenemos la matriz de error que se muestra en la figura 4.2

Page 81: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

666165.156665.1313666115.1065.55765.335.221

Figura 4.2 .- Matriz de error

La deriva del error inicial tiene que ver con el uso de filas y columnas adicionales

(ver capítulo 3 figura 3.7).

Tomando 2 niveles de cuantificación (en este caso particular) y el grado de

agrupación del cuantificador es de 7.50 (ver ecuación 2.17) se obtiene la matriz de

codificación (matriz de compresión) que se muestra en la figura 4.2.a, la cual se

muestra a continuación:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

0001100011000110000000000

Figura 4.2.a.-Obtención de la matriz de codificación.

Obteniendo a su vez la matriz de error cuantificada que se muestra en la figura

4.2.b la cual queda como sigue:

Page 82: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

8.48.48.42.122.128.48.48.42.122.128.48.48.42.122.128.48.48.48.48.48.48.48.48.48.4

Figura 4.2.b.- Matriz de error cuantificada.

Y su correspondiente matriz de recuperación se observa en la figura 4.2.c la cual

se muestra a continuación:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

8.238.228.212.188.178.188.178.168.152.158.138.128.112.138.128.82.88.78.48.42.68.52.58.48.4

Figura 4.2.c.- Matriz descomprimida.

Observe que hay mucho error en la matriz de descompresión y un alto índice de

compresión (1 bit/píxel).

Usando este mismo procedimiento pero tomando ahora 8 niveles de

cuantificación se tiene que la matriz de codificación que se muestra en la figura

4.2 d , la cual queda como sigue:

Page 83: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

2227722266222552223211000

Figura 4.2.d.-Matriz de codificación correspondiente a los 8 niveles de

cuantificación.

La matriz de error cuantificada se obtiene en la figura 4.2.e la cual se muestra a

continuación:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

7.57.57.51.151.157.57.57.52.132.137.57.57.53.113.117.57.57.56.77.58.38.39.19.19.1

:

Figura 4.2.e Matriz de error cuantificada correspondiente a los 8 niveles de

cuantificación.

Su correspondiente matriz de descompresión se obtiene en la figura 4.2.f y se

muestra a continuación

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

7.247.237.221.216.207.197.187.177.162.167.147.137.123.128.117.92.97.86.77.53.58.44.29.19.1

:

Figura 4.2.f.- Matriz descomprimida correspondiente a los 8 niveles de

cuantificación.

Page 84: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Obsérvese que aún con el error, esta matriz ya se empieza a parecer a la imagen

inicial introducida por el teclado.

Siguiendo este mismo procedimiento pero ahora tomando ahora 32 niveles

de cuantificación y el grado de agrupación del cuantificador es de 0.47 (ver

ecuación 2.17) se tiene:

La matriz de codificación que se muestra en la figura 4.2.g, la cual se muestra a

continuación:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

1010103130101010262510101021211098121054320

Figura 4.2.g .-Matriz de codificación correspondiente a 32 niveles de cuantificación

Su correspondiente matriz de error cuantificada se muestra en la figura 4.2.h, la

cual se muestra a continuación:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

9.59.59.58.153.159.59.59.54.13139.59.59.51.116.109.55.559.69.56.31.36.22.22.1

Figura 4.2.h.-Matriz de error cuantificada correspondiente a 32 niveles de

cuantificación.

Page 85: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

La matriz de descompresión se muestra en la figura 4.2.i la cual se muestra a

continuación:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

9.249.239.228.218.209.199.189.179.16169.149.139.121.121.119.9989.69.51.51.41.32.22.1

Figura 4.2 i.- Matriz descomprimida correspondiente a 32 niveles de cuantificación.

Obsérvese que aún sigue habiendo error, pero ya casi es igual a la matriz inicial.

Tomando ahora 128 muestras y el grado de agrupación del cuantificador es de

0.12 (ver ecuación 2.17), se tiene la matriz de codificación que se muestra en la

figura 4.2. j, la cual se muestra a continuación:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

4242421271234242421061024242428581423834514221171280

Figura 4.2.j.- Matriz de codificación correspondiente a 128 niveles de

cuantificación

Su correspondiente matriz de error cuantificada se muestra en la figura 4.2.k, la

cual se muestra a continuación:

Page 86: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

6669.155.156665.1313666116.1065.55765.31.35.221.1

Figura 4.2.k .- Matriz de error cuantificada correspondiente a 128 niveles de

cuantificación.

Su correspondiente matriz de descompresión se muestra en la figura 4.2 l), la cual

se muestra a continuación:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

2524239.21212019181716151413121.1110987651.4321.1

Figura 4.2.l.- Matriz descomprimida correspondiente a 128 niveles de

cuantificación.

Nótese que la figura 4.2.l esta matriz es la inicial, salvo los errores de decimales,

pues se recuerda que cualquier sistema de predicción por óptimo que éste sea,

siempre van a existir errores, los cuales van a ser compensados por nuestro

sistema visual humano.

Page 87: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Los primeros resultados experimentales con imágenes se presentan a

continuación:

Este programa está implementado en lenguaje C y los resultados que se

obtuvieron del programa con una imagen son los siguientes:

La figura 4.3 es una imagen original de 256 X 256 pixeles, cuyo promedio de

luminancia es de 99. La figura 4.4 muestra el resultado de la predicción. La figura

4.5 muestra el error existente entre la imagen original y la imagen obtenida en la

predicción.

Figura 4.3.- Imagen Original. Figura 4.4.- Imagen de predicción.

Figura 4.5.- Imagen de error.

Page 88: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

A continuación se presentan los resultados que se obtuvieron al comprimir y

descomprimir una imagen con los algoritmos explicados anteriormente en el

capítulo 3.

Veamos la serie de compresión y descompresión de la imagen “KAREN” cuyo

promedio de luminancia es de 48, (ver capítulo 3, figura 3.8); la cual se presenta

en las figuras 4.6 a la figura 4.13.

Figura 4.6.- Imagen Original. Figura 4.7 Imagen descomprimida usando 2 niveles.

Figura 4.8.- Imagen Descomprimida Figura 4.9.- Imagen Descomprimida usando 4 niveles. usando 8 niveles.

Page 89: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Figura 4.10.- Imagen Descomprimida Figura 4.11.- Imagen Descomprimida usando 16 niveles . usando 32 niveles.

Figura 4.12.- Imagen Descomprimida Figura 4.13.- Imagen Descomprimida usando 64 niveles. . usando 128 niveles.

De esta serie de imágenes, se obtienen los siguientes datos, los cuales se

muestran en la tabla 4.1

Page 90: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

TABLA 4.1.- Resultados obtenidos de las figuras 4.6 a la 4.13 correspondientes a

la serie de imagen “KAREN”.

NIVELES DE

CUANTIFICACIÓN IMAGEN: “KAREN”

TASA DE

COMPRESIÓN (BITS/PIXEL)

ERROR

CUADRÁTICO MEDIO. (ECM)

RELACIÓN SEÑAL A RUIDO. (RSR)

ARCHIVO DE

IMAGEN COMPRIMIDO

PORCENTAJE DE COMPRESIÓN

2 1 56678220 7.65 8.208k 87.5% 4 1.0171 18853501 12.43 8.347k 87.3% 8 1.1613 10115804 15.14 9.540K 85.5% 16 1.2337 3279472 20.03 10.150K 84.6% 32 1.4437 1097592 24.78 11.925K 81.9% 64 1.9638 476940 28.40 16.273K 75.2% 128 2.5530 373615 29.46 21.259K 67.6%

A continuación se presenta una gráfica comparativa de los resultados de la tasa

de compresión contra la relación señal a ruido, la cual se muestra en la figura 4.14

la cual se muestra a continuación.

Figura 4.14-Gráfica comparativa entre la tasa de compresión y la relación señal a

ruido, de la serie de imagen “KAREN”.

Page 91: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Veamos a continuación la serie de compresión y descompresión de la imagen

“LENA” cuyo promedio de luminancia es de 99 (ver capítulo 3, figura 3.8); la cual

se presenta en las figuras 4.15 a la figura 4.22

Figura 4.15.- Imagen original Figura 4.16.- Imagen descomprimida usando 2 niveles.

Figura 4.17.- Imagen descomprimida Figura 4.18.- Imagen Descomprimida usando 4 niveles. usando 8 niveles.

Page 92: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Figura 4.19.- Imagen descomprimida Figura 4.20.- Imagen Descomprimida usando 16 niveles. usando 32 niveles.

Figura 4.21.- Imagen descomprimida Figura 4.22.- Imagen Descomprimida usando 64 niveles. usando 128 niveles.

De esta serie de imágenes, se obtienen los siguientes datos, los cuales se

muestran en la tabla 4.2

Page 93: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

TABLA 4.2.- Resultados obtenidos de las figuras 4.15 a la 4.22 correspondientes a

la serie de imagen “LENA”.

NIVELES DE

CUANTIFICACIÓN IMAGEN:

“LENA”

TASA DE

COMPRESIÓN (BITS/PÍXEL)

ERROR

CUADRÁTICOMEDIO (ECM)

RELACIÓN SEÑAL A RUIDO. (RSR)

ARCHIVO DE

IMAGEN COMPRIMIDO

PORCENTAJE DE COMPRESIÓN

2 1 150531986 7.43 8.202K 87.5% 4 1.01 30930795 14.30 8.363K 87.3% 8 1.067 20692107 16.05 8.767K 86.7% 16 1.19023 4068347 23.11 9.802K 85.1% 32 1.4975 3203058 24.15 12.363K 81.2% 64 1.9639 913371 29.60 16.278K 75.2%

128 2.6112 620525 31.28 21.767K 66.8%

A continuación se presenta una gráfica comparativa de los resultados de la tasa

de compresión contra la relación señal a ruido, la cual se muestra en la figura 4.23

la cual se muestra a continuación.

Figura 4.23-Gráfica comparativa entre la tasa de compresión y la relación señal a

ruido, de la serie de imagen “LENA”.

Page 94: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4 : ”RESULTADOS EXPERIMENTALES”

Veamos a continuación la serie de compresión y descompresión de la imagen

“BABOON” cuyo promedio de luminancia es de 142 (ver capítulo 3, figura 3.8); la

cual se presenta en las figuras 4.24 a la figura 4.31

Figura 4.24.- Imagen original Figura 4.25.- Imagen Descomprimida usando 2 niveles.

Figura 4.26.- Imagen Descomprimida Figura 4.27.- Imagen Descomprimida usando 4 niveles. usando 8 niveles.

Page 95: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4 : ”RESULTADOS EXPERIMENTALES”

Page 96: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Figura 4.28.- Imagen Descomprimida Figura 4.29.- Imagen Descomprimida usando 16 niveles. usando 32 niveles.

Figura 4.30.- Imagen Descomprimida Figura 4.31.- Imagen Descomprimida usando 64 niveles. usando 128 niveles.

De esta serie de imágenes, se obtienen los siguientes datos, los cuales se

muestran en la tabla 4.3

Page 97: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

TABLA 4.2.- Resultados obtenidos de las figuras 4.24 a la 4.31 correspondientes a la serie de imagen “BABOON”.

NIVELES DE

CUANTIFICACIÓN BABOON

TASA DE

COMPRESIÓN (BITS/PIXEL)

ERROR

CUADRÁTICO MEDIO (ECM)

RELACIÓN SEÑAL A RUIDO. (RSR)

ARCHIVO DE

IMAGEN COMPRIMIDO

PORCENTAJE DE COMPRESIÓN

2 1 266131582 8.92 8.202K 87.5% 4 1.0498 52596712 14.85 8.615K 86.6% 8 1.2742 49790217 15.09 10.464K 84.1% 16 1.5605 9798731 22.15 12.387K 81.1% 32 2.1221 2015224 23.48 17.482K 73.4% 64 2.8450 1488444 29.02 23.487K 64.2% 128 3.5243 564422 30.33 29.2213K 55.5%

A continuación se presenta una gráfica comparativa de los resultados de la tasa

de compresión contra la relación señal a ruido, la cual se muestra en la figura 4.32

la cual se muestra a continuación.

Figura 4.32-Gráfica comparativa entre la tasa de compresión y la relación señal a

ruido, de la serie de imagen “BABOON”.

Page 98: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Veamos a continuación la serie de compresión y descompresión de la imagen

“CLAIRE” cuyo promedio de luminancia es de 106 (ver capítulo 3, figura 3.8); la

cual se presenta en las figuras 4.33 a la figura 4.40

Figura 4.33.- Imagen original Figura 4.34.- Imagen descomprimida usando 2 niveles.

Figura 4.35.- Imagen Descomprimida Figura 4.36.- Imagen Descomprimida usando 4 niveles. usando 8 niveles

Page 99: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Figura 4.37.- Imagen Descomprimida Figura 4.38.- Imagen Descomprimida usando 16 niveles. usando 32 niveles

Figura 4.39.- Imagen Descomprimida Figura 4.40.- Imagen Descomprimida usando 64 niveles. usando 128 niveles

Page 100: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

De esta serie de imágenes, se obtienen los siguientes datos, los cuales se

muestran en la tabla 4.4

TABLA 4.4.- Resultados obtenidos de las figuras 4.24 a la 4.31 correspondientes a la serie de imagen “CLAIRE”.

NIVELES DE

CUANTIFICACIÓN CLAIRE

TASA DE

COMPRESIÓN (BITS/PIXEL)

ERROR

CUADRÁTICO MEDIO (ECM)

RELACIÓN SEÑAL A RUIDO. (RSR)

ARCHIVO DE

IMAGEN COMPRIMIDO

PORCENTAJE DE COMPRESIÓN

2 1 247726991 5.82 8.202k 87.5% 4 1.0321 114037835 9.18 8.470k 87.1% 8 1.0440 42340968 13.49 8.580k 87.0% 16 1.0884 10038623 19.47 8.967k 86.4% 32 1.1971 1720201 27.40 9.899k 84.9% 64 1.4571 1528307 27.91 12.104k 81.6% 128 1.7457 977160 29.86 14.630k 77.68%

A continuación se presenta una gráfica comparativa de los resultados de la tasa

de compresión contra la relación señal a ruido, la cual se muestra en la figura 4.41

la cual se muestra a continuación.

Figura 4.41-Gráfica comparativa entre la tasa de compresión y la relación señal a

ruido, de la serie de imagen “CLAIRE”.

Page 101: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Page 102: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: RESULTADOS EXPERIMENTALES”

Veamos a continuación la serie de compresión y descompresión de la imagen

“CAMERA-MAN” cuyo promedio de luminancia es de 129 (ver capítulo 3, figura

3.8); la cual se presenta en las figuras 4.42 a la figura 4.49.

Figura 4.42.- Imagen original Figura 4.43.- Imagen Descomprimida usando 2 niveles.

Figura 4.44.- Imagen Descomprimida Figura 4.45.- Imagen Descomprimida

Page 103: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Figura 4.46.- Imagen Descomprimida Figura 4.47.- Imagen Descomprimida usando 16 niveles. usando 32 niveles

Figura 4.48.- Imagen Descomprimida Figura 4.49.- Imagen Descomprimida usando 64 niveles. usando 128 niveles.

De esta serie de imágenes, se obtienen los siguientes datos, los cuales se

muestran en la tabla 4.5

Page 104: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

TABLA 4.5.- Resultados obtenidos de las figuras 4.42 a la 4.49 correspondientes a

la serie de imagen “CAMERA-MAN”.

NIVELES DE

CUANTIFICACIÓN CAMERA-MAN

TASA DE

COMPRESIÓN (BITS/PIXEL)

ERROR

CUADRÁTICO MEDIO (ECM)

RELACIÓN SEÑAL A RUIDO. (RSR)

ARCHIVO DE

IMAGEN COMPRIMIDO

PORCENTAJE DE COMPRESIÓN

2 1 186318198 8.63 8.202k 87.5% 4 1.0143 57501785 13.47 8.324k 87.3% 8 1.0506 12889885 20.23 8.632K 86.9% 16 1.1831 12405102 20.40 9.744k 85.2% 32 1.3909 1626675 29.22 11.4791K 82.5% 64 1.8295 836328 32.11 15.169K 76.9% 128 2.2723 222187 37.87 19.771K 69.9%

A continuación se presenta una gráfica comparativa de los resultados de la tasa

de compresión contra la relación señal a ruido, la cual se muestra en la figura 4.50

la cual se muestra a continuación.

Figura 4.50-Gráfica comparativa entre la tasa de compresión y la relación señal a

ruido, de la serie de imagen “CAMERA-MAN”.

Page 105: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO 4: “RESULTADOS EXPERIMENTALES”

Page 106: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

Page 107: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

Tomando en base toda la investigación realizada se pudo analizar e

implementar un algoritmo suficientemente aceptable desde el punto de

comparación con otros trabajos similares basados en la compresión de imágenes

que trabajan con el sistema predictivo MDPC. Dichos resultados que se obtuvieron

eran los esperados al usar el sistema de Modulación Diferencial de Impulsos

Codificados a la par con el método de la Transformada Discreta Coseno

funcionando correctamente en imágenes de tamaño de 256X256 pixeles a 256

niveles de gris.

Los resultados que se obtuvieron por medio de este algoritmo son muy

buenos en términos de compresión y velocidad de cómputo de acuerdo a las

pruebas realizadas, puesto que podemos establecer que las imágenes son

descomprimidas con una buena calidad visual con respecto a la imagen original

desde el punto de vista del Sistema Visual Humano (SVH). En este punto cabe

señalar que existe una relación muy clara en el número de bits empleados en los

diferentes tipos de cuantificadores, ya que a mayor número de bits empleados, la

compresión disminuye, pero si se disminuye el número de bits, la compresión es

muy alta pero a costa de sacrificar calidad en las imágenes descomprimidas.

Al emplear la Transformada Discreta Coseno y el Sistema DPCM se pueden

comprimir imágenes casi en tiempo real, ya que el proceso de compresión y

descompresión se realiza aproximadamente en 1 segundo, (dependiendo del

procesador que tenga la PC con la que se esté trabajando) lo cual es muy

importante para trabajos basados en esta técnica.

Page 108: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

Otra característica importante respecto al software desarrollado en el

presente trabajo, es que se probó en diferentes computadoras con diferentes

procesadores tales como un DX486, a 100 MHz, Pentium Intel a 100MHz, y

133MHz, Cyrix, un Celeron a 433MHz, un AMD-K6 y un Celeron a 700 Mhz

siendo éste último el que presentó mejor desempeño debido a su velocidad de

proceso, y el procesador que dio el peor resultado en cuanto a velocidad de

proceso de cómputo para la compresión, descompresión y visualización de las

imágenes en pantalla fue el procesador DX486 porque presentó un tiempo de

compresión y descompresión de 5 segundos aproximadamente. Día con día la

industria fabricante de los microprocesadores avanza constantemente, lo cual

permitirá que el proceso de compresión y descompresión se realice en tiempo real

y se pueda transmitir una imagen en un tiempo más corto de lo que se realiza

actualmente.

Las pruebas objetivas consisten en obtener la imagen error, que consiste en tomar

la imagen original y restarle la imagen descomprimida para poder ver los bits que

cambiaron de valor durante el proceso y observar si existe mucha diferencia. La

relación señal a ruido (RSR) dada en dB, (ver capítulo 2 ecuación (2.4) ) se

obtiene para comparar si existe más información en la imagen que ruido. (ver las

tablas 4.1, 4.2, 4.3, 4.4 y 4.5 )que se obtuvieron en cada imagen en el capítulo 4.

En dichas gráficas y tablas se puede observar que la relación Señal a Ruido

(RSR) aumenta conforme aumenta el número de bits en el cuantificador, esto

significa que se tienen más datos recuperados de la imagen original y el ruido va

disminuyendo

Page 109: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

Un gran número de algoritmos nuevos para codificación adaptable usando

transformadas se han desarrollado desde hace 15 años los cuales se han

estudiado y examinado para obtener la compresión de imágenes, pero se debe

tener en cuenta el papel que implica al Sistema Visual Humano quien después de

todo es el usuario final en los esquemas de compresión de imágenes. La

eliminación de los datos psicovisualmente conlleva a una pérdida real, o

cuantitativa, de información visual. Debido a que la información de interés puede

eliminarse, es muy conveniente el desarrollo de un método que nos permita tener

a nuestro alcance la naturaleza y el nivel de la pérdida de información, por lo que

se utilizan 2 clases generales de criterios para esta valoración que son:

1. Criterios de fidelidad objetiva.

2. Criterios de fidelidad subjetiva.

Cuando se puede expresar el nivel de pérdida de información como una función

de la imagen original, o de entrada a un sistema, y de la imagen de salida , la que

posteriormente se descomprime, se dice que nos basamos en un criterio de

fidelidad objetiva. Un ejemplo de esto puede ser el cálculo del error cuadrático

medio ECM (ver capítulo 2 ecuaciones (2.13 y 2.14) y también podemos

considerar dentro de este criterio el cálculo de la relación señal a ruido (RSR) que

se deriva del error cuadrático medio (ver capítulo 2 ecuación (2.4) )

Aunque los criterios de fidelidad objetiva ofrecen un mecanismo simple y

conveniente para la evaluación de la pérdida de información, la mayoría de las

imágenes acaban siendo observadas por el ser humano. En consecuencia, resulta

ser más apropiado medir la calidad de la imagen mediante evaluaciones subjetivas

Page 110: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

de un observador humano. Esto se puede conseguir mostrando una imagen

descomprimida a un conjunto de observadores, promediando luego sus

evaluaciones. Las evaluaciones se pueden realizar empleando una escala de

valores absoluta o bien por medio de comparaciones entre la imagen de entrada y

la imagen descomprimida[1].

Haciendo una comparación del presente trabajo con otros realizados sobre la

compresión de imágenes basados en la Modulación Diferencial de Pulsos

Codificados se tiene [23]:

En la figura 5.1 se muestra una imagen de error de predicción de la imagen

“LENA”, la cual se muestra a continuación.

Figura 5.1 Error de predicción

Page 111: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

Figura 5.2.- Resultados obtenidos al procesar la imagen “CAMERA-MAN” y

“LENA” con codificación MDPC, bajo la presencia del ruido granular .

En la figura 5.2 se muestran los resultados obtenidos al procesar las imágenes

“CAMERA-MAN” y “LENA” respectivamente con codificación MDPC, bajo la

presencia de ruido granular [33].

Veamos a continuación otros resultados obtenidos al procesar las mismas

imágenes que están bajo las influencias de las distorsiones en los sistemas

predictivos:

Page 112: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

Figura 5.3.- Resultados obtenidos al procesar la imagen “CAMERA-MAN” y

“LENA” con codificación DPCM ,bajo la presencia del ruido de sobrecarga.

En la figura 5.3 se muestran los resultados obtenidos al procesar las imágenes

“CAMERA-MAN” y “LENA” respectivamente, con codificación MDPC, bajo la

presencia del ruido de sobrecarga[34].

Dentro de los Criterios de Calidad subjetiva, al comparar los resultados de las figuras 5.1, 5.2 y 5.3 con respecto a las imágenes descomprimidas y de error de predicción del capítulo 4, según nuestro sistema visual humano (SVH), están muy semejantes y se pueden considerar buenos resultados con respecto a otros trabajos.

Page 113: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

Considerando ahora los Criterios de Calidad Objetiva, veamos a continuación los resultados que se obtuvieron en otros trabajos afines [36].

Figura 5.4 Resultados obtenidos al procesar las imágenes “CAMERA-MAN” y “LENA” donde se muestra su factor de compresión en cada una. Con respecto a la figura 5.4, los factores de compresión que se obtienen en el presente trabajo se calculan con [40]:

scomprimido datos los de media bits de tasa

originales datos los de media bits de tasa=C (5.1)

donde C: es el factor de compresión y es adimensional.

Los factores de compresión que se obtienen en el presente trabajo son

visualizados en las siguientes tablas:

Tabla 5.1.- Para la imagen “ KAREN” (Ver tabla 4.1 capítulo 4 y ecuación (5.1) ):

Page 114: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

FACTOR DE COMPRESIÓN

C:

NIVELES DE CUANTIFICACIÓN

PROMEDIO GENERAL DEL FACTOR DE

COMPRESIÓN

8 2 7.68 4 6.88 8 6.48 16 5.96 5.54 32 4.07 64 3.13 128

Tabla 5.2.- Para la imagen “LENA” (Ver tabla 4.2 capítulo 4 y ecuación (5.1)) :

FACTOR DE COMPRESIÓN

C:

NIVELES DE CUANTIFICACIÓN

PROMEDIO GENERAL DEL FACTOR DE

COMPRESIÓN 8 2

7.92 4 7.49 8 6.72 16 6.08 5.34 32 4.04 64 3.06 128

Tabla 5.3.-Para la imagen “BABOON” (Ver tabla 4.3 capítulo 4 y ecuación (5.1)) :

FACTOR DE COMPRESIÓN

C:

NIVELES DE CUANTIFICACIÓN

PROMEDIO GENERAL DEL FACTOR DE

COMPRESIÓN 8 2

7.62 4 6.27 8 5.12 16 5.12 3.77 32 2.81 64 2.26 128

Tabla 5.4.-Para la imagen “ CLAIRE” (Ver tabla 4.4 capítulo 4 y ecuación (5.1)):

Page 115: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

FACTOR DE COMPRESIÓN

C:

NIVELES DE CUANTIFICACIÓN

PROMEDIO GENERAL DEL FACTOR DE

COMPRESIÓN 8 2

7.75 4 7.76 8 7.35 16 6.78 6.68 32 5.49 64 4.58 128

Tabla 5.5.-Para la imagen “ CAMERA-MAN” (Ver tabla 4.5 capítulo 4 y ecuación

(5.1)):

FACTOR DE COMPRESIÓN

C:

NIVELES DE CUANTIFICACIÓN

PROMEDIO GENERAL DEL FACTOR DE

COMPRESIÓN 8 2

7.88 4 7.61 8 6.76 16 6.27 5.75 32 4.37 64 3.52 128

De las 5 tablas anteriores que se presentan podemos concluir que se obtienen

buenos y mejores resultados acerca al factor de compresión y a la tasa de

compresión, con respecto a otros trabajos afines que se presentan aquí (ver figura

5.4) y también buenos resultados con respecto a las imágenes descomprimidas

desde el punto de vista del Sistema Visual Humano SVH.

Page 116: RESUMEN En el presente trabajo se presenta una técnica para la ...

CAPÍTULO CINCO: “CONCLUSIONES”

SUGERENCIAS PARA TRABAJOS FUTUROS.

Se puede considerar el presente trabajo como una propuesta para codificación

Inter-imagen para la evolución del formato MPEG-2 que se basa en el movimiento

de una imagen, y este formato tiene como base la compresión de cada cuadro por

segundo usando la Transformada Discreta Coseno (TDC). Es por esto que se

recomienda el empleo de dicha transformada para futuros trabajos de

investigación en esta rama, además de que se podrá realizar en tiempo real para

poder ver videos, películas, etc. en formato MPEG-2 .

Page 117: RESUMEN En el presente trabajo se presenta una técnica para la ...

“REFERENCIAS BIBLIOGRÁFICAS”

REFERENCIAS BIBLIOGRÁFICAS. [1] Rafael C. González. “Tratamiento digital de imágenes”. Ed. Adisson-Wesley Ibero-americana. pp.109 -118, 1992. [2] Roger J. Clarke “Digital Compression of Still images and Video”. Ed. Academic Press, pp 21-51 ; 53-86, 1995. [3] A Murat Tekalp. ” Digital Video Processing” Ed. Prentice Hall pp. 368-385. 1995 [4] Anil K. Jain, “Fundamentals of Digital Image Processing”. Ed. Prentice Hall. pp 476-570, 1989. [5] Sid- Ahimed. ” Image Processing. Theory“ Ed. Mc. Graw Hill. pp 277-293, 1991 [6] Robert. M. Gray, “ Vector Quantization and Signal Compression. Ed. Klewer Academic Publishers pp 83-125, 203-214, 1991 [7] Stephen H.Y. Hung, “A generalization of DPCM for image compression”. IEEE transactions on Pattern analysis and machine Intelligence, vol. Pam- No.1 January 1979, pp 100-109. [10] Byron S. Gottfried, “Programación en C”. Ed. Mc Graw Hill, 1990. [11] Robert Sedgewick, “Algoritmos en C++”. Ed. Addison Wesley,1992.

Page 118: RESUMEN En el presente trabajo se presenta una técnica para la ...

“REFERENCIAS BIBLIOGRÁFICAS”

[12] Chris H. Pappas, “ Manual de Borland C++ 4.0”. Ed. Mc Graw Hill,1994

[13] H.M. Deitel, ” Como Programar en C/C++”, Ed. Prentice Hall, 1994. [14] Harley R. Myler, Arthur R. Weeks. “ The Pocket Handbook of Imaging Processing Algoritms in C “ Ed. Prentice Hall, 1993 [15] Rabbani Majid. “ Digital Image Compression Tecniques” Bellingran,WA, 1991 [16] Philip E. Mattison. “ Practical Digital Video With Programming Examples in C” John Wiley & Sons. 1994. [17] Randy Crane. “A Simplified Aproach to Image Processing.” Prentice Hall. 1997. [18] Herbert Schildt “Turbo C++ 3.1 Manual de Referencia.” Mc. Graw Hill México 1993. [19] Eduardo García. “Notas de la ponencia: Compresión de Imágenes” Instituto Politécnico Nacional ESIME 1996 [20] Eduardo García. “Notas del Curso: Procesamiento Digital de Imágenes” Instituto Tecnológico de Estudios Superiores de Monterrey. Campus Estado de México 1998 [21] Hsien S. Hou. “A Fast Recursive Algorith for Computing the Discrete Cosine Transform” IEEE Transactions Acoustics, Speech and Signal Processing . Vol Assp-35, pp 1455-1461, October 1987.

Page 119: RESUMEN En el presente trabajo se presenta una técnica para la ...

“REFERENCIAS BIBLIOGRÁFICAS”

[22] S.C. Chan and K.L. Ho. “A New Two-Dimensional Fast Cosine Transform Algorithm”. IEEE Transactions on Signal Processing. Vol 39, pp 481-485, February 1991. [23] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/index.htm [24] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld001.htm [25] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld002.htm [26] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld003.htm [27] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld004.htm [28] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld005.htm [29] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld006.htm [30] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld007.htm [31] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld008.htm [32] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld009.htm [33] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld010.htm [34] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld011.htm [35] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld012.htm [36] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld013.htm

Page 120: RESUMEN En el presente trabajo se presenta una técnica para la ...

“REFERENCIAS BIBLIOGRÁFICAS”

[37] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld014.htm [38] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld015.htm [39] http://gps-tsc.upc.es/imatge/Main/TEI/3_dpcm/sld016.htm [40] Marcos Fáundez Zanuy. “Tratamiento Digital de Voz e Imagen y aplicación a la Multimedia.” Ed. Alfaomega Marcombo. pp. 113-265 México D.F. 1999 [41] Luse Marv. “Bitmapped Graphics Programming in C++” Addison Wesley, Wilmington, Delaware, U.S.A. First Edition, pp249-299, 1993. [42] http://members.nbci.com/_XMCM/eradigital/mediosdigitales/tv_digital_99_ presentation/s1 d042. a d057htm [43] http://www.fuac.edu.co/autonoma/pregrado/ingenieria/ingelec /proyecto/sgrado/compresvideo/compression JPEG.htm [44] http://www.fuac.edu.co/autonoma/pregrado/ingenieria/ingelec/ proyectosgrado/compresvideo/MPEG2.htm

Page 121: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

APÉNDICE A:

ARCHIVOS BMP.

El formato normal para guardar imágenes de mapa de bis en aplicaciones de

Windows es el formato del archivo bmp a veces conocido como bitmap dispositivo

independiente (dib), este formato también se usa para programas de OS/2 y

muchas aplicaciones de DOS. Debido a la popularidad con aplicaciones de

Windows, se está volviendo un formato común para el software en otros sistemas

operativos.

CONCEPTOS BÁSICOS DE BMP.

Las estructuras de datos que se usan para describir los archivos son: la estructura

de bitmap fileheader, la estructura de bitmaparrayheader, bitmapheader y la

estructura RGB.

Todos los formatos bmp, se construyen usando estas cuatro estructuras. Todos

usan la estructura bitmapfileheader, varios subconjuntos de estructuras del

bitmapheader y de la estructura RGB. Los formatos bmp para OS/2 que tienen

más de una imagen usan la estructura de bitmaparrayheader. Todas las

estructuras están formadas por campos.

Una de las formas más viejas del formato de bitmap es de 12 bits para el tamaño

de la estructura de bitmapheader. Afortunadamente es fácil ver cuando un archivo

de estos se está leyendo, en el campo del tamaño siempre es 12 para esas

estructuras y mayor que 12 para las más recientes.

Page 122: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

INTERPRETACIÓN DE LAS ESTRUCTURAS.

Cada una de las estructuras de bitmapflleheader, bitmaparrayheader

bitmapheader y RGB, están dentro de un archivo de bitmap.

Las dos primeras son de una longitud fija y las dos últimas no son de longitud

constante, y por consiguiente se requiere un manejo especial al leerlas.

• a) ESTRUCTURA BITMAPHEADER:

Esta estructura contiene toda la información que describe una archivo de mapa de

bits, es de 64 bytes, pero la mayoría de los archivos de bitmap no usan todos los

campos con los cuales se constituye, el campo del tamaño siempre contiene la

longitud (en bytes) de dicha estructura. Es decir, si solo se usan los primeros 16

bytes entonces solamente esta longitud se guarda en el archivo, y el campo del

tamaño contiene el valor 16, si se usan los 64 bytes, entonces los 64 bytes se

guardan en el archivo y el campo del tamaño tendrá el valor de 64.

El valor más pequeño para el campo del tamaño es de 12 bytes y éste es el caso

del formato viejo.

• b) ESTRUCTURA BITMAPFILEHEADER:

Esta estructura siempre aparece al inicio del archivo y se compone de 5 campos.

El primer campo, type, indica que tipo de imagen es, el siguiente campo , del

tamaño, puede ignorarse puesto que es un conteo de bytes usado para el bitmap

fileheader con el bitmapheader subsecuente.

Los 2 campos siguientes son las coordenadas X e Y para las imágenes de tipo

bmp. El quinto y último campo, offsettobits contiene el byte compensado.

Page 123: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

• c) ESTRUCTURA BITMAPHEADER:

Esta estructura es la principal de imagen en un archivo de bitmap. Contiene 19

campos, muchos de ellos pueden ignorarse, de hecho, la mayoría de las imágenes

contienen ceros (que son valores predefinidos) para todos, menos los primeros

cinco campos.

El primer campo se usa para determinar el tamaño de la estructura en disco. Los

dos campos siguientes (ancho y alto), indican las dimensiones en pixeles de la

imagen. Debe notarse que la altura puede ser negativa en el caso de que se use

un sistema de coordenadas invertidas (un origen superior- izquierdo en lugar del

usual inferior-izquierdo) en este caso, la altura real de la imagen es el valor

absoluto del campo de altura.

Los 2 campos siguientes, numbitplanes y numbitsperplane, indican la profundidad

del color, numbitp/anes es casi siempre 1.

El siguiente campo, compressionscheme, indica si los datos de la imagen están

comprimidos. La mayoria de los bitmaps no están comprimidos. En modo

monocromático se usa un bit por pixel.

El campo de sizeofimagedata es el número de bytes por pixel.

Para la mayoría de los archivos, el resto de la estructura contendrá normalmente

ceros. Los campos siguientes pueden ignorarse seguramente sin distorsionar las

imágenes.

Los siguientes que son xresolution e yresolution contienen la resolución (rn pixeles

por metro) de la imagen. Si estos valores no son cero, ellos generan un factor de

escala para comprimir la imagen al tamaño apropiado. Numcolorsused indica el

Page 124: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

número de colores realmente usado por la imagen. Resolutionunits indica qué

unidades se usan para la resolución de x y de y. Este campo siempre contiene

ceros,que significa pixeles por metro y probablemente es un poseedor del lugar

para la expansión futura del archivo de mapa de bits.

Padding es el espacio sin usar, y solo sirve para encuadrar los datos restantes

hacia un límite de 4 bytes.

Origin indica la dirección en la cual los bits rellenan el bitmap. Siempre contiene

cero y esto significa que el origen es la esquina inferior izquierda. Loa bits se

rellenan de izquierda a derecha y de abajo hacia arriba. Este campo no es el único

que sirve para determinar el origen de la imagen.

Halftoning, es una bandera que indica uno de 4 algoritmos de halftoning. El uso de

estos algoritmos no está documentado.

Colorencoding describe el formato de la tabla de color.

Formato de Archivo Bitmap.

Las líneas siguientes contienen información detallada del contenido del BMP.

Primero, se explicara la información referente al orden de los bits. Posteriormente,

se dará información a nivel de bits del formato BMP. Por último, se explicaran

algunos conceptos como compresión y ciertos valores en detalle.

Información General

El formato BMP a sido creado por Microsoft e IBM y es extensamente usado en

las plataformas que son compatibles con la arquitectura PC de IBM. Esto quiere

Page 125: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

decir que todos los valores almacenados en un BMP, también lo están en formato

Intel.

Los datos de una imagen BMP son almacenados o empaquetados, pero cada

línea debe terminar en un múltiplo de 4 (dword). Si no fuera el caso, la línea

deberá ser rellenada con ceros al final de esta. Los archivos BMP son

almacenados de abajo a arriba, lo cual significa que la primera línea leída es la

última línea de la imagen BMP.

Contenido del Archivo Bmp.

La siguiente tabla contiene la descripción del formato BMP. Para cada campo, su

desplazamiento, la longitud y el contenido son dados.

Dirección Campo Tamaño Contenido 0000h Identific

ador 2 bytes Los caracteres que identifican al Bitmap. Puede

contener los siguientes valores: ‘BM’ - Windows 3.1x, 95, NT, … ‘BA’ - OS/2 Bitmap Array ‘CI’ - OS/2 Color Icon ‘CP’ - OS/2 Color Pointer ‘IC’ - OS/2 Icon ‘PT’ - OS/2 Pointer

0002h Tamaño del archivo

1 dword Tamaño total del archivo en bytes.

0006h Reservado

1 dword Reservado para su uso posterior.

000Ah Offset a datos Bitmap

1 dword Offset desde el principio del archivo al principio de los Datos Bitmap.

000Eh Tamaño del

1 dword Longitud del Encabezado de Informacion del Bitmap, utilizado para describir los colores del bitmap,

Page 126: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

Escabezado Bitmap

compresión, etc. Los siguientes tamaños son posibles: 28h - Windows 3.1x, 95, NT, … 0Ch - OS/2 1.x F0h - OS/2 2.x

0012h Ancho 1 dword Medida horizontal del Bitmap en Pixeles. 0016h Alto 1 dword Altura del Bitmap en pixeles. 001ªh Planos 1 word Numero de planos en el bitmap. 001Ch Bits Por

Pixel 1 word Usado para almacenar información referente a la

paleta de colores. Tambien identifica de manera indirecta el número de colores posibles. Los valores que puede tomar son: 1 – Bitmap monocromático 4 – Bitmap de 16 colores 8 – Bitmap de 256 colores 16 – Bitmap de 16bit (alto color) 24 – Bitmap de 24bit (color verdadero) 32 – Bitmap de 32bit (color verdadero)

001Eh Compresión

1 dword Especificaciones de la compresión. Los siguientes valores son posibles: 0 - ninguno (Tambien identificado por BI_RGB) 1 - RLE 8-bit / pixel (También identificado por BI_RLE4) 2 - RLE 4-bit / pixel (También identificado por BI_RLE8) 3 - Bitfields (También identificado por BI_BITFIELDS)

0022h Tamaño de Datos Bitmap

1 dword Tamaño de los datos Bitmap en bytes. Este número debe ser redondeado a múltiplo de 4 bytes.

0026h Hresolución

1 dword Resolución horizontal expresada en pixeles por metro.

002Ah Vresolución

1 dword Resolución vertical expresada en pixeles por metro.

002Eh Colores 1 dword Número de colores usados por el Bitmap. Para un bitmap de 8 bits, este número debe ser 100h o 256.

0032h Colores Importantes

1 dword Número de colores importantes. Este número debe ser igual al número de colores cuando todos los colores son importantes.

0036h Paleta N * 4 byte La especificación de la paleta. Para cada entrada en la paleta, cuatro bytes son usados para describir los valores RGB de color de la siguiente manera:

Page 127: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

1 byte para el color azul 1 byte para el color verde 1 byte para el color rojo 1 byte de relleno que es puesto a cero

0436h Datos del Bitmap

x bytes Dependiendo de las especificaciones de compresión, este campo contiene todos los bytes de datos del bitmap, los cuales representan un índice en la paleta de colores.

Nota: Los siguientes tamaños son usados en la especificación anterior:

Tamaño # bytes

Signo

Char 1 signed Word 2 unsigned Dword 4 unsigned

Detalles de los campos

Algunos de los campos requieren más información. A continuación se dará tal

información:

Campo Altura

Este campo identifica la altura del bitmap en pixeles. En otras palabras, describe el

número de líneas del bitmap. Si este campo es negativo, indica que el bitmap va

de arriba abajo. Cuando esto ocurre, el bitmap no puede ser comprimido, y por

tanto, el campo de compresion debe contener BI_RGB o BI_BITFIELDS.

Campo Bits Por Pixel

Este campo determina el número de bits que definen cada pixel y el número

máximo de colores en el bitmap.

Page 128: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

• Cuando este campo es igual a 1.

El bitmap es monocromático y la paleta de colores contiene dos entradas. Cada bit

en el arreglo bitmap representa un pixel. Si el bit es cero, el pixel es desplegado

con el color de la primera entrada de la paleta; si el bit es uno, el pixel tiene el

color de la segunda entrada de la paleta.

• Cuando este campo es igual a 4.

El bitmap tiene un máximo de 16 colores, y la paleta contiene un máximo de 16

entradas. Cada pixel en el bitmap es representado por un índice de 4 bits en la

paleta de colores. Por ejemplo, si el primer byte en el bitmap es 1Fh, el byte

representa dos pixeles. El primer pixel contiene el color en la segunda entrada de

la paleta, y el segundo pixel contiene el color en la entrada 16 de la paleta de

colores.

• Cuando este campo es igual a 8.

El bitmap contiene un máximo de 256 colores, y la paleta contiene hasta 256

entradas. En este caso, cada byte en el arreglo representa un pixel.

• Cuando este campo es igual a 16.

El bitmap tiene un máximo de 216 colores. Si el campo de compresión del bitmap

es puesto a BI_RGB el campo de la paleta no contiene ninguna entrada. Cada

palabra en el arreglo del bitmap representa un pixel. La intensidad relativa de rojo,

verde y azul es representada con 5 bits para cada componente de color. El valor

Page 129: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

de azul esta en los 5 menos significativos bits, seguido por 5 bits de verde y rojo

respectivamente. El bit mas significante no es utilizado.

• Cuando este campo es igual a 24.

El bitmap contiene un máximo de 224 colores, y la paleta no contiene ninguna

entrada. Cada 3 bytes en el arreglo de bitmap representa la intensidad relativa de

azul, verde y rojo respectivamente para un pixel.

• Cuando este campo es igual a 32.

El bitmap contiene un máximo de 232 colores. Si el campo de compresión es

puesto a BI_RGB, la paleta no contiene ninguna entrada. Cada dword en el

arreglo del bitmap representa la intensidad relativa de azul, verde y rojo

respectivamente para cada pixel. El byte alto en cada dword no es utilizado.

Campo Compresión

Este campo especifica la forma en que los datos del bitmap son almacenados en

el archivo. Esta información junto con el campo Bits Por Pixel (BPP) identifican el

algoritmo de compresión como sigue:

Los siguientes valores son posibles en este campo:

Valor Significado BI_RGB Formato sin compresión. BI_RLE4 Formato RLE para bitmaps con 4 bits por pixel. El formato de compresión

es un formato de 2 bytes, que consiste de un byte de cuenta seguido por un índice de color de longitud de 2 word.

BI_RLE8 Formato RLE para bitmaps con 8 bits por pixel. El formato de compresión es un formato de 2 bytes que consiste de un byte de cuenta seguido de

Page 130: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

un byte que contiene un índice de color. BI_BITFIELDS Especifica que el bitmap no esta comprimido y la tabla de colores de tres

máscaras de color doble word que especifica los componentes rojo, verede y azul respectivamente para cada pixel. Esto es válido para bitmaps de16 y 32 bits por pixel.

Campo Color

Este campo especifica el número de índices colores en la tabla de colores usados

por el bitmap. Si este valor es cero, el bitmap usa el máximo número de colores

correspondientes al valor del campo BPP.

Si el campo de color es diferente de cero y el campo BPP es menor a 16, el

campo de color especifica el número actual de colores disponible.

Si el campo BPP es 16 ó mayor, el campo Color especifica el tamaño de la tabla

de color usada para optimizar las paletas de colores de Windows.

Si el campo BPP es 16 o 32, la paleta óptima de colores comienza

inmediatamente seguida de tres mascaras dobles de tamaño word.

Campo Colores Importantes

Este campo especifica el número de índices de color que son considerados

importantes para desplegarse en el bitmap. Si este valor es cero, todos los colores

son importantes.

Page 131: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

APÉNDICE B:

El propósito primordial al implementar y desarrollar un software para la compresión

y descompresión de imágenes, sobre todo cuando se haga la descompresión de la

imagen que se procese es que no debe afectar visiblemente la calidad de la

imagen. Pero las técnicas de compresión por si solas no pueden ganarse todo el

crédito para lograr este propósito. Por ello se hace necesario establecer un

estándar para que diferentes sistemas puedan compartir esas imágenes.

Durante los últimos años se ha hecho un esfuerzo de estandarización conocido

con el acrónimo de JPEG ( Joint Photographic Experts Group) (Grupo Conjunto de

Expertos Fotográficos) que ha dado como resultado el primer estándar

internacional para compresión de imágenes digitales multinivel, tanto en escala de

grises como en color. El "conjunto" en el nombre viene de la cooperación entre

CCITT(COMITÉ CONSULTATIVO INTERNACIONAL DE TELEFONÍA Y

TELEGRAFÍA) e ISO( ORGANISMO INTERNACIONAL DE ESTANDARIZACIÓN).

De esta forma JPEG es tanto un estándar ISO como una recomendación CCITT.

JPEG escogió entre todos los métodos de compresión propuestos un método

basado en codificación por transformación usando la transformada coseno

discreta (DCT) 8 x 8 pues produjo la mejor relación calidad/compresión.

COMPRESIÓN JPEG

A fin de proporcionar un estándar universal para la compresión mínima, el Grupo

de Expertos Fotográficos Asociados o Joint Photographic Experts Group (JPEG)

desarrolló un formato de almacenamiento de la imagen digital basado en estudios

Page 132: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

de la percepción visual humana. El estándar JPEG describe una familia de

técnicas de compresión de imágenes fijas de tonalidad continua en escala de

grises o color (24 bits). Sin embargo, numerosas aplicaciones han usado la técnica

también para compresión de video, porque proporciona descompresión de imagen

de calidad bastante alta a una razón de compresión muy buena, y requiere menos

poder de cálculo que la compresión MPEG (Motion Pictures Experts Group).

Debido a la cantidad de datos involucrada y la redundancia psicovisual en las

imágenes, JPEG emplea un esquema de compresión con pérdidas basado en la

codificación por transformación. El estándar resultante tiene tantas alternativas

como sean necesarias para servir a una amplia variedad de propósitos y hoy día

es reconocido por la Organización Internacional de Estándares con el nombre de

ISO 10918.

El estándar JPEG define tres sistemas diferentes de codificación:

• Un sistema de codificación básico, con pérdidas, que se basa en la

Transformada Discreta del Coseno y es apropiado para la mayoría de las

aplicaciones de compresión.

• Un sistema de codificación extendida, para aplicaciones de mayor

compresión, mayor precisión, o de reconstrucción progresiva.

• Un sistema de codificación independiente sin pérdidas, para la compresión

reversible.

Page 133: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

La codificación sin pérdidas no es útil para el video porque no proporciona razones

de compresión altas. La codificación extendida se usa principalmente para

proporcionar decodificación parcial rápida de una imagen comprimida, para que la

apariencia general de esta pueda determinarse antes de que se decodifique

totalmente. Esto tampoco es útil para el video ya que éste se construye de una

serie de imágenes fijas, cada una de las cuales debe decodificarse y visualizarse a

un ritmo muy rápido.

De las dos alternativas de codificación de entropía, la codificación aritmética sólo

se usa en los procesos de codificación sin pérdidas y extendida. JPEG usa

codificación de Huffman.

El MPEG 2 es un estándar de compresión para imágenes con movimiento a

velocidades de pixel entre 5 y 10 Mbit/s. El estándar de video consiste de cinco

perfiles, referido a la complejidad del algoritmo de compresión y cuatro niveles, los

cuales se refieren a la resolución del video original.

MPEG 2 es un estándar emergente para reproducir video en pantalla completa y

audio con calidad de transmisión; está más orientado hacia la televisión que

MPEG 1, además de que la calidad de la imagen es superior.

El tren de transporte está destinado a la transmisión de programas a larga

distancia, por lo que está sujeto a muchos errores; mientras que el tren de

programa está destinado a aplicaciones donde el dispositivo de almacenamiento o

transmisión es poco susceptible a los errores.

Page 134: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

Como no puede dependerse de la llegada del paquete anterior antes de

descomprimir el paquete actual, MPEG 2 no es ideal para transmisión vía Internet.

El estándar MPEG-2, al haber sido aceptado en América, Europa y Asia, se ha

convertido en el soporte básico sobre el que se desarrollará la televisión digital en

los próximos años. MPEG-2 estará presente en la difusión de programas de

televisión por satélite, cable, redes terrenas y grabaciones en discos ópticos.

Muchos sistemas de producción y archivo de programas harán uso de MPEG-2 en

su perfil de estudio 4:2:2. La compresión MPEG-2 será el flujo vital que llenará de

sonido y color el entorno multimedia.

Page 135: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

Qué es MPEG?

• MPEG es Moving Picture Experts Group

• Estándar definido en 1994, según Rec CCIR-601

• Permite reducir la cantidad de datos digitales utilizados para representar el

vídeo y el sonido (Compresión de Datos)

• Básicamente existen dos versiones para distintas aplicaciones: MPEG-1 y

MPEG-2

¿Dónde se aplica MPEG?

• MPEG-1 se aplica a CD-ROM, baja velocidad de datos, no definido para

sistemas de transmisión, utilizado para distribución y educación a distancia.

• MPEG-2 se aplica en baja y alta velocidad de datos, CD-ROM, DVD, cinta,

transmisión terrenal y satelital, cable, etc, etc.

• MPEG-1 y 2 no compiten, el 2 no es la evolución del 1.

Características del MPEG-2

• El MPEG-2 de ha convertido en el estándar mundial de compresión

utilizado en televisión, le dicen “MPE-rador”.

• Opera sobre diferentes medios de transmisión. (Satélite, Fibra, MMDS,

Cable, Terrestre digital)

• Es de gran flexibilidad para transportar cualquier tipo de datos. (Vídeo,

Sonido, Internet, Gráficos,´Música, Archivos, etc.)

• Soporta la HDTV

Page 136: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

APÉNDICE C:

#include <stdio.h> #include <stdlib.h> #include <math.h> #include "util.h" #include "utildct.h" #define MN 8 // CÓDIGO FUENTE DEL PROGRAMA PRINCIPAL PARA COMPRIMIR Y DESCOMPRIMIR IMÁGENES // USANDO CODIFICACIÓN DPCM ADAPTABLE BAJO EL DOMINIO DE LA TRANSFORMADA COSENO // DISCRETA. // AUTOR: JOSÉ FÉLIX SERRANO TALAMANTES. // ITESM-CEM & ESIME I.P.N MÉXICO D.F. BLOC_IMAGE data1,data2; BLOC_IMAGE copiada_pre2; BLOC_IMAGE original_pre,original_dct,original_cuant,original_int; image original; image original_dctinv; int mode,n,v; float intervalo[129]; void tam_ima(void); BLOC_IMAGE dct(image org_dct); image dctinv(BLOC_IMAGE predicha_dctinv); BLOC_IMAGE predictor(BLOC_IMAGE copiada); BLOC_IMAGE predicciones(BLOC_IMAGE org_pre); BLOC_IMAGE cuantificador(BLOC_IMAGE org_pre); void visualiza(int mode); void huffman(void); void huffinv(void); void compara (void); BLOC_IMAGE interpreta(); void tam_ima(void) { /* PROCESO DE LA DCT */ data1 = AllocTab(float,1,1);

Page 137: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

if (data1 == NULL) { printf("\n\nEspacio Insuficiente para crear buffer de datos.\n\n"); exit(1); } data2 = AllocTab(float,MN,MN); if (data2 == NULL) { printf("\n\nEspacio Insuficiente para crear buffer de datos.\n\n"); exit(1); } copiada_pre2 = AllocTab(float,32,32); if (copiada_pre2== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } original_dctinv = Crear_image(original.alto,original.ancho); if (original_dctinv.pixels==NULL) exit(-1); original_pre = AllocTab(float,256,256); if (original_pre== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } original_cuant = AllocTab(float,256,256); if (original_cuant== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } original_int = AllocTab(float,256,256); if (original_int== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); }

Page 138: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

} BLOC_IMAGE dct(image org_dct) { BLOC_IMAGE matriz_din,data_dct,outdata; int a,b,i,j; matriz_din = AllocTab(float,256,256); if ( matriz_din== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } data_dct = AllocTab(float,MN,MN); if (data_dct == NULL) { printf("\n\nEspacio Insuficiente para crear buffer de datos.\n\n"); exit(1); } outdata = AllocTab(float,MN,MN); if (outdata == NULL) { printf("\n\nEspacio Insuficiente para crear buffer de datos.\n\n"); exit(1); } INITDCT(MN,MN); for (a=1; a<33; a++) { for(b=1; b<33; b++) { COPYVECT(data_dct,org_dct,(a-1)*8,(b-1)*8,MN,MN); for(i=0; i<8;i++) { for(j=0; j<8;j++) { data_dct[i][j]-=128.0; } }

Page 139: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

DCT(data_dct,outdata,MN,MN); for(i=0; i<8;i++) { for(j=0; j<8;j++) { matriz_din[((a-1)*8)+i][((b-1)*8)+j] = outdata[i][j]; } } } } return(matriz_din); } image dctinv(BLOC_IMAGE predicha_dctinv) { BLOC_IMAGE data,outdata; image predicc_dctinv; int a,b,i,j; data = AllocTab(float,MN,MN); if (data == NULL) { printf("\n\nEspacio Insuficiente para crear buffer de datos.\n\n"); exit(1); } outdata = AllocTab(float,MN,MN); if (outdata == NULL) { printf("\n\nEspacio Insuficiente para crear buffer de datos.\n\n"); exit(1); } /* AQUI SE APLICA LA DCT INVERSA */ for (a=1; a<33; a++) { for(b=1; b<33; b++) { for(i=0; i<8;i++) { for(j=0; j<8;j++) {

Page 140: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

outdata[i][j] = predicha_dctinv[((a-1)*8)+i][((b-1)*8)+j]; } } DCTINV(outdata,data,MN,MN); for(i=0; i<8;i++) { for(j=0; j<8;j++) { data[i][j]+=128.0; } } COPYIMA(data,original_dctinv,(a-1)*8,(b-1)*8,MN,MN); } } return(original_dctinv); } BLOC_IMAGE predictor(BLOC_IMAGE copiada) { int i=0,j=0,x=0,y=0,a=0,b=0; float z1; // printf("en %f \n",copiada[0][0]); // getch(); for(j=0;j<6;j=j+1) for(i=0;i<6;i=i+1) { z1=(copiada[i+1][j]+copiada[i][j]+copiada[i][j+1] +copiada[i+2][j]+copiada[i][j+2])/5; copiada[i+1][j+1]=z1; } return(copiada);

Page 141: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

} BLOC_IMAGE predicciones(BLOC_IMAGE org_pre) { int i=0,j=0,a,b,x,y; float suma=0.0,promedio=0.0; BLOC_IMAGE copiada_pre,org_pre2; BLOC_IMAGE copiada_pre2; org_pre2= AllocTab(float,256,256); if (org_pre2== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } copiada_pre= AllocTab(float,8,8); if (copiada_pre== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } copiada_pre2= AllocTab(float,8,8); if (copiada_pre2== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } for(i=0;i<256;i=i+8) for(j=0;j<256;j=j+8) { for(a=0;a<8;a=a+1) for(b=0;b<8;b=b+1) { copiada_pre[a][b]=org_pre[a+i][b+j]; } copiada_pre=predictor(copiada_pre); for(a=0;a<8;a=a+1) for(b=0;b<8;b=b+1) {

Page 142: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

org_pre2[a+i][b+j]=copiada_pre[a][b]; } } return (org_pre2); } BLOC_IMAGE cuantificador(BLOC_IMAGE org_pre) { int i,j,promedio; float Emin=65535, Emax=-65535; float muestra; float relacion,calculo,inicio,valor,Eq; FILE *fptr; char nombre1[14]; BLOC_IMAGE org_err; BLOC_IMAGE org_cuant; org_err= AllocTab(float,256,256); if (org_err== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } org_cuant= AllocTab(float,256,256); if (org_cuant== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } for(i=0;i<256;i++) { for(j=0;j<256;j++) { org_err[i][j] = original_dct[i][j]-org_pre[i][j]; } } clrscr(); printf(" DE LA IMAGEN DE ERROR EN LA PREDICCION SE TIENE:\n"); getchar();

Page 143: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

for(i=0;i<256;i++) for(j=0;j<256;j++) { if ( (original_dct[i][j] - org_pre[i][j]) > Emax) Emax = original_dct[i][j] - org_pre[i][j]; if ( (original_dct[i][j] - org_pre[i][j]) < Emin) Emin = original_dct[i][j] - org_pre[i][j]; } printf(" Valor m¡nimo = %3.1f", Emin); printf(" Valor m ximo = %3.1f\n", Emax); do { printf(" DAME EL NUMERO DE NIVELES DEL SISTEMA CUANTIFICADOR (2,4,8,16,32,64,128) = " ); scanf("%d",&v); } while ((v<2) || (v>128)); muestra = (Emax - Emin)/v; printf(" EL GRADO DE AGRUPACION DEL SISTEMA CUANTIFICADOR ES = %4.2f\n\n",muestra); printf(" Al seleccionar <%d muestras> se va a comprimir a %f bit/pixel\n",v,log10((double)v)/log10(2.0)); getchar(); printf(" presiona <ENTER> continuar......\n"); getchar(); for( n=0; n<=v; n++ ) { intervalo[n] = 0.0; intervalo[n] = Emin+muestra*n; } for (i=0;i<256;i++) /* codificacion */ { { for (j=0;j<256;j++) for(n=1;n<=v; n++) { if( (original_dct[i][j]-org_pre[i][j])>intervalo[n-1] && (original_dct[i][j]-org_pre[i][j])<=intervalo[n]) { org_cuant[i][j]=n-1; break; } else if(original_dct[i][j]-org_pre[i][j]==intervalo[0]) { org_cuant[i][j] = n-1; break; } } } } printf("\n\n"); printf(" LA MATRIZ DE CUANTIFICACION ES :\n\n");

Page 144: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

getch(); for ( i=0; i<256;i++) { { for(j=0; j<256; j++) org_cuant[i][j]; // printf("%6f" ,org_cuant[i][j]); // printf("\n\n"); } } // printf("\n\n"); // getch(); // clrscr(); // otra(); // clrscr(); fptr = fopen("cuantifi.dat","wb"); if(fptr == NULL) { printf(" ERROR,ARCHIVO NO SE PUEDE ABRIR PARA ESCRITURA\n",nombre1); exit(1); } for(i=0;i<256;i++) for(j=0;j<256;j++) { putc(org_cuant[i][j],fptr); } fclose(fptr); return(org_cuant); } void huffman(void) { int i,j,N,M,loc,k,ind,xt,yt; unsigned char *v,*L, *gris,*longi_tabla; unsigned long int *codigo,*codi_tabla,ctemp2; unsigned long int aux1,aux2,felix,act_len ; unsigned char Len; int ch; unsigned char ctemp,Ltemp; float temp,sum,*pt,*p,gato; unsigned long int *histo; char nombre2[14]; FILE *fptr, *fptro; fptr=fopen("cuantifi.dat", "rb"); if(fptr==NULL) { printf("%s no existe ","cuantifi.dat"); exit(1); }

Page 145: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

/* printf("\nteclee el nombre del archivo a guardar la imagen a codificar-->"); scanf("%s",nombre2);*/ fptro=fopen("comprimida.dat","wb"); //generando el histograma histo=(unsigned long int*)malloc(256*sizeof(long int)); for(i=0; i<256; i++) histo[i]=0; while((ch=getc(fptr))!=EOF) //checar getch(); histo[ch]++; p=(float*)malloc(256*sizeof(float)); gris = (unsigned char*)malloc(256*sizeof(char)); k=0; for(i=0; i<256; i++) { if(histo[i]!=0) { p[k]=(float)histo[i]; gris[k]=i; k++; } } free(histo); N=k; //normalizando sum=0.0; for(i=0; i<N; i++) sum+=p[i]; for(i=0; i<N; i++) p[i]/=sum; //ordenando las probabilidades en orden ascendente for(i=0; i<(N-1); i++) { gato =p[i]; loc=i; for(j=i+1; j<N; j++) { if(p[j]>gato) { gato= p[j]; loc=j; } } if(loc==i) continue; else { temp= p[i]; ctemp=gris[i]; p[i]=p[loc]; gris[i]=gris[loc]; p[loc]=temp; gris[loc]=ctemp;

Page 146: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

} } pt=(float *)malloc(N*sizeof(float)); for(j=0; j<N; j++) pt[j]=p[j]; v= (unsigned char *)malloc((N-2)*sizeof(char)); codigo=(unsigned long int *)malloc(N*sizeof(unsigned long int)); L=(unsigned char*)malloc(N*sizeof(char)); for(i=0; i<(N-2); i++) v[i]=0; //contraci¢n de pasos en al generaci¢n del c¢digo huffman M=N; for(i=0; i<(N-2); i++) { p[M-2]=p[M-1]+p[M-2]; loc=M-2; for(j=0; j<(M-1); j++) { if(p[M-2]>=p[j]) { loc=j; break; } } temp=p[M-2]; for(j=M-2; j>=loc; j--) p[j]=p[j-1]; p[loc]=temp; M--; v[(N-3)-i]=loc; } //expansi¢n de pasos en la generaci¢n del c¢digo huffman for(j=0; j<N; j++) { codigo[j]=0; L[j]=1; } codigo[0]=0; codigo[1]=1; M=1; for(i=0; i<(N-2); i++) { if(v[i]==M) { codigo[M+1]=(codigo[M]<<1)+1; codigo[M]=(codigo[M])<<1; L[M]++; L[M+1]=L[M]; } else { ctemp2=codigo[v[i]];

Page 147: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

Ltemp=L[v[i]]; for(j=v[i];j<M; j++) { codigo[j]=codigo[j+1]; L[j]=L[j+1]; } codigo[M]=ctemp2; L[M]=Ltemp; codigo[M+1]=(codigo[M]<<1)+1; codigo[M]=codigo[M]<<1; L[M]++; L[M+1]=L[M]; } M++; } sum=0.0; for(j=0; j<N; j++) sum+= pt[j]*(float)L[j]; printf("\nraz¢n de n£meros bit/pixel. = %f",sum); free(v); free(p); free(pt); //codificaci¢n //Escritura del encabezado en el archivo de salida //los primeros 4 bytes almacenan la longitud verdadera en bits de la //imagen almacenada con el MSB primeramente almacenado //El quinto byte es el n£mero del c¢digo huffman =N. Los siguientes N //bytes contienen el c¢digo natural N para los niveles de grises //seguido por los N bytes conteniendo la longitud del c¢digo huffman //Esos son seguidos por el actual c¢digo hufmman almacenado en forma //de paquete. for(i=0; i<4; i++) putc((int)0,fptro); //reserva los 4 primeros bytes para la longitud verdadera del archivo en bits putc(N,fptro); for(i=0; i<N; i++) putc(gris[i],fptro); for(i=0; i<N; i++) putc(L[i],fptro); aux1=0; Len=0; for(i=0; i<N; i++) { Len+= L[i]; aux1=(aux1<<L[i])|codigo[i]; if(Len<8) continue; else while(Len>=8) { aux2=aux1; felix=255; felix<<=(Len-8);

Page 148: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

aux2=(aux2&felix); aux2>>=(Len-8); ch=(char)aux2; putc(ch,fptro); felix=~felix; aux1=aux1&felix; Len-=8; } } if(aux1!=0) { ch=(char)(aux1<<(8-Len)); putc(ch, fptro); } codi_tabla=(unsigned long int *)malloc(256*sizeof(long int)); longi_tabla=(unsigned char *)malloc(256*sizeof(char)); for(i=0; i<N; i++) { codi_tabla[gris[i]]=codigo[i]; longi_tabla[gris[i]]=L[i]; } rewind(fptr); Len=0; act_len=0; //variable a salvar la longitud real de los bits en archivo aux1=aux2=0; k=0; while((ch=getc(fptr))!=EOF) { k++; Len+=longi_tabla[ch]; act_len+=longi_tabla[ch]; aux1=(aux1<<longi_tabla[ch])|codi_tabla[ch]; if(Len<8) continue; else while(Len>=8) { aux2=aux1; felix=255; felix<<=(Len-8); aux2=aux2&felix; felix=~felix; aux1=aux1&felix; aux2>>=(Len-8); ch=(char)aux2; Len-=8; //checar si es - ¢ no putc(ch,fptro); } } if(aux1!=0) //transmisi¢n de bits remmanings { ch=(char)(aux1<<(8-Len)); putc(ch,fptro); }

Page 149: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

rewind(fptro); //escribe la longitud verdadera del archivo M=8*sizeof(long int)-8; for(i=0; i<4; i++) { felix=255; felix<<=M; aux1=(act_len&felix); aux1>>=M; ch=(int)aux1; putc(ch,fptro); M-=8; } fclose(fptro); fclose(fptr); getch(); } void huffinv(void) { unsigned int i,j,N,M,k,xt,yt; unsigned char *L, *gris; unsigned long int *codigo; unsigned long int aux1, aux2,Lmask, act_len, longitud; unsigned char mascara, Len; int ch, ind; unsigned char ctemp, Ltemp; char nombre3[14]; FILE*fptr,*fptro; clrscr(); /* printf("\n\n\nEscriba el nombre del archivo con la imagen comprimida-->"); scanf("%s",nombre);*/ fptr=fopen("comprimida.dat", "rb"); if(fptr==NULL) { printf("El archivo no existe","comprimida.dat"); exit(1); } /* printf("\nEscriba el nombre del archivo para descomprimir la imagen-->"); scanf("%s",nombre3);*/ fptro=fopen("recuperada.dat","wb"); /* leyendo el encabezado*/ act_len=0; M=8*sizeof(long int)-8; for(i=0; i<4; i++)

Page 150: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

{ ch=getc(fptr); aux1=(unsigned long int)ch; aux1<<=M; act_len|=aux1; aux1=(long int)0; M-=8; } N=getc(fptr); gris=(unsigned char*)malloc(N*sizeof(char)); L=(unsigned char*)malloc(N*sizeof(char)); codigo=(unsigned long int*)malloc(N*sizeof(long int)); for(i=0; i<N; i++) gris[i]=getc(fptr); for(i=0; i<N; i++) L[i]= getc(fptr); mascara=128; Len =0; aux2=0; aux1=0; ind=1; i=0; while(ind) { ch=getc(fptr); for(k=0; k<8; k++){ aux1=ch&mascara; ch<<=1; aux2<<=1; if(aux1!=0) aux2|=1; Len++; if(Len==L[i]) { codigo[i]= aux2; aux2=0; Len=0; i++; if(i==N){ ind=0; break; } } } } Len=0; aux1=aux2=0; longitud=0; mascara=128; ind=1; while(ind) { ch=getc(fptr); for(k=0; k<8; k++)

Page 151: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

{ /*probando si el final del archivo atual ha sido alcanzado*/ if(longitud>act_len) {ind=0; break;} aux1=(ch&mascara); ch<<=1; aux2<<=1; if(aux1!=0) aux2|=1; Len++; for(j=0; j<N; j++) { if(L[j]>Len) break; if(L[j]==Len) { if(codigo[j]==aux2) { aux2=0; putc((int)gris[j],fptro); Len=0; break; } } } longitud++; } } // printf("\n Decodificaci¢n terminada"); // fcloseall(); fclose(fptr); fclose(fptro); } BLOC_IMAGE interpreta() { FILE *fp; int i,j; char caracter; float h; BLOC_IMAGE recuperada,cuantifinv,descomprimida; recuperada = AllocTab(float,256,256); if (recuperada== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } cuantifinv = AllocTab(float,256,256);

Page 152: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

if (cuantifinv== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } descomprimida = AllocTab(float,256,256); if (descomprimida== NULL) { printf("\n\nEspacio Insuficiente para crear matriz din mica de datos.\n\n"); exit(1); } fp=fopen("recuperada.dat", "rb"); if(fp==NULL) { printf("El archivo no existe"); exit(1); } for(i=0;i<256;i++) { for(j=0;j<256;j++) { caracter=getc(fp); h=caracter; recuperada[i][j] = h; } } clrscr(); for(i=0;i<256;i++) { for(j=0;j<256;j++) { recuperada[i][j]; // printf("%.0f",recuperada[i][j]); } } for (i=0;i<256;i++) { for (j=0;j<256;j++) { n=recuperada[i][j]; cuantifinv[i][j]=(intervalo[n] + intervalo[n+1]) * 0.5; } } /* printf(" LA CUANTIFICADA INVERSA ES :\n\n"); getch();*/ for (i=0;i<256;i++)

Page 153: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

{ for (j=0;j<256;j++) cuantifinv[i][j]; // printf("%6.1f",cuantifinv[i][j]); } /* printf(" RECUPERACION DE LA MATRIZ ORIGINAL (DESCOMPRESION) :\n\n"); getch();*/ for (i=0; i<256;i++) { for(j=0; j<256; j++) { descomprimida[i][j] = cuantifinv[i][j] + original_pre[i][j]; // printf("%6.1f" ,descomprimida[j][i]); } } return(descomprimida); } void visualiza(int mode) { int a,b,i,j,ss,cont=0; BLOC_IMAGE data; data = AllocTab(float,MN,MN); if (data == NULL) { printf("\n\nEspacio Insuficiente para crear buffer de datos.\n\n"); exit(1); } clrscr(); printf(" PRESIONA <ENTER> PARA VER IMAGEN ORIGINAL\n\n"); getchar(); Initgraph(mode); if (VIRTUAL) gl_setcontext(backscreen); gl_clearscreen(0); for (a=1; a<33; a++)

Page 154: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

{ for(b=1; b<33; b++) { COPYVECT(data,original,(a-1)*8,(b-1)*8,MN,MN); for(i=0; i<MN; i++) for(j=0; j<MN; j++) gl_setpixelrgb(j+(b*8),i+(a*8),(unsigned char) data[i][j],(unsigned char) data[i][j],(unsigned char) data[i][j]); } } ss=getch(); if (ss=='o' || ss=='O') { if (cont==0) salvar("origin.bmp"); } else cont ++; getchar(); if (VIRTUAL) gl_copyscreen(physicalscreen); getchar(); vga_setmode(TEXT); printf(" presiona <ENTER> para ver descomprimida\n"); getchar(); Initgraph(mode); if (VIRTUAL) gl_setcontext(backscreen); gl_clearscreen(0); for (a=0; a<256; a++) { for(b=0; b<256; b++) { COPYVECT(data1,original_dctinv,a,b,1,1); // for(i=0; i<MN; i++) // for(j=0; j<MN; j++) gl_setpixelrgb((b),(a),(unsigned char) data1[0][0],(unsigned char) data1[0][0],(unsigned char) data1[0][0]); } } cont ++; ss=getch(); if (ss=='o' || ss=='O') { if (cont==1) salvar("descomp.bmp"); }

Page 155: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

getchar(); } void compara(void) { int promedio,i,j,v,n,l; double promedio_error; float promedio_error1; float Emin=65535, Emax=-65535; float muestra,relacion; double aux,calculo; printf(" LA RELACION SE¥AL A RUIDO DE LA IMAGEN DE ERROR ES:\n"); promedio_error=0.0; for(i=0;i<original.alto;i++) { for(j=0;j<original.ancho;j++) { aux=pow(original.pixels[j][i],2.0); promedio_error += aux; } } printf(" La sumatoria de pixeles originales^2 = %3.2lf\n", promedio_error); getchar(); calculo=0.0; for(i=0;i<original.alto;i++) { for(j=0;j<original.ancho;j++) { aux=pow((original.pixels[j][i] - original_dctinv.pixels[j][i]),2.0); calculo+=aux; } } printf(" La sumatoria de pixeles del error^2 = %3.2lf\n", calculo); getchar(); relacion=10 *log10( (double)promedio_error/calculo); printf(" LA RELACION SE¥AL A RUIDO DE LA IMAGEN ES =%3.2f\n", relacion); getchar(); } void main() {

Page 156: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”

clrscr(); mode=GraphMode(); clrscr(); original=Leer(); tam_ima(); getchar(); clrscr(); printf(" PRESIONA <ENTER> PARA VER LOS CALCULOS DEL PROCESO\n"); clrscr(); original_dct=dct(original); clrscr(); printf("1"); getchar(); original_pre=predicciones(original_dct); printf("2"); getchar(); original_cuant=cuantificador(original_pre); printf("3"); getchar(); huffman(); printf("4"); getchar(); huffinv(); printf("5"); getchar(); original_int=interpreta(); printf("6"); getchar(); original_dctinv=dctinv(original_int); printf("7"); getchar(); compara(); printf("8"); getchar(); visualiza(mode); }

Page 157: RESUMEN En el presente trabajo se presenta una técnica para la ...

“APÉNDICES”