Upload
simon-echavarria
View
18
Download
0
Embed Size (px)
DESCRIPTION
filtrado espacial de una imagen
Citation preview
Filtros espacialesAplicacin del filtro unsharp masking
VecindadesOperaciones sobre vecindades:Son aquellas que se realizan sobre bloques definidos dentro de la imagen, en vez de procesar toda la imagen
Operaciones basadas en vecindadesLas 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 seleccionado4.- 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 basadas en vecindades (II)Ejemplo: Mximo de una vecindad de 3x3Imagen 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
614101043111617206311201510541316622211167342644232
16172020206202020202062020202020620202015105161616744161616744
Operaciones basadas en vecindades (III)Ejemplo: Mnimo de una vecindad de 3x3Imagen 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);
614101043111617206311201510541316622211167342644232
0000000610430062220062220042220000000
Operaciones basadas en vecindades (IV)El problema del contornoImagen de entradaImagen de salida
614101043111617206311201510541316622211167342644232
0000000610430062220062220042220000000
Operaciones basadas en vecindades (V)Solucin: Relleno de pxelesImagen de entradaImagen de salidaFuncin: 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 originalfull: Tamao resultante con relleno (mayor)
Operaciones basadas en vecindades (VI)Relleno de una constantef = 12 3 2 1 -1 -2 -3 -2 -1 1 2 3 2 1 -1 -2 -3 -2 -1 1 2 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 basadas en vecindades (VII)Relleno basado en rplicaf = 12 3 2 1 -1 -2 -3 -2 -1 1 2 3 2 1 -1 -2 -3 -2 -1 1 2 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 basadas en vecindades (VIII)Relleno basado en espejof = 12 3 2 1 -1 -2 -3 -2 -1 1 2 3 2 1 -1 -2 -3 -2 -1 1 2 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 basadas en vecindades (IX)Tamao de la imagen destinof = 12 3 2 1 -1 -2 -3 -2 -1 1 2 3 2 1 -1 -2 -3 -2 -1 1 2 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 espacialesdonde:f(x+s, y+t): Valor de los pxeles del bloque seleccionadow(s, t): Coeficientes que se aplicarn al bloque (mscara)
Siendo la matriz del bloque:m(filas) = 2a + 1n(columnas) = 2b + 1
Concepto: 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)Valores de los pxeles del bloqueValores de los pxeles de los coeficientes (mscara)
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)
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)
Ejemplo:Valor de los pxeles 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9Filtros espaciales (IV) Mscara (o filtro) 8 1 6 3 5 7 4 9 2g(2,4)=1(8)+8(1)+15(6)+7(3)+14(5)+16(7)+13(4)+20(9)+22(2)=585
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 salidaFiltros espaciales (V)
Filtros espaciales (VI)Filtro promedio:Filtro promedio ponderado:Ejemplos de filtros
Filtros espaciales (VII)Forma generalEjemplos de mscaras de filtro promedio ponderado(incluye denominador)
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 (VIII)>> I(1:5,1:5)ans = 6 14 10 10 4 11 16 17 20 6 11 20 15 10 5 13 16 6 2 2 11 16 7 3 4>> I2(1:5,1:5)ans = 5 6 7 6 5 6 8 9 7 5 8 9 10 9 6 7 8 9 8 5 6 6 7 6 4OriginalResultado
Filtros espaciales (IX)Original
Filtros espaciales (X)Original>> imhist(I)>> imhist(I2)
Filtros espaciales (XI)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 filtroFormas de aplicar la mscaraf = 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')ImagenMscara
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 imagen 3.- Inadecuada iluminacin de la escena 4.- Escner de documentos 5.- Sensibilidad inadecuada de las cmaras, etc. Imgenes ruidosas
Escner de una letra con y sin rudoImgenes 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 ruido con filtro promedioIV=imnoise(I,'salt & pepper');>> w=ones(3,3)/9;>> I2=imfilter(I,w);
Filtro LaplacianoEste tipo de filtro se basa en un operador derivativo, por lo que acenta las zonas que tienen gran discontinuidad en la imagen, destacando detalles finos, bordes y discontinuidades
Filtro Laplaciano (II)Si se cumple:Entonces:Si la funcin depende de dos variables
Filtro Laplaciano (III)Funcin dependiente de dos variablesLa derivada de segundo orden con respecto a al variable x:De forma similar, con respecto a y:Finalmente:
Filtro Laplaciano (IV)El Laplaciano queda definido por:La anterior expresin es equivalente a aplicar una mscara definida por:
w = 0 1 0 1 -4 1 0 1 0
% 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)w = 0 1 0 1 -4 1 0 1 0w = 1 1 1 1 -8 1 1 1 1Si se desea considerar las variaciones con respecto a la diagonal+1-4w = -1 -1 -1 -1 8 -1 -1 -1 -1Tambin se utiliza el negado de las anteriores mscarasw = 0 -1 0 -1 4 -1 0 -1 0
Filtros Laplacianos alternativos Se emplea en pocas ocasiones en la prctica
Excesivamente sensible a la presencia de ruido Da lugar a bordes dobles y no permite determinar direcciones
Sumar o restar el Laplaciano de la imagen dependiendodel signo del coeficiente central de la mscara utilizadaCoeficiente central de la mscara negativoCoeficiente central de la mscara positivoSe utiliza para realzar una imagen
Filtros Laplacianos alternativos (II)Resultado de sustraer el Laplaciano (una nica mscara)
Incluye diagonal
Filtro GaussianoLa mscara o filtro que responde a:Siendo la matriz del bloque:m(filas) = 2a + 1n(columnas) = 2b + 1
Filtro Gaussiano (II)Influencia del parmetro
Filtro Gaussiano (III)Mscara a partir de funcin no linealFiltro que se aplica es lineal%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');
0.04780.11630.04780.11630.28290.11630.04780.11630.0478
Laplaciana de la gausiana
Laplaciana de la gausiana (II)>> w=fspecial('log',5,0.4) ans = 0.2475 0.2475 0.2479 0.2475 0.2475 0.2475 0.3545 1.2336 0.3545 0.2475 0.2479 1.2336 -10.31 1.2336 0.2479 0.2475 0.3545 1.2336 0.3545 0.2475 0.2475 0.2475 0.2479 0.2475 0.2475>>surf(w) >>surf(-w)
Laplaciana de la gausiana (III)>> 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.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400 0.0400>> 1/25ans = 0.0400Disco
Ejemplo: Promedio>> w=fspecial('average');
Mscaras 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');
Mscaras 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');
Acentuar transiciones horizontales y verticalesPrewit: Acentuar transiciones horizontales Mscara: w = [ 1 1 1 0 0 0 -1 -1 -1]Sobel: Acentuar transiciones horizontales Mscara: w = [1 2 1 0 0 0 -1 -2 -1]Acentuar transiciones verticales: Transpuesta de la matrizMscaras con fspecial (IV)
Ejemplo: Filtro Prewit>> w=fspecial('prewitt');
Ejemplo: Filtro Sobel>> w=fspecial('sobel');>> hp=transp(w); % Acenta vertical
Filtros no linealesFiltro linealFiltro no lineal
Valor de los pxeles 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9Bloque de pxeles 1 1 1 1 1 1 1 1 1>>B = nlfilter(A, [m n], funcin_nl)Aplicacin Supresin de ruido
Ejemplo de aplicacin de filtro no linealSea: -Sxy La regin de la imagen -(x,y) Centro de la regin- f(x,y) La salida del filtro (escalar)Filtro de Media aritmtica A = imread(imagen.jpg'); fun = @(x) mean(x(:)); B = nlfilter(A,[3 3],fun);A = 1 2 3 4 5 6 7 8 9B = 1.3333 2.3333 1.7778 3.0000 5.0000 3.6667 2.6667 4.3333 3.1111
Ejemplo de Filtro de Media aritmtica Filtros no lineales (II)
Filtro de Media geomtrica Filtro de Media armnica Funcin spfilt: Gonzles, R.; Woods, R.; Eddins, S.: Digital Image Processing Using Matlab. 2004Filtros no lineales (III)
Ejemplo de Filtro de Media geomtrica (I2=spfilt(I, 'gmean', 3, 3);) Filtros no lineales (IV)
Ejemplo de Filtro de Media armnica >> I2=uint8(3*3./imfilter(1./I, ones(3, 3), 'symmetric')) Filtros no lineales (V)
Filtro de Media Contra-armnica Filtro de Punto medio Filtros no lineales (VI)Filtro de mximo (aclara)Filtro de mnimo (oscurece)
Ejemplo de Filtro de Media Contra-armnica (I2=spfilt(I, 'chmean,3, 3);) Filtros 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));Filtros no lineales (VIII)
Filtro MedianaFiltros no lineales (IX)
Valor de los pxeles 17 24 1 8 15 23 5 7 40 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 91.- Se ordenan
1 7 8 13 15 16 20 22 402.- Se selecciona el central
17 24 1 8 15 23 5 7 15 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9Nmero par de pxelesLa media de los dos pxeles centrales
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:MedianaPromedioPunto medioMedia armnica
Frente a ruido: Sal y Pimienta
Filtros usando SimulinkFiltro medianaFijar 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