Вы находитесь на странице: 1из 18

Bioingeniera, Facultad de ingeniera-Universidad de Mendoza, 2014

Procesamiento de imgenes - Gua de trabajos prcticos 3

Filtrado en el dominio espacial


Contenido:
Efecto del filtrado en el dominio espacial sobre imgenes digitales.
Materiales y mtodos:
Imgenes suministradas por la ctedra. Software Matlab para la manipulacin de imgenes.
Computadoras del laboratorio de informtica y, opcionalmente, computadoras porttiles de los
alumnos.
Introduccin:
En la presente prctica se pretende que el alumno disee mscaras de filtrado en el dominio
espacial y evale el efecto de las operaciones de vecindad, al convolucionar dicha mscara con
la imagen a filtrar, tanto con procesamientos lineales como no lineales, construyendo kernels de
distinto tamao y calculando coeficientes para componer filtros pasabajos, pasabanda, pasaaltos,
de mediana, resaltadores de bordes, etc. Contemplando y aplicando conceptos de los efectos de
borde y condiciones de periodicidad sobre la matriz de imagen.

ACOMPAAR EL INFORME CON TODOS LOS CDIGOS MATLAB


UTILIZADOS
Las prcticas pueden realizarse en grupos de HASTA 2 PERSONAS
MXIMO. Los participantes debe informarse en el encabezado del
informe. Aunque el informe resultante puede ser idntico a ambos
alumnos, CADA UNO DEBER ENVIAR SU COPIA POR CORREO
ELECTRNICO, por cuestiones de orden y de registro
1) Crear filtros pasabajos(FPB) y un FPB GAUSSIANO con mscaras 3x3, 5x5 y 7x7 y
aplicarlos sobre las imagen im3A.tif.
Ejemplo codigo matlab
imA=imread('im3A.tif');
subplot(3,3,2);
subimage(imA);
maskLPF3=ones(3,3)./9
%mscara de filtro uniforme de 3x3 y sumatoria de Ws normalizados a 1
sum(sum(maskLPF3))
%se corrobora la normalizacin Ws del FPB uniforme
LPF3imA=imfilter(imA,maskLPF3);
%convolucin de imagen con la mscara o kernel
subplot(3,3,4);
subimage(LPF3imA);
maskGAUSS3=fspecial('gaussian', [3 3], 0.5)
%se crea una mscara de 3x3 con distribucin gaussiana, SIGMA=0.5
sum(sum(maskGAUSS3))
GAUSS3imA=imfilter(imA,maskGAUSS3);
subplot(3,3,7);
subimage(GAUSS3imA);
En la practica Box Filter: cuadrado, promediado y todos los W con el mismo valor.
Suponemos un kernel de 3x3, bajo estas condiciones es un box filter

Squizzato, Fabio.

W1 , W2, , W9=1/9
Wi = 1 (que sume 1 significa que es un filtro promediado)

Debemos ahora rellenar el cdigo, nos queda:


CODIGO:

imA=imread('im3A.tif');
subplot(3,3,2);
subimage(imA);
maskLPF3=ones(3,3)/9
%mscara de filtro uniforme de 3x3 y sumatoria de Ws normalizados a 1
maskLPF15=ones(15,15)/ (15*15)
LPF15=imfilter(imA,maskLPF15);
subplot(3,3,3);
subimage(LPF15);
%filtro box de 15
sum(sum(maskLPF3))
%se corrobora la normalizacin Ws del FPB uniforme
LPF3imA=imfilter(imA,maskLPF3);
%convolucin de imagen con la mscara o kernel
subplot(3,3,4);
subimage(LPF3imA);
maskGAUSS3=fspecial('gaussian', [3 3], 0.5)
%se crea una mscara de 3x3 con distribucin gaussiana, SIGMA=0.5
sum(sum(maskGAUSS3))
GAUSS3imA=imfilter(imA,maskGAUSS3);
subplot(3,3,7);
subimage(GAUSS3imA);
maskGAUSS4=fspecial('gaussian',[5 5], 1)
sum(sum(maskGAUSS4))
GAUSS4imA=imfilter(imA,maskGAUSS4);
subplot(3,3,8);
Squizzato, Fabio.

subimage(GAUSS4imA);
%GAUSSIANO DE 5X5
maskGAUSS5=fspecial('gaussian',[7 7], 1.5)
sum(sum(maskGAUSS5))
GAUSS5imA=imfilter(imA,maskGAUSS5);
subplot(3,3,9);
subimage(GAUSS5imA);
%GAUSSIANO DE 7X7
maskGAUSS6=fspecial('gaussian',[15 15], 2.75)
sum(sum(maskGAUSS6))
GAUSS6imA=imfilter(imA,maskGAUSS5);
subplot(3,3,1);
subimage(GAUSS6imA);
%GAUSSIANO DE 15X15

Debe haber coherencia entre el kernel y el sigma, sino el filtro no ser tipo caja.
Usando filtros de 15, mientras mas suaviza preserva mejor los bordes.
Subiendo el sigma, cada vez se parecen mas (deja de tener en cuenta coeficientes
pesados). Estas son funciones analticas.

2) Idem con un filtro MEDIANO. Comparar resultados con FPB Gaussiano


Ejemplo codigo matlab
imA=imread('im3A.tif');
subplot(3,3,1);
subimage(imA);
%imagen original
MED3imA=medfilt2(imA, [3,3]);
%filtra imagen original (sin ruido agregado) con filtro bidimensional de MEDIANA (3x3)
subplot(3,3,2);

Squizzato, Fabio.

subimage(MED3imA);
NOIimA=imnoise(imA,'salt & pepper',0.05);
%se agrega ruido SAL Y PIMIENTA con densidad d=5 porciento
subplot(3,3,3);
subimage(NOIimA);
maskGAUSS5=fspecial('gaussian', 5, 1.0);
%se crea una mscara de 5x5 SIGMA=1.0
GAUSS5imA=imfilter(NOIimA,maskGAUSS5);
%se filtra imagen con ruido S&P con FPB Gaussiano masc 5x5
subplot(3,3,5);
subimage(GAUSS5imA);
MED5NOI=medfilt2(NOIimA, [5,5]);
%se filtra imagen con ruido S&P con filtro de MEDIANA masc 5x5
subplot(3,3,8);
subimage(MED5NOI);

Este tipo de filtro se diferencia ya que nicamente toma el valor del centro del kernel, diferente
al gaussiano que hace promedios.
Se usa cuando hay un ruido por ejemplo de ruido multiplicativo (sal y pimienta: ingresa valores
extremos que agregan fuera de contexto), estos valores ya ordenados, les saco el promedio y se
me va el promedio (ej: 3,4,5,8,500;el 500 es ruido que afecta al promedio).

Puede verse en la imagen que con el filtro gaussiano (aunque tiene mejores propiedades)
tenemos mayor prdida de informacin en los bordes, no as con el filtro de mediana.
CODIGO:
imA=imread('im3A.tif');
subplot(3,3,1);
subimage(imA);
%imagen original
MED3imA=medfilt2(imA, [3,3]);
subplot(3,3,2);
subimage(MED3imA);
NOIimA=imnoise(imA,'salt & pepper',0.05);
subplot(3,3,3);
Squizzato, Fabio.

subimage(NOIimA);
maskGAUSS5=fspecial('gaussian', 5, 1.0);
GAUSS5imA=imfilter(NOIimA,maskGAUSS5);
subplot(3,3,8);
subimage(GAUSS5imA);
MED5NOI=medfilt2(NOIimA, [5,5]);
subplot(3,3,5);
subimage(MED5NOI);
MED3imAnoise=medfilt2(NOIimA, [3,3]);
subplot(3,3,4);
subimage(MED3imAnoise);
title('3x3 filtro de mediana');
MED7imAnoise=medfilt2(NOIimA, [7,7]);
subplot(3,3,6);
subimage(MED7imAnoise);
title('7x7 filtro de mediana');
maskGAUSS7noise=fspecial('gaussian', 7, 1.5);
GAUSS7imA=imfilter(NOIimA,maskGAUSS7noise);
subplot(3,3,9);
subimage(GAUSS5imA);
title('7x7 filtro gaussiano');
maskGAUSS3noise=fspecial('gaussian', 3, 0.5);
GAUSS3imA=imfilter(NOIimA,maskGAUSS3noise);
subplot(3,3,7);
subimage(GAUSS5imA);
title('3x3 filtro gaussiano');

En imgenes sin ruido sal y pimienta, los cambios que produce el filtro son minimos.
3) Crear un filtro pasaaltos (FPA) y tambin un filtro pasabandas, probar con distintas
frecuencias de corte (Wc)
Squizzato, Fabio.

CODIGO FPA
entrada=imread('Im3A.tif');
subplot(1,2,1)
subimage(entrada)
kernell=[0 -2 0 ; -2 8 -2 ; 0 -2 0];
fpaimA=imfilter(entrada,kernell);
subplot(1,2,2);
subimage(fpaimA);
title('3x3 fpa');

Se ve que el FPA resalta los bordes, pero amplifica tambin el ruido y esto es algo no
deseado. El FPA es un filtro con garata direccional.
FILTRO PASA BANDA
En el FPB la frecuencia se determina con el tamao del kernel y por el parmetro sigma elegido.
CODIGO

Squizzato, Fabio.

4) Aplicar el gradiente a una imagen, segn:


Squizzato, Fabio.

a) Roberts: kernel mucho mas chicos, de 2x2, uno tiene direccionalidad de la diagonal ppal
y el otro el de la diagonal inversa.
b) Prewitt
c) Sobel: nfasis en la lnea central.
Estos son filtros de gradiente (el cual es la direccin de mayor variacin).
a)filtro de gradiente Roberts.
Cdigo:

Squizzato, Fabio.

b)Filtro de gradiente Prewitt


Ejemplo codigo matlab
imA=imread('im3A.tif');
subplot(1,4,1);
subimage(imA);
%imagen original
prewittH=fspecial('prewitt')
%se crea kernel prewitt de 3x3 para realzar lineas HORIZONTALES
preHimA=imfilter(imA,prewittH);
subplot(1,4,2);
subimage(preHimA);
prewittV=prewittH'
%se crea kernel prewitt de 3x3 VERTICAL transponiendo filtro HORIZONTAL
preVimA=imfilter(imA,prewittV);
subplot(1,4,3);
subimage(preVimA);
preimA=preHimA+preVimA;
%se suman ambas imagenes con bordes resaltados ortogonalmente
subplot(1,4,4);
subimage(preimA);

Squizzato, Fabio.

Filtro de gradiente Sobel:

Squizzato, Fabio.

Hacer una comparativa de resultados y explicarlos


En los tres casos se realiza un realce de los bordes que componen las figuras. Sin dudas el que
menor realce produce es el filtro de Roberts, debido a que trabaja con una matriz de 2x2. En el
caso de Prewitt y Sobel se observa un realce mayor al utilizar matrices de 3x3. El operador de
Sobel tiene la ventaja de proporcionar un suavizado adems del efecto de derivacin. Ya que la
derivacin acenta el ruido, el efecto de suavizado es particularmente interesante, puesto que
elimina parte del ruido. El requisito bsico de un operador de derivacin es que la suma de los
coeficientes de la mscara sea 0.
5) Hacer las siguientes operaciones:
a. Agregar ruido gaussiano a im3D
b. Aplicarle un filtro Laplaciano a la imagen con ruido Gaussiano obtenida en a)
c. Aplicar un filtro gaussiano a la imagen con ruido Gaussiano obtenida en a) y
luego recin aplicar el filtro laplaciano

Ejemplo codigo matlab


im3D=imread('im3D.tif');
figure;subplot(1,2,1);subimage(im3D);
promt='presione cualquier tecla para continuar';
w = waitforbuttonpress;
subplot(1,2,2);imhist(im3D);
figure;imshow(im3D);
promt='presione cualquier tecla para continuar';
w = waitforbuttonpress;
imcontrast;
prompt='Ingrese el nivel de gris de entrada minimo:';
minentr=(input(prompt)/2^16)
prompt='Ingrese el nivel de gris de entrada MAXIMO:';
maxentr=(input(prompt)/2^16)
EXPLINim3D=imadjust(im3D,[minentr;maxentr],[0.0;1.0]);
%expansion lineal del rango dinamico
figure;subplot(2,2,1);subimage(EXPLINim3D);
promt='presione cualquier tecla para continuar';
w = waitforbuttonpress;
subplot(2,2,2);imhist(EXPLINim3D);

Squizzato, Fabio.

NOIim3D=imnoise(EXPLINim3D,'gaussian',0,0.001);
%agregado de ruido gaussiano de mu=0 SIGMA=0.001
subplot(2,2,3);subimage(NOIim3D);
promt='presione cualquier tecla para continuar';
w = waitforbuttonpress;
subplot(2,2,4);imhist(NOIim3D);
promt='presione cualquier tecla para continuar';
w = waitforbuttonpress;
flap=fspecial('laplacian')
%kernel laplaciano de 3x3
NOILAPim3D=imfilter(NOIim3D,flap);
%imagen con ruido GAUSSIANO y filtrada con filtro LAPLACIANO
figure;subplot(2,2,1);subimage(NOIim3D);
promt='presione cualquier tecla para continuar';
w = waitforbuttonpress;
subplot(2,2,2);subimage(NOILAPim3D);
fgauss=fspecial('gaussian',7,1.5)
%kernel gaussiano de 7x7 SIGMA=1.5
NOIGAUim3D=imfilter(NOIim3D,fgauss);
%imagen con ruido GAUSSIANO y filtrada con filtro GAUSSIANO
promt='presione cualquier tecla para continuar';
w = waitforbuttonpress;
subplot(2,2,3);subimage(NOIGAUim3D);
GAUSLAPim3D=imfilter(NOIGAUim3D,flap);
%imagen con ruido GAUSSIANO y filtrada con filtro GAUSSIANO y luego LAPLACIANO
promt='presione cualquier tecla para continuar';
w = waitforbuttonpress;
subplot(2,2,4);subimage(GAUSLAPim3D);
promt='presione cualquier tecla para continuar';
w = waitforbuttonpress;
figure;imshow(GAUSLAPim3D);
imcontrast;
prompt='Ingrese el nivel de gris de entrada minimo:';
minentr=(input(prompt)/2^16)
prompt='Ingrese el nivel de gris de entrada MAXIMO:';
maxentr=(input(prompt)/2^16)
EXPLINgauslap=imadjust(GAUSLAPim3D,[minentr;maxentr],[0.0;1.0]);
figure;imshow(EXPLINgauslap);

La primer figura muestra la imagen original cargada con su correspondiente histograma. Se ve


alta concentracin en los bajos niveles en el histograma, y en la imagen se ve prcticamente
todo negro, sin poder distinguir alguna forma.
Squizzato, Fabio.

Luego se grafica la sig. Imagen, donde an no se alcanza a distinguir forma alguna. Sin
embargo, luego se aplica imcontrast. Este comando nos permite ajustar el centro y la ventana
de la imagen. Haciendo modificaciones, podemos empezar a visualizar disitintos niveles de
grises.

Squizzato, Fabio.

Al volver a clickear se visualiza la siguiente imagen:

Squizzato, Fabio.

Mediante el comando imadjust, realizamos una expansin lineal del rango dinmico. De esta
forma, llevamos la salida a 65536 niveles de grises, ante los 3071 que tenamos en la entrada.
Esto se observa en la primer fila de esta imagen.
En la segunda fila, observamos la imagen de arriba con ruido gaussiano, y su correspondiente
histograma.

Squizzato, Fabio.

Explicando bien en detalle se ve :


La imagen [1,1] es la correspondiente a la imagen original con ruido gaussiano.
La imagen [1,2] corresponde a la imagen con ruido aplicndole un filtro
Laplaciano. Se puede ver que el ruido se ve amplificado.
La imagen [2,1] corresponde a la imagen original con ruido gaussiando
aplcandole un filtro gaussiano. Esta imagen se ve mucho ms suavizada.
La imagen [2,2] corresponde a la imagen original con ruido gaussiano
aplicndole conjuntamente un filtro gaussiano y un filtro laplaciano.
Al volver a clickear obtenemos las siguientes imgenes:

Squizzato, Fabio.

Squizzato, Fabio.

La primer imgen corresponde con la imagen original con ruido gaussiano y con un filtro
laplaciano y uno gaussiano.
La segunda corresponde al imcontrast.
Luego le realizamos un imadjust para encontrar los valores correspondientes, pudiendo
visualizar con ms detalle a la imagen original.
Datos: im3A.tif y im3B.tif: 181x217x1, 8 bits
Im3D.tiff: 598x442x1, 16 bits LE

Squizzato, Fabio.

Вам также может понравиться