matlab filtros

5
Laboratorio: Introducción al filtro de imágenes con MATLAB. Desarrolle las siguientes instrucciones para el filtro de imágenes usando el MATLAB. Pasos previos: a. Crear la carpeta PATH/DSI_lab_05/ b. Descargar en esta carpeta un conjunto de imágenes proporcionadas por el docente. PARTE I: CONVOLUCIÓN Y CORRELACIÓN 1. Especificar las dos matrices a usar: a = [0 0 0 1 0 0 0]; f = [1 2 3 4 5]; 2. Aplicar convolución usando la matriz a como entrada y la matriz f como el filtro. g = imfilter(a,f,'full','conv') Pregunta 1 ¿Cuál es la relación entre el tamaño de la matriz de salida, el tamaño de la matriz de entrada, y la longitud del filtro? Pregunta 2 ¿Cómo afecta en la salida cambiar el tercer parámetro de ‘full’ a ‘same’? 3. Aplicar correlación en el mismo conjunto de matrices. h = imfilter(a,f,'full', 'corr') Los resultados del último paso confirman que la convolución está relacionada con la correlación por una reflexión de la matriz filtro, lo cuál es independiente del número de dimensiones consideradas. Vamos a ver cómo funciona la correlación en una pequeña ventana de 3 x 3. Consideremos la ventana con los valores extraídos de la imagen de la figura 1. La correlación de las dos matrices es la suma de productos. Numéricamente el cálculo es: (140)(−1) + (108)(0) + (94)(1) + (89)(−2) + (99)(0) + (125)(2) + (121)(−1) + (134)(0) + (221)(1) = 126 Se especifica que la imagen (la región imagen de la figura 1) y la máscara de la figura 2. Nosotros explícitamente determinamos que la función use correlación, ya que podría realizar tanto correlación y convolución. Figura 1. Una región imagen 3 x 3 Figura 2. Una máscara 3 x 3 4. Limpiar todas las variables de trabajo. clear 5. Usar imfilter para realizar una correlación de las dos matrices. x = [140 108 94;89 99 125;121 134 221] y = [-1 0 1;-2 0 2;-1 0 1] z = imfilter(x,y, 'corr') Pregunta 3 ¿En la matriz resultante z, estamos interesados solo en el valor central? ¿Cómo es de cercano al valor calculado anteriormente? Pregunta 4 ¿Cuáles son los otros valores resultantes de la matriz? Pregunta 5 Se observa que en el último paso no se especificó si la salida debería ser ‘full’ o ‘same’ ¿Cuál es la salida por defecto si no se especifica? Para realizar la convolución se usará la misma técnica usada en la correlación. La diferencia es que el filtro es rotado 180, antes de realizar la suma de los productos. Nuevamente el cálculo

Upload: minatox4

Post on 27-Sep-2015

50 views

Category:

Documents


3 download

DESCRIPTION

Filtro de imagenes en matlab

TRANSCRIPT

  • Laboratorio: Introduccin al filtro de imgenes con MATLAB.

    Desarrolle las siguientes instrucciones para el filtro de imgenes usando el MATLAB.

    Pasos previos:

    a. Crear la carpeta PATH/DSI_lab_05/

    b. Descargar en esta carpeta un conjunto de

    imgenes proporcionadas por el docente.

    PARTE I: CONVOLUCIN Y CORRELACIN

    1. Especificar las dos matrices a usar: a = [0 0 0 1 0 0 0]; f = [1 2 3 4 5];

    2. Aplicar convolucin usando la matriz a como

    entrada y la matriz f como el filtro.

    g = imfilter(a,f,'full','conv')

    Pregunta 1 Cul es la relacin entre el tamao de la matriz de salida, el tamao de la matriz de entrada, y la longitud del filtro?

    Pregunta 2 Cmo afecta en la salida cambiar el tercer parmetro de full a same?

    3. Aplicar correlacin en el mismo conjunto de matrices. h = imfilter(a,f,'full', 'corr')

    Los resultados del ltimo paso confirman que la convolucin est relacionada con la correlacin por una reflexin de la matriz filtro, lo cul es independiente del nmero de dimensiones consideradas. Vamos a ver cmo funciona la correlacin en una pequea ventana de 3 x 3. Consideremos la ventana con los valores extrados de la imagen de la figura 1. La correlacin de las dos matrices es la suma de productos. Numricamente el clculo es: (140)(1) + (108)(0) + (94)(1) + (89)(2) + (99)(0) + (125)(2) + (121)(1) + (134)(0) + (221)(1) = 126

    Se especifica que la imagen (la regin imagen de la figura 1) y la mscara de la figura 2. Nosotros explcitamente determinamos que la

    funcin use correlacin, ya que podra realizar tanto correlacin y convolucin.

    Figura 1. Una regin imagen 3 x 3

    Figura 2. Una mscara 3 x 3

    4. Limpiar todas las variables de trabajo. clear

    5. Usar imfilter para realizar una

    correlacin de las dos matrices.

    x = [140 108 94;89 99 125;121 134 221] y = [-1 0 1;-2 0 2;-1 0 1] z = imfilter(x,y, 'corr')

    Pregunta 3 En la matriz resultante z, estamos interesados solo en el valor central? Cmo es de cercano al valor calculado anteriormente?

    Pregunta 4 Cules son los otros valores resultantes de la matriz?

    Pregunta 5 Se observa que en el ltimo paso no se especific si la salida debera ser full o same Cul es la salida por defecto si no se especifica?

    Para realizar la convolucin se usar la misma tcnica usada en la correlacin. La diferencia es que el filtro es rotado 180, antes de realizar la suma de los productos. Nuevamente el clculo

  • de la convolucin de la regin imagen dada y su mscara escomo sigue:

    (140)(1) + (108)(0) + (94)(1) + (89)(2) + (99)(0) + (125)(2) + (121)(1) +(134)(0) + (221)(1) = 126

    6. Usar imfilter para realizar la convolucin de las dos matrices. z2 = imfilter(x,y, 'conv')

    Figura 3.

    Pregunta 6 Cmo es comparada el valor central de la matriz resultante con el clculo realizado anteriormente?

    PARTE II: FILTROS DE SUAVIZADO EN EL

    DOMINIO ESPACIAL

    7. Cargar la imagen chess01 y prepare un subplot.

    I = imread('chess01.jpg'); figure, subplot(1,2,1), imshow(I), ... title('Imagen Original');

    8. Crear un filtro automtico de media (promedio) usando la funcin fspecial. fn = fspecial('average')

    Pregunta 7 Explicar que representa el valor de la variable fn. Pregunta 8 Cules otras mascaras comnmente usadas son generadas por la funcin fspecial?

    9. Filtrar la imagen chess01 con la mscara generada.

    I_new = imfilter(I,fn); subplot(1,2,2),imshow(I_new), ... title('Imagen Filtrada');

    Figura 4. Pregunta 9 Cul es el efecto del filtro promedio? El filtro de media que acabamos de implementar fue un filtro uniforme todos los coeficientes fueron equivalentes. La versin no uniforme del filtro promedio nos da el centro de la mscara (el pixel en cuestin) un valor ponderado mayor, mientras que los otros coeficientes son ponderados por su distancia desde el centro. Esta mscara no puede ser generada por la funcin fspecial, por lo tanto debe ser creada por nosotros. 10. Crear una versin del filtro promedio no uniforme.

    fn2 = [1 2 1; 2 4 2; 1 2 1] fn2 = fn2 * (1/16)

    Recordemos que el filtro de media uniforme se puede crear mediante la generacin de una matriz de 1s de 3 3, y luego multiplicar cada coeficiente por un factor de 1/9. En el filtro de media no uniforme, implantado anteriormente, se observa que la suma de todos los valores originales en el filtro es igual a 16 -esta es la razn por dividimos cada coeficiente por 16 en el segundo paso. La figura 5 ilustra las dos mscaras anteriores que hemos creado.

    Figura 5. Mscaras promedio uniformes y no

    uniformes 3 x 3

  • 11. Filtrar la imagen original con la nueva mascara promedio no uniforme.

    I_new2 = imfilter(I,fn2); figure, subplot(1,2,1), imshow(I_new), ... title('Promedio Uniforme'); subplot(1,2,2), imshow(I_new2), ...

    title('Promedio No Uniforme');

    Figura 6.

    Pregunta 10 Comentar respecto de las diferencias subjetivas entre el filtro promedio uniforme y el filtro promedio no uniforme.

    El filtro de Gauss es similar al filtro de promedio no uniforme en el que los coeficientes no son equivalentes. Los valores de los coeficientes, sin embargo, no son una funcin de su distancia desde el pxel central, pero en su lugar se modelan a partir de la curva de Gauss

    12. Crear un filtro de Gauss y mostrar el kernel como un grfico 3D. fn_gau = fspecial('gaussian',9,1.5); figure, bar3(fn_gau, 'b'), ... title('Filtro de Gauss como un grfico 3D');

    Figura 7.

    13. Filtrar la imagen chess01 usando la mscara de Gauss. I_new3 = imfilter(I,fn_gau); figure, subplot(1,3,1), imshow(I), ... title('Imagen Original');

    subplot(1,3,2), imshow(I_new), ... title('Filtro Promedio'); subplot(1,3,3), imshow(I_new3), ... title('Filtro de Gauss');

    Figura 8. Pregunta 11 Experimente con el tamao del filtro gaussiano y el valor de . Cmo se puede cambiar la cantidad de desenfoque que resulta del filtro? PARTE III: FILTROS PARA ACENTUAR

    CONTRASTE EN EL DOMINIO ESPACIAL

    14. Cargar la imagen chess02 y preparar un grfico.

    I = imread('chess02.jpg'); Id = im2double(I); figure, subplot(2,2,1), imshow(Id), ... title('Imagen Original'); Estamos obligados a convertir la imagen a doubl porque una imagen filtrada de Laplace puede dar lugar a valores negativos. Si tuviramos que mantener la imagen de clase uint8, todos los valores negativos sera truncado y, por lo tanto, no reflejara con precisin los resultados de haber aplicado una mscara de Laplace. Al convertir la imagen a doubl, todos los valores negativos permanecern intactos. 15. Crear un kernel de Laplace y aplicarlo a la imagen usando imfilter.

    f = fspecial('laplacian',0); I_filt = imfilter(Id,f); subplot(2,2,2), imshow(I_filt), ... title('Laplaciano del Original'); Pregunta12 Cundo se especifica el filtro laplaciano en la function fspecial, que significa el segundo parametro (en el caso anterior, 0)? Pregunta13 Cul es el mnimo valor de la imagen filtrada? Como se observara es difcil ver los detalles de la imagen filtrada de Laplace. Para tener una mejor perspectiva del detalle que la mscara de Laplace produce, podemos escalar la imagen para fines de visualizacin de manera

  • que sus valores abarcan el rango dinmico de la escala de grises. 16. Mostrar una versin a escala de la imagen de Laplace para la visualizacin. subplot(2,2,3), imshow(I_filt,[]), ... title('Laplaciano Escalado'); El coeficiente central de la mscara de Laplace que hemos creado es negativo. Recuerde que si el centro de la mscara es negativo, restamos la imagen filtrada de la original, y si es positivo, se aade. En nuestro caso, vamos a restarlos. 17. Restamos la imagen filtrada de la imagen original para crear el acentuado de contraste en la imagen. I_sharp = imsubtract(Id,I_filt); subplot(2,2,4), imshow(I_sharp), ... title('Imagen Contraste Acentuado');

    Figura 9. Una versin compuesta de la mscara de Laplace realiza completamente todas las operaciones en un solo paso. Mediante el uso de esta mscara compuesta, no es necesario aadir o restar el filtrado - la imagen resultante es la imagen con el contraste acentuado. 18. Utilice la mscara compuesta de Laplace para realizar la nitidez de imagen en un solo paso. f2 = [0 -1 0; -1 5 -1; 0 -1 0] I_sharp2 = imfilter(Id,f2); figure, subplot(1,2,1), imshow(Id), ... title('Imagen Original'); subplot(1,2,2),imshow(I_sharp2), ... title('Laplaciano Compuesto');

    Figura 10.

    Mscara de enfoque Es un proceso simple de restar una borrosa imagen de su original para generar una imagen ms ntida. Aunque el concepto es simple, hay tres formas en que puede ser implementado.

    Figura 11. Proceso de mscara de enfoque

    que incluye el ajuste de histograma.

    19. Cargar la imagen mandril y generar la imagen borrosa. Luego convertimos a doubl. J= imread('mandril.tif'); f_blur = fspecial('average',5); J_blur = imfilter(J,f_blur); figure, subplot(1,3,1), imshow(J), ... title('Imagen Original'); subplot(1,3,2), imshow(J_blur), ... title('Imagen Borrosa'); Ahora debemos reducir el histograma de la imagen borrosa. La cantidad por la que reducir el tamao del histograma en ltima instancia, determinar el nivel de mejora en el resultado final. En nuestro caso, vamos a escalar el histograma que oscila entre 0,0 y 0,4, donde toda la gama de escala de grises dinmica es [0,0 1,0]. 20. Reducir el histograma de la imagen borrosa.

    J_blur_adj = imadjust(J_blur, ... stretchlim(J_blur),[0 0.4]); 21. Ahora restar la imagen borrosa de la imagen original. J_sharp = imsubtract(J,J_blur_adj); Ahora tenemos que realizar una extensin del histograma en la nueva imagen con el fin de dar cuenta de la reduccin anterior con la imagen borrosa.

  • 22. Estirar el histograma de la imagen con contraste acentuado a la escala completa de la gama dinmica de grises y mostrar el resultado final. J_sharp_adj = imadjust(J_sharp); subplot(1,3,3), imshow(J_sharp_adj), ... title('Imagen Contraste Acentuado';

    Figura 12. Pregunta14 Como se observa al reducir el histograma de la imagen borrosa, podemos controlar el grado de nitidez en la imagen final, especificando el mximo valor del rango. Qu otro factor puede alterar la cantidad de enfoque? Ahora vamos a observar a la segunda aplicacin de la tcnica de mscara de enfoque.

    Figura 13. Proceso de mscara de enfoque con

    nitidez de imagen. 23. Restar la imagen borrosa de la imagen original para generar una imagen con contraste acentuado. J_sharpening = imsubtract(J,J_blur); 24. Aadir nitidez de imagen a la imagen original para producir el resultado final. J_sharp2 = imadd(J,J_sharpening); figure, subplot(1,2,1), imshow(J), ... title('Imagen Original'); subplot(1,2,2), imshow(J_sharp2), ... title('Imagen Contraste Acentuado');

    Figura 14.

    Pregunta15 Cmo se puede ajustar el grado de nitidez cuando se utiliza esta aplicacin? La tercera aplicacin utiliza una mscara de convolucin, que puede ser generado usando la funcin fspecial.

    Figura 15. Proceso de mscara de enfoque usando

    mscara de convolucin. 25. Generar el enmascaramiento unsharp del kernel utilizando la funcin fspecial. f_unsharp = fspecial('unsharp'); 26. Aplicar la mscara a la imagen original para crear una imagen ms ntida. J_sharp3 = imfilter(J,f_unsharp); figure, subplot(1,2,1), imshow(J), ... title('Imagen Original'); subplot(1,2,2), imshow(J_sharp3), ... title('Imagen Contraste Acentuado');

    Figura 16. Pregunta16 Cmo podemos controlar el nivel de nitidez con esta aplicacin?