filtrado espacial de imagenes

20
Bioingeniería, Facultad de ingeniería-Universidad de Mendoza, 2014 Procesamiento de imágenes - Guía de trabajos prácticos 3 Filtrado en el dominio espacial Contenido: Efecto del filtrado en el dominio espacial sobre imágenes digitales. Materiales y métodos: Imágenes suministradas por la cátedra. Software Matlab para la manipulación de imágenes. Computadoras del laboratorio de informática y, opcionalmente, computadoras portátiles de los alumnos. Introducción: En la presente práctica se pretende que el alumno diseñe máscaras de filtrado en el dominio espacial y evalúe el efecto de las operaciones de vecindad, al convolucionar dicha máscara con la imagen a filtrar, tanto con procesamientos lineales como no lineales, construyendo kernels de distinto tamaño 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. ACOMPAÑAR EL INFORME CON TODOS LOS CÓDIGOS MATLAB UTILIZADOS Las prácticas pueden realizarse en grupos de HASTA 2 PERSONAS MÁXIMO. Los participantes debe informarse en el encabezado del informe. Aunque el informe resultante puede ser idéntico a ambos alumnos, CADA UNO DEBERÁ ENVIAR SU COPIA POR CORREO ELECTRÓNICO, por cuestiones de orden y de registro 1) Crear filtros pasabajos(FPB) y un FPB GAUSSIANO con máscaras 3x3, 5x5 y 7x7 y aplicarlos sobre las imagen im3A.tif. Ejemplo codigo matlab imA=imread('im3A.tif'); Squizzato, Fabio.

description

algoritmo en matlab para el filtrado de imagenes

Transcript of filtrado espacial de imagenes

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.