Compresión De Imágenes Utilizando La Transformada Wavelet

Anuncio
COMPRESIÓN DE IMÁGENES UTILIZANDO LA TRANSFORMADA
WAVELET
ING. RODOLFO QUIJADA
Caracas-Venezuela
E-mail: [email protected]
RESUMEN
Las imágenes requieren recursos substanciales del almacenaje y la transmisión, así la compresión de la imagen es
ventajosa para reducir estos requisitos. Este informe cubre un ciertos aspectos del análisis de wavelets, compresión
de datos y cómo las éstas se pueden utilizar para la compresión de la imagen. Una investigación en el proceso y los
problemas implicados con la compresión de la imagen fue hecha y los resultados de esta investigación se discuten.
Su utilizó las herramientas de Matlab y se encontró que el nivel local de umbral tuvo una influencia extremadamente
mejor en los resultados de la compresión que las estrategias que consideran el nivel de umbral general.
ABSTRACT
Images require substantial storage and transmission resources, thus image compression is advantageous to reduce
these requirements. The report covers some background of wavelet analysis, data compression and how wavelets can
be used for image compression. An investigation into the process and problems involved with image compression
was made and the results of this investigation are discussed. We used the wavelets matlab tool kits and It was
discovered that local thresholding was had an extremely better influence of compression results over the general
thresholding strategies
INTRODUCCIÓN
A menudo las señales que deseamos
procesar están en el dominio del tiempo,
pero para procesarlas más fácilmente se
requiere otro tipo información, tal como el
plano de la frecuencia. Transformaciones
matemáticas traducen la información de
señales en diversas representaciones. Por
ejemplo, la transformada de
Fourier
convierte una señal entre el tiempo y el
dominio de la frecuencia, tales que las
frecuencias de una señal pueden ser
observadas. Sin embargo la transformada de
Fourier
no puede proporcionar la
información en la cuales ciertas frecuencias
ocurren en momentos de tiempo específico
de la señal, ya que frecuencia y tiempo
son vistos independientemente. Para
solucionar este problema se trabaja con la
Short Term Fourier transform (STFT), la
cual introdujo la idea de las ventanas a través
de las cuales diversas partes de una señal se
observan. Para una ventana dada en tiempo
las frecuencias respectivas puede ser
observadas y mediadas. Sin embargo el
Principio De la Incertidumbre De
Heisenburg.s establece así que como la
resolución de la señal mejora en el dominio
de tiempo, mediante el enfoque de zoom en
diferentes secciones, la resolución en la
frecuencia desmejora.
Idealmente, un
método de multiresolución es necesario, y
permite que ciertas partes de la señal sean
analizadas bien en el dominio del tiempo, y
otras partes también puedan ser igualmente
bien analizadas en el plano de frecuencia.
La capacidad y la magia del análisis de
wavelet es exactamente esta multiresolución.
.Las imágenes contienen grandes cantidades
de información que requiera mucho espacio
de almacenamiento,
ancho de banda
considerable y tiempos largos de la
transmisión. Por lo tanto es ventajoso
comprimir
la
imagen
almacenando
solamente la información esencial necesaria
para reconstruir la imagen. Una imagen se
puede pensar en como matriz de los valores
del píxel (o intensidad). Para comprimir la
imagen, las redundancias se deben explotar,
por ejemplo, áreas donde hay poco o nada
de cambio entre los valores del píxel. Por lo
tanto imágenes que tienen grandes las áreas
del color uniforme tendrán redundancias
grandes, e inversamente imágenes que
tengan cierta frecuencia y cambios grandes
en color serán menos redundantes y más
“duras” de comprimir.
Las técnicas de transformadas tienen por
objetivo descorrelacionar los píxeles de la
imagen al proyectarla sobre otro dominio a
partir de un conjunto de funciones de base.
La idea general es que en el dominio
transformado la mayor parte de la
información se ‘empaqueta’ en un número
menor de muestras, las cuales pueden ser
directamente almacenadas o codificadas
escalar o vectorialmente para lograr más
compresión.
El análisis de wavelet se puede utilizar para
dividir la información de una imagen en
subseñales de aproximación y de detalles de
ella misma. La subseñal de aproximación
muestra la tendencia general de los valores
de los píxel y
subseñales de detalles
muestran los detalles o los cambios
verticales, horizontales y diagonales en la
imagen. Si estos detalles son muy pequeños
entonces pueden ser fijados a cero sin
perceptiblemente cambiar la imagen. El
valor debajo de el cual los detalles se
consideran bastante pequeños pueden ser
fijados a cero se conocen como el umbral
(threshold). Mientras mayor es el número de
ceros mayor es la compresión que puede ser
alcanzado. La cantidad de información
conservada por la imagen después de que la
compresión y la descompresión se conoce
como la energía retenida y ésta es
proporcionales a la suma de los cuadrados de
los valores del píxel.
Si la energía
conservada es el 100% entonces la
compresión es conocida como compresión
sin pérdida (lossless)., y la imagen puede ser
reconstruida exactamente.
Esto ocurre
cuando es el valor de umbral se fije a cero,
significando que los detalles no se han
cambiado. Si algunos valores se cambian se
perderá parte de la energía y ésta se conoce
como compresión con pérdidas (lossy).
Idealmente, durante la compresión el número
de ceros y la retención de la energía será tan
alta como sea posible. Sin embargo, como
se obtienen más ceros se pierde más energía,
se necesita encontrar de un equilibrio entre
las dos necesidades.
La primera parte del informe introduce el
fondo de wavelets y de la compresión más
detalladamente. Esto es seguido por una
revisión de una investigación práctica en
cómo la compresión se puede alcanzar con
wavelets y los resultados obtenidos. El
propósito de la investigación era encontrar el
efecto del nivel de la descomposición,
wavelet e imagen sobre el número de los
ceros y de la retención de la energía y
entropía que podrían ser alcanzados. Por
las razones de tiempo, el conjunto de
imágenes y de los niveles investigados
fueron mantenidas pequeñas. Por lo tanto
solamente una familia de wavelets, las
wavelets de HAAR, fue utilizada.
WAVELETS Y MULTIRRESOLUCIÓN
La potencia de Waavelets proviene de su uso
en el análisis multirresolución. Más que
examinar la señal completa a través de una
misma ventana, partes diferentes de la onda
pueden ser vistas a través de ventanas de
diferentes anchos. Las partes de alta
frecuencia de la señal usan ventanas
pequeñas para obtener una buena resolución
en tiempo, las partes de baja frecuencia de la
señal usan una ventana grande para obtener
una buena información en frecuencia. Una
cuestión importante que debemos notar es
que las ventanas tienen igual área a pesar
de que se varíe la altura y el ancho durante el
análisis wavelet. El área de las ventanas es
controlado por el principio de incertidumbre
de Heisnberg’s.
De esta manera
el Análisis Discreto
Wavelet en dos dimensiones (DWT2) es
realizado usando el concepto de banco de
filtros con diferente frecuencia de corte:
(1)
Un filtro pasa-alto g[n]
(2)
Un filtro pasa-bajos h[n]
Estos filtros pasabajos h n y pasaltos g n
que actúan primero en una dirección y luego
en la otra, se muestra en la siguiente figura
como la unidad básica que realiza la
descomposición en multiresolución:
h [n ]
2
 x , y 
g [n ]
2
 H x , y 
h [n ]
2
 V x , y 
g [n ]
2
 D x , y 
2
f [ x ,y ]
g [n ]
h [n ]
2
E je x . F ila s
E je y . C o lu m n a s
Figura 1: Estructura de filtros.
Visto desde una perspectiva bidimensional,
tal como se observa en la figura Nro. 2
Figura Nro. 2: Estructura de las subbandas.
La subbanda LL (del inglés Low, Low) o
( x, y) , proviene de la aplicación del filtro
de análisis paso bajo en ambas direcciones,
la horizontal y la vertical. La subbanda HL
(del inglés High, Low) o H (x,y),
se
obtiene aplicando el filtro paso bajo en la
dirección vertical y el filtro paso alto en
horizontal. Las otras subbandas, se
identificarían como LH (del inglés Low,
High) o V (x,y) y HH (del inglés High,
High) o D (x,y), respectivamente. El nivel
D de la DWT se obtiene aplicando D veces
la DWT de la manera que se indica en la
Figura 5.6. Esto es, a la subbanda LL
producida por la primera aplicación de la
DWT se le aplica otra vez la DWT y así
sucesivamente. Las subbandas producidas
por el paso d de la transformada se denotan
como LLd, HLd, LHd y HHd. Las subbandas
intermedias no tienen muestras por si
mismas, sino que son un nodo en el árbol y
podemos considerar que sus muestras son las
de las hojas de las ramas que cuelgan de él.
La descomposición wavelet puede ser
interpretada
entonces
como
una
descomposición de la imagen en un conjunto
de canales o bandas de frecuencia
independientes entre sí y espacialmente
orientados. Mientras una banda (pasabajo)
contiene una versión borrosa de la imagen
original, las otras bandas resaltan la
información de alta frecuencia (bordes y
texturas). Pero más importante aún es que
esta última se encuentra separada en las
bandas de acuerdo a su ubicación en el
espacio: horizontal
H (x,y), vertical
ANALISIS WAVELET 2D EN MATLAB
En MATLAB las imagines son tratadas
como señales bidimensionales y son
consideradas como matrices con N filas y M
columnas. En cada nivel de descomposición
en la transformada wavelet los datos
horizontales son filtrados, de esta manera la
matriz de aproximación y las de detalles que
se producen son filtradas sobre las columnas,
tal como se muestra en la siguiente figura:
 (x,y) y diagonal  (x,y)
V
D
Al aplicar una descomposición como la que
se muestra en la figura a una imagen
cualquiera, se obtiene una división en
sub-bandas como la que se muestra en la
figura Nro. 3:
Tal como se puede observar, en cada nivel se
obtienen
cuatro
subimágenes,
la
aproximación y los detalles vertical,
horizontal y diagonal. En la siguiente figura
podemos observar
como a través de
MATLAB,
la
imagen
saturno
se
descompone en el primer nivel. Vemos de
esta manera como con la transformada
wavelet
hemos obtenido los cambios
verticales, horizontales y diagonales.
I m a g e n O r ig in a l
1 º E ta p a
2 º E ta p a
3 º E ta p a
Fig-3 Descomposición de una imagen en tres niveles.
Para
obtener el siguiente nivel de
descomposición
la
subimagen
se
descompone una vez más, tal como puede
observarse en la siguiente figura.
no cambian. Durante la compresión sin
embargo, se pierde la energía porque el
umbral (thresholding) cambia los valores de
los coeficientes y por lo tanto la versión
comprimida contiene menos energía.
Las transformadas wavelet originales
utilizadas
en
este
trabajo
fueron
implementadas usando wavelets ortogonales,
es decir, usando filtros ortogonales. Con los
filtros ortogonales, la transformada wavelet
puede ser vista como una proyección de la
señal de entrada en un conjunto de funciones
de base ortogonal. Si los filtros además están
normalizados la transformada wavelet
conserva la energía y la entropía. Para una
señal de entrada x[ n] de longitud N, la
propiedad de conservación de la energía, la
cual es análoga a la relación de Parseval,
puede ser vista como
_
N 1
x
n 0
CONSERVACIÒN Y COMPACTACIÒN
DE LA ENERGÌA Y DE LA ENTROPÌA
Una característica importante del análisis de
wavelet es la de conservar la energía y la
entropía. La energía se define como la suma
de los cuadrados de los valores del píxel,
mientras que si una imagen tiene G niveles
de grises y la probabilidad de un nivel de
gris k es P(k), la entropía H está dada por:
G 1
H=
 P(k ) log2(P(k )) (1)
k o
La energía en la transformada wavelet de
una imagen es la suma de los cuadrados de
los coeficientes de transformada. Durante el
análisis de wavelet la energía de una señal y
la entropía se divide entre la imagen de
aproximación y las imágenes de los detalles,
pero tanto la energía total como la entropía
2
L 1
(n)
=
_
w
2
(2)
l 0
La propiedad de conservación de la energía
es conveniente para el diseño de los sistemas
de compresión ya que significa que la
distorsión cuadrática introducida por la
cuantificación de los coeficientes es igual a
la distorsión cuadrática en la señal
reconstruida. Por lo tanto la propiedad de
conservación de la energía simplifica el
diseño del compresor ya que el diseño del
cuantificador puede ser desarrollado
completamente en el dominio de la
transformada.
La transformada wavelet ortogonal tiene
algunos inconvenientes que no la hacen
demasiado ideal para ser usadas en un
sistema de compresión. Uno de los
inconvenientes se puede ver claramente en la
Ecuación (2), donde se el número total de
coeficientes de entrada, N, no tiene porque
ser igual que el número total de coeficientes
de la wavelet, L. En general L es mayor que
N y la transformada wavelet aumenta el
número de coeficientes. Considera una señal
de longitud N (par) y filtros wavelet de
tamaño L (par). Las salidas de los filtros
tienen longitud L+1-N y la salida al hacer el
submuestreo tendrá longitud (L+N)/2. Por lo
tanto, la señal original de longitud N da lugar
a un total de L+N coeficientes wavelets
después de un nivel de transformación. Si
aumentamos el número de niveles de
descomposición el problema se agrava.
En el proceso de imagen hay 256 niveles de
la intensidad (escalas) de gris. 0 es negro y
255 es blanco. Cada nivel es representado
por un número binario 8-bit así que el negro
es 00000000 y el blanco es 11111111. Una
imagen se puede por lo tanto pensar en como
rejilla de los pixeles, donde cada pixel se
puede representar por el valor binario 8-bit
para una escala de gris. La resolución de
una imagen está dada por los pixeles por
pulgada cuadrada (es decir, 500dpi significa
que un pixel es 1/500ava parte de una
pulgada).
Para digitalizar una imagen cuadrada de una
pulgada de 500 dpi requiere 8 x 500 x500 =
2 millones de bits del almacenaje. Usando
esta representación está claro que la
compresión de datos de la imagen es una
gran ventaja si se van muchas imágenes a ser
almacenadas, a ser transmitidas o a ser
procesadas.
_
redundancias en los datos; calculan qué
datos necesitan ser guardados para
reconstruir la imagen original y por lo tanto
que los datos se pueden ' eliminar'. Quitando
los datos redundantes, la imagen se puede
representar en un número más pequeño de
bits, y por lo tanto puede ser comprimida
Pero, Qué es una información redundante?
La reducción de redundancia se dirige a
eliminar la duplicación en la imagen. Según
Saha hay dos diversos tipos de redundancia
relevantes en las imágenes:
(i) Redundancia Espacial: correlación entre
los pixeles vecinos.
(ii) Redundancia espectral: correlación entre
diversos planos del color y las bandas
espectrales.
Donde hay alta correlación, hay también alta
redundancia, así que puede no ser necesario
grabar los datos para cada pixel.
Para llevar a cabo la compresión
realizaremos lo siguientes pasos:
1. Encontramos alguna propiedad de la
imagen: histograma, entropía de la imagen,
funciones de correlación etc., y luego
2. Encontramos una técnica apropiada de la
compresión para una imagen de esas
características.
PROPIEDADES DE LOS DATOS DE LA
IMAGEN
Según [ 6 ] "los algoritmos de compresión
de imagen apuntan a quitar la redundancia
en los datos de una manera que haga posible
la reconstrucción de la misma."
Esto
significa básicamente que los algoritmos de
la compresión de la imagen intentan explotar
Con la finalidad de hacer comparaciones
significativas de diversas técnicas de la
compresión de la imagen es necesario saber
las características de la misma.
Una
característica es la entropía: una imagen
altamente correlacionada tendrá una entropía
baja. Por ejemplo a frecuencias muy bajas,
una imagen altamente correlacionada será
comprimida por muchas diversas técnicas;
es más la característica de la imagen y no el
algoritmo de compresión que da las buenas
tasas de
compresión.
También, un
algoritmo de compresión que es bueno para
algunas imágenes no será necesariamente
bueno para todas las imágenes, sería mejor
si podríamos decir lo que sería dada la mejor
técnica de la compresión al tipo de imagen
que tenemos.
Una forma de calcular la entropía es
sugerida por [ 6 ]; Si una imagen tiene G
niveles de grises y la probabilidad del nivel
de gris k es P(k) la entropía H es:
Tabla 1, se leen los valores obtenidos. Las
imágenes fueron convertidas en matrices
usando la función imread de matlab. Por
ejemplo, para convertir el archivo de la
imagen saturn a una matriz X en matlab
X =double( imread(saturn.tif.));
G 1
H = -  P(k ) log 2( P(k )) (3)
k o
Y la redundancia de la información,r, es:
r = b - He (4)
en donde b es el menor número de bits para
cuantificar la imagen. La redundancia de la
información sólo puede ser evaluada si se
tiene un buen estimado de la entropía de la
imagen, pero usualmente este no es el caso
debido a que muchas veces alguna
información
estadística
no
es
conocida
Un estimado de H puede ser
obtenidoa partir del histograma del nivel de
gris.
Si h(k) es la frecuencia del nivel de gris k en
imagen de dimensiones MxN, entonces un
estimado de P(k) es:
P(k) = h(k) / MN (5)
De esta manera;
G 1
H=
 P(k ) log 2( P(k )) (6) y
k o
Observando la imagen Saturn. podemos ver
que ésta es altamente redundante comparado
a las otras imágenes con r = 3.886, por lo
que energía no se perderá rápidamente
durante la compresión. No obstante los
cocientes de la compresión para las
imágenes no demuestran el mismo patrón,
éste es porque aunque puede haber
redundancia espacial entre los pixeles
vecinos, si el índice binario es más alto
entonces los valores de la intensidad
requeridos para aproximar la imagen será
más alta.
r = b - H (7)
La tasa de comprensión estará dada por
K = b / H (8)
En esta trabajo se seleccionaron un rango de
11 imágenes contenidas en MATLAB. En el
anexo se puede observar el algoritmo
utilizado para calcula la Entropía y en la
ESTRATEGIA
UTILIZADA
CALCULAR EL UMBRAL.
PARA
De lo anteriormente expuesto, se realizó
primeramente un algoritmo en MATLAB,
Anexo 1, que calcula la entropía total de la
Transformada Wavelet y mediante la
ecuación (8).
se calculó el coeficiente de compresión. El
umbral de compresión se calculó mediante la
expresión de matlab:
dead=max(max(abs(tty)))*threshold/100;
El error cuadrático medio MSE se calculó
mediante la expresión de matlab:
Error = (I.^2-cy.^2);
MSE=sum(error(:))/prod(size(I));
(Donde I = Imagen original; cy = es la
Imagen reconstruida)
Tomando como ejemplo la imagen Saturn y
Cameraman, se obtuvo el siguiente
resultado:
imagen
Satur
H
MSE Umbral dead
4.11 2.2048e 1.9446 0.03
40
-005
96
Cameraman 7.00 6.8987e 1.1413
97
-005
Las imágenes
siguientes
resultantes
fueron
0.02
76
las
Ahora bien, como en Matlab la transformada
wavelet de primer nivel está dada por la
siguiente expresión:
[cA1,cH1,cV1,cD1] = dwt2(I,'bior3.7');
donde: cA1, cH1,cV1,cD1 corresponden a la
aproximación, la componente horizontal, la
componente vertical y la componente
diagonal respectivamente, calculamos la
Entropía de cada una de estas subimágenes
para así obter el umbral de compresión para
cada una de ellas. Este algoritmo en matlab
se encuentra en el anexo B y los resultados
son los siguientes:
Imagen
Saturn
H
4.1140
CA1
umbral
dead
3.0054
2.6618
0.0532
CH1
CV1
CD1
Camera
man
1.2660
1.2492
0.7996
7.0097
6.3190
6.4042
6.3190
0.0149
0.0178
0.0149
CA1
CH1
CV1
CD1
3.8651
2.6319
2.6130
2.2375
2.0698
3.0397
3.0617
3.0397
0.0407
0.0205
0.0252
0.0205
Las imágenes
siguientes:
MSE
1.2713
e-005
3.5808
e-005
obtenidas
fueron
las
CONCLUSIONES
La idea general de este proyecto era
investigar cómo las la transformada wavelet
se podrían utilizar para la compresión de la
imagen. Creo que he alcanzado esto. He
ganado una comprensión de cuáles son las
waveles, de porqué se requieren y cómo
pueden ser utilizadas para comprimir
imágenes También he ganado una
comprensión
general
de
cómo
la
descomposición nivela, las wavelets y las
imágenes cambian la división de la energía y
de la entropía entre la aproximación y
subbandas de detalles.
La importancia del valor de umbral en el
nivel de la entropía era algo de lo cual no
tenía un aprecio antes de recoger los
resultados. Para ser más específico entendía
que el umbral (thresholding) tenía un efecto
pero no alcanzaba a realizar el grado a el
cual dicho umbral podría cambiar la
distribución de la entropía conservada y las
tasas de la compresión. Por lo tanto, cuando
la investigación fue realizada su puso más
atención a elegir las wavelets, las imágenes
y los niveles de la descomposición que la
estrategia de umbral (thresholding). Fijese
que al utilizar umbrales locales se diminuyó
el MSE. Usar umbral (thresholding) global
no es incorrecto, él es una solución
perfectamente válida, el problema es que
dicho umbral global enmascaró el efecto
verdadero de los
niveles
de la
descomposición en detalle, en los resultados.
Esto significó que el potencial verdadero de
una wavelet de comprimir una imagen radica
en tomar los niveles de entropía de cada
descomposición
y calcular su tasa de
compresión.
De esta manera la investigación entonces se
movió hacia un umbral ( thresholding) local
que resultó ser mejor que el global porque
cada subbanda de detalle tenía su propio
umbral basado en los coeficientes que
contuvo de la entropía. Esto significó que
era más fácil conservar entropía durante la
compresión.
Podemos decir también que la idea básica
de aplicar la Transformada wavelet se hizo
para dividir la imagen en bandas, lográndose
que los píxeles de una banda estén
relacionados
entre
sí,
pero
descorrelacionados con los de otras bandas.
Una de las ventajas de aplicar métodos
transformados (entre ellos la wavelet), es
que los errores de cuantización producidos
por la misma transformación y por la
codificación de los píxeles se distribuyen
sobre toda la imagen al realizar la
transformada inversa. En particular, la
transformada wavelet presenta otras
ventajas:
 Cada banda posee la información
centrada en un menor número de
coeficientes, por lo que resulta más fácil
de codificar.
 La aplicación de la transformada wavelet
tiene una relación de localización
tiempo-escala que la DCT y la STFT
(STFT: “Short Time Fourier Transform”)
no poseen, lo que permite analizar los
detalles de alta frecuencia sin perder la
información de baja frecuencia.
 Como la transformada es aplicada sobre
toda la imagen, no se presentan los
problemas de distorsión típicos de
aquellos esquemas que dividen en
bloques en el dominio de la imagen y
luego aplican alguna transformación,
como es el caso de JPEG Error! Reference
source not found..
 Las bandas no sólo poseen información
frecuencial sino también espacial, lo que
permite codificar de forma diferente cada
banda y explotar el efecto de
enmascaramiento del ojo humano.
 La información contenida en las bandas
pasaaltos poseen gran cantidad de ceros,
por lo que pueden ser codificadas con
pocos bits o inclusive no ser codificadas
basado en el hecho de que son poco
visibles.
BIBLIOGRAFÍA
Walker, J.S. A Primer on Wavelets and
Their Scientific Applications .
Boca Raton, Fla. : Chapman & Hall/CRC,
1999
Robi Polikar, .The Wavelet Tutorial. .
http://engineering.rowan.edu/~polikar/WAV
ELETS/Wttutorial.html
Aboufadel, Edward. Discovering Wavelets,
by Edward Aboufadel and Steven Schliker.
New
York; Chichester : Wiley, 1999
.
Hubbard, Barbara Burke. The World
According to Wavelets. A.K Peters Ltd,
1995.
[5] Saha, Subhasis. .Image Compression .
from DCT to Wavelets : A Review.
http://www.acm.org/crossroads/xrds63/sahaimgcoding.html
[6] Sonka, M. Hiaual, V. Boyle, R. Image
Processing, Analysis and Machine Vision,
2nd edition.
Brooks/Cole Publishing Company.
Mulcahy, Colm. .Image compression using
the Haar wavelet transform.. Spelman
Science and Math Journal. Found at:
http://www.spelman.edu/~colm/wav.html
Misiti, M. Misiti, Y. Oppenheim, G. Poggi,
J-M. Wavelet Toolbox User.s Guide,
Version 2.1. The Mathworks, Inc. 2000.
.
S. G. Chang, B Yu and M Vetterli.
.Adaptive Wavelet Thresholding for image
Denoising and Compression.. IEEE
Transactions on Image Processing, Vol. 9,
No. 9, September 2000
Anexo 1
(Algoritmo cálculo global de umbral)
%%%%ENTROPÌA%%%%%%%%%%%%%%%%%%%%%%%
close all
clear all
clc
I = imread('cameraman.tif');
I = im2double(I);
subplot(121);
imshow(I)
title('Original Image')
%%%%%%%%%%%%CALCULO DE ENTROPIA%%%%%%%
p=imhist(I);
p=p/sum(p);
p(find(p==0))=1;
logp= log2(p);
H= - sum(p.*logp)
%%%%%%%%%%%%%CALCULO DE UMBRAL%%%%%%%%%
threshold = 8/H %%%%%%%%GENERAL%%%%%%%%%%%%%
[cA1,cH1,cV1,cD1] = dwt2(I,'bior3.7');
ty=[cA1;cH1;cV1;cD1];
tty = ty;
dead=max(max(abs(tty)))*threshold/100
clear tty;
dyA1= cA1;
index=find(abs(dyA1)<=dead);
dyA1(index)=zeros(size(index));
density1= nnz(dyA1);
dyH1= cH1;
index=find(abs(dyH1)<=dead);
dyH1(index)=zeros(size(index));
density2= nnz(dyH1);
dyV1= cV1;
index=find(abs(dyV1)<=dead);
dyV1(index)=zeros(size(index));
density3= nnz(dyV1);
dyD1= cD1;
index=find(abs(dyD1)<=dead);
dyD1(index)=zeros(size(index));
density4= nnz(dyD1);
cy = idwt2(dyA1,dyH1,dyV1,dyD1,'bior3.7');
density = density1+density2+density3+density4;
subplot(122);, imshow(cy)
title('compresion ')
error=(I.^2-cy.^2);
MSE=sum(error(:))/prod(size(I))%%%%%ERROR%%%%%%%%%
Anexo 2
(Algoritmo cálculo local de umbral
close all
clear all
clc
I = imread('cameraman.tif');
I = im2double(I);
subplot(1,2,1);
imshow(I)
title('Original Image')
%%%%%%%%%%%TRANSFORMADA WAVELET%%%%%
[cA1,cH1,cV1,cD1] = dwt2(I,'db1');
cy = idwt2(cA1,cH1,cV1,cD1,'db1');
%%%%%%%%%%%calculo de ENTROPIA%%%%%%%%%%
p=imhist(I);
p=p/sum(p);
p(find(p==0))=1;
logp= log2(p);
H= - sum(p.*logp)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p=imhist(cA1);
p=p/sum(p);
p(find(p==0))=1;
logp= log2(p);
HcA1= - sum(p.*logp)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p=imhist(cH1);
p=p/sum(p);
p(find(p==0))=1;
logp= log2(p);
HcH1= - sum(p.*logp)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p=imhist(cV1);
p=p/sum(p);
p(find(p==0))=1;
logp= log2(p);
HcV1= - sum(p.*logp)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p=imhist(cD1);
p=p/sum(p);
p(find(p==0))=1;
logp= log2(p);
HcD1= - sum(p.*logp)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
thresholdcA1=8/HcA1
dead=max(max(abs(cA1)))*thresholdcA1/100
dyA1= cA1;
index=find(abs(dyA1)<=dead);
dyA1(index)=zeros(size(index));
density1= nnz(dyA1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
thresholdcH1=8/HcH1
dead=max(max(abs(cH1)))*thresholdcH1/100
dyH1= cH1;
index=find(abs(dyH1)<=dead);
dyH1(index)=zeros(size(index));
density2= nnz(dyH1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
thresholdcV1=8/HcV1
dead=max(max(abs(cV1)))*thresholdcV1/100
dyV1= cV1;
index=find(abs(dyV1)<=dead);
dyV1(index)=zeros(size(index));
density3= nnz(dyV1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
thresholdcH1=8/HcH1
dead=max(max(abs(cH1)))*thresholdcH1/100
dyD1= cD1;
index=find(abs(dyD1)<=dead);
dyD1(index)=zeros(size(index));
density4= nnz(dyD1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cy = idwt2(dyA1,dyH1,dyV1,dyD1,'db1');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
density = density1+density2+density3+density4;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(1,2,2);, imshow(cy)
title('compresion')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
error=(I.^2-cy.^2);
MSE=sum(error(:))/prod(size(I))
Descargar