72
Filtros espaciales Im agen O riginal R esultado delFiltro Aplicación del filtro unsharp masking

Imagen Filtrado Espacial 1206126718387103 5

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