Medicina, biofsica 1999
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
uniformeLPF3imA=imfilter(imA,maskLPF3); %convolucin de imagen con
la mscara o
kernelsubplot(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 filterW1 , W2, , W9=1/9Wi = 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 uniformeLPF3imA=imfilter(imA,maskLPF3); %convolucin de imagen
con la mscara o
kernelsubplot(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);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
originalMED3imA=medfilt2(imA, [3,3]); %filtra imagen original (sin
ruido agregado) con filtro bidimensional de MEDIANA
(3x3)subplot(3,3,2);subimage(MED3imA);NOIimA=imnoise(imA,'salt
& pepper',0.05); %se agrega ruido SAL Y PIMIENTA con densidad
d=5
porcientosubplot(3,3,3);subimage(NOIimA);maskGAUSS5=fspecial('gaussian',
5, 1.0); %se crea una mscara de 5x5
SIGMA=1.0GAUSS5imA=imfilter(NOIimA,maskGAUSS5);%se filtra imagen
con ruido S&P con FPB Gaussiano masc
5x5subplot(3,3,5);subimage(GAUSS5imA);MED5NOI=medfilt2(NOIimA,
[5,5]); %se filtra imagen con ruido S&P con filtro de MEDIANA
masc 5x5subplot(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 originalMED3imA=medfilt2(imA, [3,3]);
subplot(3,3,2);subimage(MED3imA);NOIimA=imnoise(imA,'salt &
pepper',0.05);
subplot(3,3,3);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)
CODIGO
FPAentrada=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
4) Aplicar el gradiente a una imagen, segn:a) Roberts: kernel
mucho mas chicos, de 2x2, uno tiene direccionalidad de la diagonal
ppal y el otro el de la diagonal inversa.b) Prewittc) 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:
b)Filtro de gradiente PrewittEjemplo codigo matlab
imA=imread('im3A.tif');subplot(1,4,1);subimage(imA); %imagen
originalprewittH=fspecial('prewitt')%se crea kernel prewitt de 3x3
para realzar lineas
HORIZONTALESpreHimA=imfilter(imA,prewittH);subplot(1,4,2);subimage(preHimA);prewittV=prewittH'%se
crea kernel prewitt de 3x3 VERTICAL transponiendo filtro
HORIZONTALpreVimA=imfilter(imA,prewittV);subplot(1,4,3);subimage(preVimA);preimA=preHimA+preVimA;%se
suman ambas imagenes con bordes resaltados
ortogonalmentesubplot(1,4,4);subimage(preimA);
Filtro de gradiente Sobel:
Hacer una comparativa de resultados y explicarlosEn 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
dinamicofigure;subplot(2,2,1);subimage(EXPLINim3D);promt='presione
cualquier tecla para continuar';w =
waitforbuttonpress;subplot(2,2,2);imhist(EXPLINim3D);NOIim3D=imnoise(EXPLINim3D,'gaussian',0,0.001);%agregado
de ruido gaussiano de mu=0
SIGMA=0.001subplot(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
3x3NOILAPim3D=imfilter(NOIim3D,flap);%imagen con ruido GAUSSIANO y
filtrada con filtro
LAPLACIANOfigure;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.5NOIGAUim3D=imfilter(NOIim3D,fgauss);%imagen con ruido
GAUSSIANO y filtrada con filtro GAUSSIANOpromt='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
LAPLACIANOpromt='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.
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.
Al volver a clickear se visualiza la siguiente imagen:
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.
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:
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.