imagen filtrado espacial

Upload: yeimy-quevedo

Post on 22-Jul-2015

407 views

Category:

Documents


0 download

TRANSCRIPT

Filtros espaciales Imagen Original Resultado del FiltroAplicacin del filtro unsharp masking Vecindades Operaciones sobre vecindades: Son aquellas que se realizan sobre bloques definidosdentro de la imagen, en vez de procesar toda la imagen Operaciones basadasen vecindades Las operaciones se realizan de la siguiente forma: 1.- Se selecciona el pxel a procesar. 2.- Se selecciona el entorno del pxel. 3.- Se aplica una funcin que depende del valor de los pxeles del entorno seleccionado 4.- Se altera el pxel de la imagen de salida equivalente al pxel de la imagen de entrada, por el valor devuelto por la funcin. 5.- Repetir de 1 a 4 por cada pxel de la imagen de entrada. Operaciones basadasen vecindades (II) 614101043 1116172063 1120151054 13166222 11167342 644232 Ejemplo: Mximo de una vecindad de 3x3 Imagen de entrada (I)Imagen de salida (I1) Lo cual se realizara con el siguiente programa Matlab >> f=inline('max(x(:))');% Define funcin mxima >> I1=nlfilter(I,[3, 3],f); % Devuelve mximo 16172020206 20202020206 20202020206 20202015105 161616744 161616744 Operaciones basadasen vecindades (III) 614101043 1116172063 1120151054 13166222 11167342 644232 Ejemplo: Mnimo de una vecindad de 3x3 Imagen de entrada (I)Imagen de salida (I1) Lo cual se realizara con el siguiente programa Matlab >> f=inline('min(x(:))'); >> I1=nlfilter(I,[3, 3],f); 000000 0610430 062220 062220 042220 000000 Operaciones basadasen vecindades (IV) 614101043 1116172063 1120151054 13166222 11167342 644232 El problema del contorno Imagen de entradaImagen de salida 000000 0610430 062220 062220 042220 000000 1 2 3 1 23. . . . . 1 234 5n 1 2 3 m . . . . . . . . . Operaciones basadasen vecindades (V) Solucin: Relleno de pxeles . . . . . 1 234 5n 1 2 3 m . . . . . . . . . . . . . . . . 1 234 5n 1 2 3 m . . . . . . . . . 1 2 3 1 23. . . . . . Imagen de entrada Imagen de salida Funcin: imfilter (La_imagen.jpg, mscara, relleno, salida)Rellenar contorno sin alterar la imagen original: mscara= [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0] same: Mismo tamao imagen original full: Tamao resultante con relleno (mayor) Operaciones basadasen vecindades (VI) Relleno de una constante f = 1 23 2 1 -1-2-3-2-1 12 3 2 1 -1-2-3-2-1 12 3 2 1 >> imfilter(f,w,25,'full') w = [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0] Operaciones basadasen vecindades (VII) Relleno basado en rplica f = 1 23 2 1 -1-2-3-2-1 12 3 2 1 -1-2-3-2-1 12 3 2 1 >> imfilter(f,w,replicate' ,'full') w = [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0] Operaciones basadasen vecindades (VIII) Relleno basado en espejo f = 1 23 2 1 -1-2-3-2-1 12 3 2 1 -1-2-3-2-1 12 3 2 1 >> imfilter(f,w, symmetric ,'full') w = [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0] Operaciones basadasen vecindades (IX) Tamao imagen destino f = 1 23 2 1 -1-2-3-2-1 12 3 2 1 -1-2-3-2-1 12 3 2 1 >> imfilter(f,w,0, full') w = [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0] >> imfilter(f,w,0, same') Responden a la siguiente ecuacin: Filtros espaciales = =+ + =aa sbb tt y s x f t s w y x g ) , ( ) , ( ) , (donde: f(x+s, y+t): Valor de los pxeles del bloque seleccionado w(s, t): Coeficientes que se aplicarn al bloque (mscara) Siendo la matriz del bloque: m(filas) = 2a + 1 n(columnas) = 2b + 1Concepto: Son las operaciones que se realizan directamente sobre los pxeles. Se define una matriz de coeficientes del filtro (o mscara, de tamao mxn) los cuales constituirn pesos ponderados por los que se multiplicarn los valores originales de los pxeles. Filtros espaciales (II) Filtros espaciales (III) f(x-1, y-1)f(x-1, y)f(x-1, y+1) f(x, y-1)f(x, y)f(x, y+1) f(x+1, y-1)f(x+1, y)f(x+1, y+1) Valores de los pxeles del bloque w(-1, -1)w(-1, 0)w(-1, 1) w(0, -1)w(0, 0)w(0, 1) w(1, -1)w(1, 0)w(1, 1) Valores de los pxeles de los coeficientes (mscara) = =+ + =aa sbb tt y s x f t s w y x g ) , ( ) , ( ) , (Ejemplo: Valor de los pxeles 1724 1 8 15 23 5 7 1416 4 6 132022 10121921 3 111825 29 Filtros espaciales (IV) Mscara (o filtro) 8 1 6 3 5 7 4 9 2 g(2,4)=1(8)+8(1)+15(6)+7(3)+14(5)+16(7)+13(4)+20(9)+22(2)=585 = =+ + =aa sbb tt y s x f t s w y x g ) , ( ) , ( ) , (Pasos para la aplicacin del filtro lineal: 1.- Definir la mscara 2.- Definir tipo de relleno 3.- Aplicar la ecuacin:

4.- Definir tamao de la imagen de salida Filtros espaciales (V) = =+ + =aa sbb tt y s x f t s w y x g ) , ( ) , ( ) , (Filtros espaciales (VI) Filtro promedio: Filtro promedio ponderado: Ejemplos de filtros Ejemplo (usando Matlab): % Imagen original >> I=imread('tire.tif'); % Se define una matriz de pesos de valores iguales,% a lo que se le denomina filtro promedio >> w=ones(5,5)/25; % Se aplica el filtro >> I2=imfilter(I,w); Filtros espaciales (VII) >> I(1:5,1:5) ans = 6 14 10 104 11 16 17 206 11 20 15 105 13 1662 2 11 1673 4 >> I2(1:5,1:5) ans = 56765 68975 89 1096 78985 66764 OriginalResultado Filtros espaciales (VIII) Original Filtros espaciales (IX) Original 0 50 100 150 200 2500100200300400500600700800900>> imhist(I) 0 50 100 150 200 2500100200300400500600700800>> imhist(I2) Filtros espaciales (X) Mtodo de correlacin: Se aplica la mscara tal y como se define Mtodo de convolucin: Se rota la mscara 180 grados alrededor del pxel central, antes de aplicar el filtro Formas de aplicar la mscara f = 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 w = 1 2 3 4 5 6 7 8 9 >> imfilter(f,w,'corr')>> imfilter(f,w,'conv') Imagen Mscara Ruido: Es un deterioro de la imagen que puede producirse debido a: 1.- Pxeles perdidos en un sensor CCD 2.- Cuando se comprime o transmite la imagen3.- Inadecuada iluminacin de la escena4.- Escner de documentos5.-Sensibilidad inadecuada de las cmaras, etc.Imgenes ruidosas ) , ( ) , ( ) , ( y x y x f y x g q + =Rudo Escner de una letra con y sin rudo Imgenes ruidosas (II) G = 0 1 1 1 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 1 1 1 0 0 0 1 0 1 1 1 0 G_ruidosa = 0.1337 0.9859 1.0447 1.0773 -0.5392 1.0712 0.0547 0.0860 -0.0817 0.9028 0.6783 0.0299 0.3474 -0.0147 0.1335 1.2666 0.0991 0.3885 -0.2928 0.1002 1.0181 -0.0948 0.0390 0.8881 0.9455 0.8147 0.0208 0.4779 0.1484 1.2493 -0.2367 0.9407 1.0204 1.0842 -0.2981 >>[R,Q] = size(G); >>G_ruidosa= G + randn(R,Q)*0.2 Imgenes ruidosas (III) % Ruido gausiano >> s = 15; % Desviacin estndar >> s = s/255; % Se normaliza a [0,1] >> II = imnoise(road,'gaussian',0,s^2); % media 0, varianza (15^2) Imgenes ruidosas (IV) III=imnoise(I,'poisson'); Imgenes ruidosas (V) IV=imnoise(I,'salt & pepper'); Imgenes ruidosas (VI) V=imnoise(I,'speckle'); Supresin de ruidocon filtro promedio IV=imnoise(I,'salt & pepper'); >> w=ones(3,3)/9; >> I2=imfilter(I,w); Filtro Laplaciano Este tipo de filtro se basa en un operador derivativo, por lo que acenta las zonas que tienen gran discontinuidad en la imagen ) ( ) 1 () (x f x fxx f + =ccFiltro Laplaciano (II) Si se cumple: ) ( ) 1 () (x f x fxx f + =ccEntonces: ) ( 2 ) 1 ( ) 1 () (22x f x f x fxx f + + =cc22222) , ( ) , () , (yy x fxy x fy x fcc+cc= VSi la funcin depende de dos variables Filtro Laplaciano (III) 22222) , ( ) , () , (yy x fxy x fy x fcc+cc= VFuncin dependiente de dos variables La derivada de segundo orden con respecto a al variable x: ) , ( 2 ) , 1 ( ) , 1 () , (22y x f y x f y x fxy x f + + =ccDe forma similar, con respecto a y: ) , ( 2 ) 1 , ( ) 1 , () , (22y x f y x f y x fyy x f + + =cc) , ( 2 ) 1 , ( ) 1 , ( ) , ( 2 ) , 1 ( ) , 1 ( ) , (2y x f y x f y x f y x f y x f y x f y x f + + + + + = VFinalmente: Filtro Laplaciano (IV) El Laplaciano queda definido por: ) , ( 4 ) 1 , ( ) 1 , ( ) , 1 ( ) , 1 ( ) , (2y x f y x f y x f y x f y x f y x f + + + + + = VLa anterior expresin es equivalente a aplicar unamscara definida por: w = 0 1 0 1-4 1 0 1 0 = =+ + =aa sbb tt y s x f t s w y x g ) , ( ) , ( ) , (% Imagen original >> I=imread('moon.tif' ); % Se define una matriz de pesos>> w=[0, 1, 0; 1, -4, 1; 0, 1, 0]; % Se aplica el filtro >> I2=imfilter(I,w); Filtro Laplaciano (V) Alternativa: >> I=imread('moon.tif'); >> w=fspecial('laplacian',0); >> I2=imfilter(I,w,'replicate'); Filtro Laplaciano (VI) Imgenes: www.imageprecessingplace.com Filtro Laplaciano (VII) ) , ( 4 ) 1 , ( ) 1 , ( ) , 1 ( ) , 1 ( ) , (2y x f y x f y x f y x f y x f y x f + + + + + = Vw = 0 1 0 1-4 1 0 1 0 w = 1 1 1 1-8 1 1 1 1 Si se desea considerar las variaciones con respecto a la diagonal +1 -4 w = -1 -1 -1 -18 -1 -1 -1 -1 Tambin se utiliza el negado de las anteriores mscaras w = 0-10 -1 40 0-10 Filtros Laplacianos alternativosSe emplea en pocas ocasiones en la prctica Excesivamente sensible a la presencia de ruidoDa lugar a bordes dobles y no permite determinar direcciones Sumar o restar el Laplaciano de la imagen dependiendo del signo del coeficiente central de la mscara utilizada Coeficiente central de la mscara negativo Coeficiente central de la mscara positivo Se utiliza para realzar una imagenFiltros Laplacianos alternativos (II) Resultado de sustraer el Laplaciano (una nica mscara)

Incluyediagonal Filtro Gaussiano La mscara o filtro que responde a: = =+ + =aa sbb st sy xeey x w2 2 22 2 24 / ) (4 / ) () , (oo Siendo la matriz del bloque: m(filas) = 2a + 1 n(columnas) = 2b + 1 Filtro Gaussiano (II) Influencia del parmetro o Filtro Gaussiano (III) Mscara a partir de funcin no lineal Filtro que se aplica es lineal = =+ + =aa sbb tt y s x f t s w y x g ) , ( ) , ( ) , (0.04780.11630.0478 0.11630.28290.1163 0.04780.11630.0478 -3 -2 -1 0 1 2 300.050.10.150.20.25%Define mscara >> fspecial('gaussian',3,0.5) ans = 0.0113 0.0838 0.0113 0.0838 0.6193 0.0838 0.0113 0.0838 0.0113 % Mscara y filtro >> w=fspecial(gaussian',3,0.5); >> I2=imfilter(I,w,'replicate'); Laplaciana de la gausiana Laplaciana de la gausiana (II) >> w=fspecial('log',5,0.4) ans = 0.24750.24750.24790.24750.2475 0.24750.35451.23360.35450.2475 0.24791.2336 -10.31 1.23360.2479 0.24750.35451.23360.35450.2475 0.24750.24750.24790.24750.2475 >>surf(w)>>surf(-w) 1234512345-15-10-505st1234512345-5051015stLaplaciana de la gausiana (III) 1234512345-15-10-505st>> w=fspecial('log',5,0.4) >> [x, y]=meshgrid(-2:1:2) >> [xi, yi]=meshgrid(-2:.05:2); >> zi = interp2(x,y,z,xi,yi); >> surf(xi,yi,zi) Mejorando detalles del tipo de filtros Mscaras con fspecial >> w = fspecial('disk',4) Promedio >> w = fspecial('average',5) w = 0.04000.04000.04000.04000.0400 0.04000.04000.04000.04000.0400 0.04000.04000.04000.04000.0400 0.04000.04000.04000.04000.0400 0.04000.04000.04000.04000.0400 >> 1/25 ans = 0.0400 Disco Ejemplo: Promedio >> w=fspecial('average'); Imagen Original Resultado del FiltroMscaras con fspecial (II) >> z = fspecial('log',5,0.7) Gausiana >>z = fspecial('gaussian',5,0.7) Laplaciana de la gausiana Ejemplo: Filtro Gaussiano >> w=fspecial('gaussian'); Imagen OriginalResultado del FiltroMscaras con fspecial (III) >> z = fspecial('unsharp',0.3) Laplaciana >>z = z = fspecial('laplacian',0.3) Mejora de contraste >> fspecial('laplacian',0) 0 1 0 1-4 1 0 1 0 >> fspecial('unsharp',0) 0-1 0 -1 5-1 0-1 0 Filtro para acentuar contraste>> w=fspecial('unsharp');Imagen OriginalResultado del FiltroAcentuar transiciones horizontales y verticales Prewit: Acentuar transiciones horizontalesMscara:w = [ 1 1 1 0 0 0 -1-1-1] Sobel: Acentuar transiciones horizontalesMscara:w = [1 2 1 0 0 0 -1-2-1] Acentuar transiciones verticales: Transpuesta de la matriz Mscaras con fspecial (IV) Ejemplo: Filtro Prewit >> w=fspecial('prewitt'); Imagen OriginalResultado del FiltroEjemplo: Filtro Sobel >> w=fspecial('sobel'); >> hp=transp(w); % Acenta vertical Imagen Original Resultado del FiltroFiltros no lineales = =+ + =aa sbb tt y s x f t s w y x g ) , ( ) , ( ) , (Filtro lineal Filtro no lineal Valor de los pxeles 1724 1 8 15 23 5 7 1416 4 6 132022 10121921 3 111825 29 Bloque de pxeles 1 1 1 1 1 1 1 1 1 >>B = nlfilter(A, [m n], funcin_nl) Aplicacin Supresin de rudo Ejemplo de aplicacinde filtro no lineal Sea: -Sxy La regin de la imagen -(x,y) Centro de la regin - f(x,y) La salida del filtro (escalar) Filtro de Media aritmticae=xyS t st s gmny x f) , () , (1) , (A = imread(imagen.jpg'); fun = @(x) mean(x(:)); B = nlfilter(A,[3 3],fun); A = 1 2 3 4 5 6 7 8 9 B = 1.33332.33331.7778 3.00005.00003.6667 2.66674.33333.1111 Ejemplo de Filtro de Media aritmticaImagen originalMedia aritmticaFiltros no lineales (II) Filtro de Media geomtricamnS t sxyt s g y x f1) , () , ( ) , ((((

=[eFiltro de Media armnicae=xyS t st s gmny x f) , () , (1) , (Funcin spfilt:Gonzles, R.; Woods, R.; Eddins, S.: Digital Image Processing Using Matlab. 2004 Filtros no lineales (III) Ejemplo de Filtro de Media geomtrica(I2=spfilt(I, 'gmean', 3, 3);)Media geomtrica Imagen originalFiltros no lineales (IV) Ejemplo de Filtro de Media armnica>> I2=uint8(3*3./imfilter(1./I, ones(3, 3), 'symmetric')) Media harmnicoImagen originalFiltros no lineales (V) Filtro de Media Contra-armnicaFiltro de Punto medioee+=xyxyS t sQS t sQt s gt s gy x f) , () , (1) , () , () , (| | )} , ( min{ )} , ( max{21) , (t s g t s g y x f + =Filtros no lineales (VI) Ejemplo de Filtro de Media Contra-armnica(I2=spfilt(I, 'chmean,3, 3);)Imagen original Media contraharmnicoFiltros no lineales (VII) Ejemplo de Filtro de Punto medio>> d1=ordfilt2(I, 1, ones(3, 3), 'symmetric'); % Mnimo >> d2=ordfilt2(I, 3*3, ones(3, 3), 'symmetric'); % Mximo >> I1=uint8(1/2*(d2+d1)); Imagen original Punto medioFiltros no lineales (VIII) Cul filtro utilizar? >>I=imread('contornos.tif');% Se determinan los bordes verticales >> II=edge(I, 'sobel', 'vertical'); imshow(II) Verificar como se difuminan los bordes despus de aplicar el filtro Cul filtro utilizar? (II) % Se aplica ruido a la imagen >> III=imnoise(I,'salt & pepper',0.005); % Se aplica el filtro mediana y se detectan bordes verticales >> IV=medfilt2(III); >> V=edge(IV, 'sobel', 'vertical'); imshow(V) Cul filtro utilizar? (III) % Se aplica el filtro promedio y se detectan bordes verticales >>w=fspecial('average'); >>VI=uint8(imfilter(III, w, 'symmetric')); >> VII=edge(VI, 'sobel', 'vertical'); imshow(VII) % Se aplica el filtro media armnica y se detectan bordes verticales >> VIII=uint8(3*3./imfilter(1./III, ones(3, 3), 'symmetric')); >>IX=edge(VIII, 'sobel', 'vertical'); imshow(IX) Resultado % Se aplica el filtro punto medio%y se detectan bordes verticales >> d1=ordfilt2(III, 1, ones(3, 3), 'symmetric'); >> d2=ordfilt2(III, 3*3, ones(3, 3), 'symmetric'); >> X=uint8(1/2*(d2+d1)); >>XI=edge(X, 'sobel', 'vertical'); imshow(XI) Calidad por siguiente orden: Mediana Promedio Punto medio Media armnica Frente a ruido:Sal y Pimienta Filtros usando Simulink Filtro promedio Fijar parmetros de simulacin Filtros usando Simulink (II) Filtros usando Simulink (III) Se define fspecial Filtros usando Simulink (IV) Filtros usando Simulink (V) Video de una cmara conectada archivo.avi: Ver vipedge, sustituir por 2-D FIR Filter