Sei sulla pagina 1di 5

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.

funcin use correlacin, ya que podra realizar


tanto correlacin y convolucin.

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];

Figura 1. Una regin imagen 3 x 3

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?

Figura 2. Una mscara 3 x 3

Pregunta 2 Cmo afecta en la salida cambiar


el tercer parmetro de full a same?

4. Limpiar todas las variables de trabajo.


clear

3. Aplicar correlacin en el mismo conjunto de


matrices.

5. Usar
imfilter
para
realizar
correlacin de las dos 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

una

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

9. Filtrar la imagen chess01 con la mscara


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

6. Usar imfilter para realizar la convolucin de


las dos matrices.
z2 = imfilter(x,y, 'conv')

Figura 4.

Pregunta 9 Cul es el efecto del filtro


promedio?

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.

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.

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?

Figura 5. Mscaras promedio uniformes y no


uniformes 3 x 3

11. Filtrar la imagen original con la nueva


mascara promedio no uniforme.

subplot(1,3,2), imshow(I_new), ...


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

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 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?
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');

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

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

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.

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.

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

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';

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

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 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);
Figura 16.

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.

Pregunta16 Cmo podemos controlar el nivel


de nitidez con esta aplicacin?