DescripciónJpeg2000 transformada wavelet de 2 niveles-lichtenstein.png | La imagen muestra una transformada wavelet de 2 niveles. Para los filtros de paso bajo y paso alto, he usado lo mismo que el JPEG2000, la transformación con pérdida, por lo que esta es la wavelet que se usa en el formato JPEG2000. En general, es bastante difícil mostrar correctamente una transformada wavelet, debido a los diferentes rangos de las diferentes partes. He hecho las siguientes elecciones. En primer lugar, quería utilizar una imagen con superficies planas, bordes afilados y detalles. La imagen de prueba estándar Lenna se usa comúnmente para este propósito, pero no quería usarla porque no es de dominio público. Eché un vistazo a la gran galería de imágenes destacadas con Commons y elegí Image:Lichtenstein img processing test.png porque tiene muchos detalles en la parte inferior izquierda, mientras que la parte superior derecha casi no tiene detalles debido al cielo. Además, los bordes del castillo son muy nítidos, por lo que se pueden ver claramente en la transformación wavelet. He guardado la imagen original en un archivo llamado lichtenstein.png , para hacerlo más sencillo. Luego he usado el siguiente script de Matlab: borrar todo % de entrada debe ser 512x512img = imread ( 'lichtenstein.png' );img = im2doble ( img );img = rgb2gray ( img );% filtros en JPEG2000Lo_D =[ 0,0267 - 0,0168 - 0,0782 0,2668 0,6029 0,2668 - 0,0782 - 0,0168 0,0267 ]; Hi_D =[ 0,0912 - 0,0575 - 0,5912 1,1150 - 0,5912 - 0,0575 0,0912 ]; %calcular la transformada Wavelet de 2 niveles[ a escala , vertical , horizontal , diagonal ]= dwt2 ( img , Lo_D , Hi_D ); [ escalado2 , vertical2 , horizontal2 , diagonal2 ]= dwt2 ( escalado , Lo_D , Hi_D ); %recortar imágenes (para fines de visualización)scaled2 = imcrop ( scaled2 ,[ 4 4 127 127 ]); horizontal2 = imcrop ( horizontal2 ,[ 4 4 127 127 ]); vertical2 = imcrop ( vertical2 ,[ 4 4 127 127 ]); diagonal2 = imcrop ( diagonal2 ,[ 4 4 127 127 ]); horizontal = imcrop ( horizontal ,[ 4 4 255 255 ]); vertical = imcrop ( vertical ,[ 4 4 255 255 ]); diagonal = imcrop ( diagonal ,[ 4 4 255 255 ]); % aumentar el contraste (para fines de visualización)vertical = imadjust ( abs ( vertical ));horizontal = imadjust ( abs ( horizontal ));diagonal = imadjust ( abs ( diagonal ));vertical2 = imadjust ( abs ( vertical2 ));horizontal2 = imadjust ( abs ( horizontal2 ));diagonal2 = imadjust ( abs ( diagonal2 ));% ponerlos todos juntostransformar = ceros ( 512 , 512 );transformar ( 1 : 128 , 1 : 128 )= escalado2 ;transformar ( 1 : 128 , 129 : 256 )= horizontal2 ;transformar ( 129 : 256 , 1 : 128 )= vertical2 ;transformar ( 129 : 256 , 129 : 256 )= diagonal2 ;transformar ( 1 : 256 , 257 : 512 )= horizontal ;transformar ( 257 : 512 , 1 : 256 )= vertical ;transformar ( 257 : 512 , 257 : 512 )= diagonal ;imwrite ( transformar , 'Jpeg2000_2-level_wavelet_transform-lichtenstein.png' ); Si hubiera colocado todas las transformaciones una al lado de la otra, habría obtenido una imagen más ancha que 512x512, con un comportamiento extraño cerca de los bordes. Para evitar esos problemas, he recortado las transformaciones para que pueda poner fácilmente una junto a la otra para obtener una imagen de 512x512. En general, no es una buena idea descartar información, pero aquí solo quería crear un ejemplo simple y claro. Para mostrar las derivadas, he tomado los valores absolutos (quiero mostrar la magnitud de la derivada), luego he mejorado el contraste para que se vean más claros. |