Está en la página 1de 7

Laboratorio Nº1: REDUCCION DE RUIDO Y DETECTOR DE BORDES 1

informe Nº1
REDUCCION DE RUIDO Y DETECTOR DE
BORDES
Edgar Forero Vargas
20161145609


imagen2 = convol1(imagen,mascara);
Resumen—En el presente trabajo se realiza multiples t1 = toc;
ejercicios aplicando filtros de reducción de ruido y detectores de
bordes mediante el software online Matlab, además, se realiza la
comparación de retardos en la ejecución de un código aplicando
tic
la ecuación general de la convolucion para el procesamiento de
imágenes y el comando suministrado por el software antes imagen3 = convol2(imagen,mascara);
mencionado. t2 = toc;

Palabras claves— detectores de bordes, reducción de ruido.


tic
imagen4 = convol3(imagen,mascara);
I. DESARROLLO PRÁCTICO t3 = toc;
Para este laboratorio costa de 5 puntos, siendo:
1. Desarrollar una función que realice la función de
convolución, Comparar el tiempo de ejecución de tic
estas funciones con la función incorporada de imagen5 = imfilter(imagen,mascara);
Matlab imfilter. Determinar cuál es más rápida. t4=toc;
Usar una máscara de 3x3 de media. Usar la
imagen test.tif.
figure(1)

subplot(2,2,1)
imshow(uint8(imagen));
title(sprintf('original'))
subplot(2,2,2)
imshow(uint8(imagen2));
title(sprintf('convolucion 1'))
subplot(2,2,3)
imshow(uint8(imagen3));
title(sprintf('convolucion 2'))
Figura 1: test.tif
subplot(2,2,4)
Para la solucion de este punto se realizó el siguiente código: imshow(uint8(imagen4));
title(sprintf('convolucion 3'))
imagen= imread('test.tif');
imagen=double(imagen);
mascara=[-1 0 1;-1 0 1; -1 0 1]; figure(2)
imshow(uint8(imagen5))
title('resultado por imfilter')
tic
el cual obtuvimos los siguientes tiempos:

Laboratorio Nº1: REDUCCION DE RUIDO Y DETECTOR DE BORDES 2

MÉTODO TIEMPO (S) media de 3x3, 5x5, y 7x7. Verificar la pérdida de


Convolucion 1 0.0178 detalles de la imagen.
Convolucion 2 0.0045
Convolucion 3 0.2769
Imfilter 0.0019
1 1 1 1 1

[ ]
25 25 25 25 25
1 1 1 1 1 1 1 1

[ ]
Y el resultado que se obtuvo para las funciones de 9 9 9 25 25 25 25 25
convolucion fue la figura 2 y para el comando imfilter es la
figura 3:
1 1 1 1 1 1 1 1
9 9 9 25 25 25 25 25
1 1 1 1 1 1 1 1
9 9 9 25 25 25 25 25
1 1 1 1 1
25 25 25 25 25

1 1 1 1 1 1 1

[ ]
1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1
49
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1

El cual se realiza el siguiente código, el cual por medio del


comando imfilter se filtra la imagen con la mascara requerida
para luego graficarla la cual se visualiza en la figura 4:
Figura 2: resultados de funciones convolucion
imagen= imread('test.tif');
imagen=double(imagen);
mascara=[-1 0 1;-1 0 1; -1 0 1];
mascara3 = 1/9*[1 1 1;1 1 1;1 1 1];
mascara5 = 1/25*[1 1 1 1 1; 1 1 1 1 1; 1 1 1 1 1; 1 1 1 1 1; 1 1
1 1 1];
mascara7 = 1/49*[1 1 1 1 1 1 1;1 1 1 1 1 1 1;1 1 1 1 1 1 1;1 1
1 1 1 1 1;1 1 1 1 1 1 1;1 1 1 1 1 1 1;1 1 1 1 1 1 1];
subplot(2,2,1);
imshow(uint8(imagen))
title(sprintf('original'))
imagen3 = imfilter(imagen,mascara3);
subplot(2,2,2);
imshow(uint8(imagen3))
title(sprintf('filtro 3x3'))
imagen5 = imfilter(imagen,mascara5);
subplot(2,2,3);
imshow(uint8(imagen5))
title(sprintf('filtro 5x5'))
imagen7 = imfilter(imagen,mascara7);
Figura 3: resultados de comando imfilter subplot(2,2,4);
imshow(uint8(imagen7))
Para el siguiente punto, se realiza:
title(sprintf('filtro 7x7'))
2. Mediante el uso de la función imfilter realizar el
filtrado de la imagen test.tif con las máscaras de
Laboratorio Nº1: REDUCCION DE RUIDO Y DETECTOR DE BORDES 3

Figura 5: imagen ruido.gif

Figura 4: resultados punto 2 imagen= imread('ruido.gif');


imagen=double(imagen);
los siguientes dos puntos están correlacionados los cuales se
crea la solución en un mismo código, dando como resultado la
figura 5 como resultado del punto 3 y la figura 6 como media3x3 = 1/9*[1 1 1;1 1 1;1 1 1];
resultado del punto 4. media5x5 = 1/25*[1 1 1 1 1; 1 1 1 1 1; 1 1 1
1 1; 1 1 1 1 1; 1 1 1 1 1];
3. Aplicar los filtros de ruido de media 3x3, media gaussiana3x3 = 1/16*[1 2 1; 2 4 2; 1 2 1];
5x5, gausiano 3x3, gausiano 5x5, mediana y gaussiana5x5 = 1/249*[3 6 8 6 3; 6 14 19 14
mediana ponderada a la imagen ruido.gif.
6; 8 19 25 19 8; 6 14 19 14 6; 3 6 8 6 3];
Verificar en cual se obtiene mejor resultado.
ponderada = [1 2 1; 2 4 2; 1 2 1];
Recuerden que la mediana no es una operación
lineal. mascara=[-1 -1 -1, -1 9 -1, -1 -1 -1];
4. Después de aplicar el filtro de media 3x3 sobre la
imagen ruido.gif, aplicar la máscara de realice
sobre la imagen filtrada. Verificar resultados de la [F,C] = size(imagen);
opción. imagencero = imagen*0;
for f=2:F-1
for c=2:C-1
−1 −1 −1 matriz1=imagen(f-1:f+1, c-1:c+1);

[ −1 9 −1
−1 −1 −1 ] matriz2=[matriz1(:)]';
matriz3=sort(matriz2(:));
matriz4=matriz3(5);
matrizfinal=matriz4;
imagencero(f,c)=matrizfinal;
end

end
[f,c]=size(imagen);
vector=zeros(1,sum(sum(ponderada)));
if c==3
img=rgb2gray(imagen);
else
img=imagen;
end
[x,~]=size(ponderada);
vecmask=reshape(ponderada,[1,x*x]);
[f,c]=size(img);
Laboratorio Nº1: REDUCCION DE RUIDO Y DETECTOR DE BORDES 4

imgn=zeros(f,c); imagenx2 = imfilter(imagen2,mascara);


for i=1:f-x+1 subplot(2,2,2);
for j=1:c-x+1 imshow(uint8(imagenx2))
vecim=reshape(img(i:i+x-1,j:j+x-1),[1,x*x]); title(sprintf('masc.med5'))
s=1;
for z=1: x*x
for t=1:vecmask(z) imagenx3 = imfilter(imagen3,mascara);
vector(s)=vecim(z); subplot(2,2,3);
s=s+1; imshow(uint8(imagenx3))
end title(sprintf('masc.gau3'))
end
imgn(i+(floor(x/2)),j+
(floor(x/2)))=median(vector); imagenx4 = imfilter(imagen4,mascara);
end subplot(2,2,4);
end imshow(uint8(imagenx4))
figure(1) title(sprintf('masc.gau5'))
imshow(uint8(imagen))
title(sprintf('original'))
figure(4)

figure(2)
subplot(2,2,1);
imshow(uint8(imagencero))
imagen1 = imfilter(imagen,media3x3); title(sprintf('mediana'))
subplot(2,2,1);
imshow(uint8(imagen1))
title(sprintf('media 3x3')) subplot(2,2,2);
imshow(uint8(imgn))
title(sprintf('ponderada'))
imagen2 = imfilter(imagen,media5x5);
subplot(2,2,2);
imshow(uint8(imagen2)) imagenx5 = imfilter(imagencero,mascara);
title(sprintf('media 5x5')) subplot(2,2,3);
imshow(uint8(imagenx5))
title(sprintf('masc.mediana'))
imagen3 = imfilter(imagen,gaussiana3x3);
subplot(2,2,3);
imshow(uint8(imagen3)) imagenx6 = imfilter(imgn,mascara);
title(sprintf('gaussiana 3x3')) subplot(2,2,4);
imshow(uint8(imagenx6))
title(sprintf('masc.mediana'))
imagen4 = imfilter(imagen,gaussiana5x5);
subplot(2,2,4);
imshow(uint8(imagen4))
title(sprintf('gaussiana 5x5'))
%----------------------------------------

figure(3)

imagenx1 = imfilter(imagen1,mascara);
subplot(2,2,1);
imshow(uint8(imagenx1))
title(sprintf('masc.med3'))
Laboratorio Nº1: REDUCCION DE RUIDO Y DETECTOR DE BORDES 5

Figura 6: filtros madias y gaussianas Figura 8: filtros medianas y mascaras a medianas

para el ultimo punto, se sigue la 5ta directriz:

5. Hacer una comparación de los resultados de los


detectores de borde de Roberts, Prewitt, Sobel y
Mascaras Orientadas de Kirsch. Usar la imagen
circulo.png

Roberts [ 1 0] [ 01 ]
−1 0 1 −1 −1 −1
Prewitt
[ −1 0 1 0
−1 0 1 1
0
1
0
1 ][ ]
−1 0 1 −1 −2 −1

Figura 7: mascara a los filtros medias y gaussianas


Sobel
[ −2 0 2 0
−1 0 1 1
0
2
0
1 ][ ]
Kirsh

imagen= imread('circulo.png');
imagen=double(imagen);
figure(1)
imshow(uint8(imagen))

figure(2)
roberts1=[1 0];
roberts2=[0;1];
filtro1=imfilter(imagen,roberts1);
Laboratorio Nº1: REDUCCION DE RUIDO Y DETECTOR DE BORDES 6

roberts=imfilter(filtro1,roberts2);
subplot(2,2,1);
imshow(uint8(roberts))
title(sprintf('filtro roberts'))

prewitt1=[-1 0 1; -1 0 1; -1 0 1];
prewitt2=[-1 -1 -1; 0 0 0; 1 1 1];
filtro11=imfilter(imagen,prewitt1);
prewitt=imfilter(filtro11,prewitt2);
subplot(2,2,2);
imshow(uint8(prewitt))
title(sprintf('filtro prewitt'))

sobel1 = [-1 0 1; -2 0 2; -1 0 1];


sobel2 = [-1 -2 -1; 0 0 0; 1 2 1];
filtro111 = imfilter(imagen,sobel1);
sobel = imfilter(filtro111,sobel2);
subplot(2,2,3); Figura 9: detectores de bordes (por cascada)
imshow(uint8(sobel))
title(sprintf('filtro sobel'))

kirsh1 = [-3 -3 5;-3 0 5;-3 -3 -5];


kirsh2 = [-3 5 5;-3 0 5;-3 -3 -3];
kirsh3 = [5 5 5;-3 0 -3;-3 -3 -3];
kirsh4 = [5 5 -3;5 0 -3;-3 -3 -3];
kirsh5 = [5 -3 -3;5 0 -3;5 -3 -3];
kirsh6 = [-3 -3 -3;5 0 -3;5 5 -3];
kirsh7 = [-3 -3 -3;-3 0 -3;5 5 5];
kirsh8 = [-3 -3 -3;-3 0 5;-3 5 5];
filtro2 = imfilter(imagen,kirsh1);
filtro3 = imfilter(filtro2,kirsh2);
filtro4 = imfilter(filtro3,kirsh3);
filtro5 = imfilter(filtro4,kirsh4);
filtro6 = imfilter(filtro5,kirsh5);
filtro7 = imfilter(filtro6,kirsh6);
filtro8 = imfilter(filtro7,kirsh7);
kirsh = imfilter(filtro8,kirsh8);
subplot(2,2,4); Figura 10: detectors de bordes (por producto)
imshow(uint8(kirsh))
title(sprintf('filtro kirsh'))

II.ANALISIS DE RESULTADOS
1. Las funciones creadas según diferentes formas de
aplicar la ecuación general, aunque funcionan
presentan mayor tardanza que la suministrada por
Matlab (imfilter) el cual presenta mayor rapidez a la
hora de ejecución lo cual ayuda bastante a la hora de
sistemas robustos de tratamientos de imágenes, además,
presenta mejores resultados a la hora de comparar éstos
métodos.
2. El resultado obtenido por cada filtro presenta gran cada
vez perdida de detalle y enfoque en la imagen, dando
mejor resulado el filtro 3x3 debido a que es la matriz
Laboratorio Nº1: REDUCCION DE RUIDO Y DETECTOR DE BORDES 7

mas pequeña por ende abarca mayor detalle a la hora de


realizar la convolucion en la imagen.
3. Los filtros aplicados a la imagen que se observan en la
figura 6 presenta mejor resultado el filtro gaussiano
3x3, aunque no elimina el ruido, realza mejor los
objetos de la imagen original, sin embargo, para los
filtros de mediana y mediana ponderada que se muestra
en la figura 8 el presenta mejor resultado ante todos los
filtros del presente punto es el filtro de mediana, pues
su forma de trabajar desprecia el ruido y mejora
notablemente la imagen a comparación de la mediana
ponderada ya que aunque elimina sierta parte del ruido,
aun dejan rastros de estos.
4. Al aplicar las mascaras a cada filtro de media y
gaussianas, no presentan gran aporte a la mejoría de la
imagen como se ve en la figura 7, pero al aplicar ésta
mascara a los filtros de mediana y mediana ponderada
como se ve en las 2 ultimas imágenes de la figura 8, el
realce de los bordes que se obtiene con el filtro de
mediana tiene mejor resultado que los demás obtenidos.
5. El código q se realizó por medio de secuencias en
cascadas para cada matriz correspondiente de cada
detector, es decir, para el detector Roberts se aplica a la
imagen primero el vector [1 0] para luego ese resultado
aplicarle su siguiente vector [0; 1], luego de realizar el
código se obtiene los resultados (ver figura 9) el cual se
puede apreciar que el filtro solber presenta mejores
resultados, sin embargo, al realizar el código de manera
diferente, es decir, aplicando las matrices como
productos en la imagen, es decir, para el detector
Roberts se le multiplica a la imagen el producto [1
0]*[0;1] y asi realizarlo a todos los detectores se
obtiene el resultado de la figura 10 dando como mejor
resultado el detector kirsh, no obstante ambos códigos
presentan resultados variados, por ejemplo, para los
detectores sobel y kirsh de la figura 9 se generan “ecos”
de la imagen, pareciera que ubieran mas círculos en la
imagen, cosa q no es, pero, los detectores de la figura
10, pareciera que cada filtro aclara mas el exterior de la
circunferencia.

También podría gustarte