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))