Professional Documents
Culture Documents
Facultad de Ingeniera
Ingeniera Electrnica y Telecomunicaciones
Laboratorio Procesamiento Digital de Seales.
Juan P. Narvez Bernal
Ral B. Suquinagua Otavalo
Objetivos.
Procesar una imagen digital mediante filtros lineales y no lineales aplicados en el dominio
espacial de la imagen.
Reforzar los conocimientos sobre aplicaciones de la DFT en el filtrado de imgenes.
Utilizar la transformada de Fourier bidimensional para aplicar un filtro del tipo notch a una
imagen con el fin de eliminar un patrn del tipo moir.
Marco terico.
Se recordara como se realizaba la convolucin en una dimensin para que sea ms fcil explicar la
de dos dimensiones.
Para realizar la convolucin tenamos que rotar 180 a la seal (w) y colocbamos el valor de ms
a la derecha de la seal coincidiendo con el origen de f (j). Luego se completaba con ceros (k), el
primer valor de la convolucin es la suma de productos en la posicin mostrada (k), movemos una
posicin a la derecha y repetimos el proceso (l) hasta llegar a la ltima posicin que se definir
como (n) se muestra detalladamente en la figura1.
El resultado en (o) llamado full, implica un clculo en la manera vista con la imagen completada
con ceros. Recordar la convolucin daba la suma de los 2 anchos.
El resultado en (p) llamado same tiene el mismo tamao que f y se calcula agregando ceros a la
imagen pero se comienza con el punto central de la mscara del filtro (valor 3).
En nuestro caso discreto que son las imgenes la matriz de peso es una matriz de nmeros. Este
filtro es el que rotamos y desplazamos. El pixel (r,c) en la imagen de salida es la suma pesada de
los pixeles de la imagen original vecinos a (r,c). Cada pixel es multiplicado por el peso
correspondiente y la suma de esos productos es el valor del pixel de la imagen final como se
muestra a continuacin.
Figura2. Convolucin en dos dimensiones.
Existen varias soluciones para resolver ese problema los cuales veremos 2 soluciones que son:
La primera solucin es tratar las celdas vacas en la ventana de convolucin como ceros. Esto se
conoce como zero-padding. Es fcil de realizar pero no es una buena idea si los bordes de la
imagen resultante son tan importantes como el resto de la imagen.
Se pueden asociar las frecuencias de la transformada de Fourier con patrones de variacin de las
intensidades de la imagen. La frecuencia ms baja corresponde al promedio de los valores de gris
de la imagen. Mientras nos alejamos del origen, las frecuencias corresponden a variaciones suaves
en los tonos de gris. Conforme nos alejamos ms las frecuencias altas empiezan a corresponder a
cambios rpidos o abruptos en los tonos de gris como son por ejemplo los bordes de los objetos
y/o el ruido. [2]
La funcin myconv2 tiene tres variables de ingreso que son x la matriz de entrada, h la matriz de
ncleo (respuesta al impulso) y var que sirve para identificar si se visualiza la matriz completa para
que se d este caso var debe ser igual a cualquier palabra diferente de same o solamente la
matriz central es decir una matriz con el tamao de la matriz entrante para la cual var debe de ser
same.
Lo primero que se hace es obtener el tamao de las matriz x y h luego se calcula el padding de
cada ncleo para poder saber el nmero de iteraciones, se invierte la matriz h de forma que gire
180 grados, se realiza una pregunta para ver si se muestra la matriz completa o solamente su
matriz del centro como se explic anteriormente. Luego se cre una matriz de ceros y se coloca en
el centro la matriz x la cual llamaremos zI, luego se crean los for que bsicamente realizan todo el
programa que consiste en ir generando matrices del tamao de h de la matriz zI y ambas matrices
se multiplican y se almacenan en I0 y as sucesivamente se mueven todos las posiciones de zI
Una vez que se guardan todos los valores se separan eliminamos las columnas y filas que tenga
ceros y mostramos el resultado ya sea este en el caso same o en el caso full la matriz resultante.
Para esta seccin del informe trabajaremos sobre la imagen lena512.bmp corrompida con ruido
del tipo `salt & pepper'. Utilice el cdigo provisto en los archivos: LenaPepperMan.m como punto
de partida.
En esta parte del informe deber incluir los resultados del filtrado as como el cdigo
correspondiente a la implementacin de cada uno de los filtros.
Tome en cuenta que deber considerar tambin los bordes de la imagen, de tal modo que el 100%
de la imagen sea procesada mediante su programa.
Implemente un sistema de filtrado por promediado mvil para tratar de eliminar el ruido en la
imagen:
clc
clear all
close all
lena = imread('lena512.bmp');
figure(1)
imshow(lena)
lena_noise = imnoise(lena,'salt & pepper',0.02);
figure(2)
imshow(lena_noise)
lena1= im2double(lena_noise);
MovingAverageKer = [1/9 1/9 1/9 ; 1/9 1/9 1/9 ; 1/9 1/9 1/9 ];
%MovingAverageKer = [1/25 1/25 1/25 1/25 1/25;1/25 1/25 1/25 1/25
1/25;1/25 1/25 1/25 1/25 1/25;1/25 1/25 1/25 1/25 1/25;1/25 1/25 1/25
1/25 1/25];
%MovingAverageKer = [1/49 1/49 1/49 1/49 1/49 1/49 1/49 ; 1/49 1/49 1/49
1/49 1/49 1/49 1/49; 1/49 1/49 1/49 1/49 1/49 1/49 1/49; 1/49 1/49 1/49
1/49 1/49 1/49 1/49; 1/49 1/49 1/49 1/49 1/49 1/49 1/49; 1/49 1/49 1/49
1/49 1/49 1/49 1/49; 1/49 1/49 1/49 1/49 1/49 1/49 1/49];
%MovingAverageKer =
[1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 ; 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 ;1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441;1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441;1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441;1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441;1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441;1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441;1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441;1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441;1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441;1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441;1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441;1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441;1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441;1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441;1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441;1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441;1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441;1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441;1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441
1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441 1/441];
lena_conv=conv2(lena1,MovingAverageKer,'same');
lena_res= im2uint8(lena_conv);
figure(3)
imshow(lena_res)
title('promediado movil, vecindario 3x3')
%title('promediado movil, vecindario 5x5')
%title('promediado movil, vecindario 7x7')
%title('promediado movil, vecindario 21x21')
promediado movil, vecindario 3x3 promediado movil, vecindario 5x5
En este punto se realiza el promedio mediante una convolucin, el kernel define el vecindario y
por lo tanto el factor que debe ser el promedio, esto nos ahorra mucho esfuerzo ya que con bucles
incluye mayor cdigo.
Para procesar la matriz primeramente se la convierte a datos tipo double, se hace la convolucin y
para visualizar la matriz se los convierte a datos sin signo de 8 bits, tal como en el punto 2.
Implemente un sistema de filtrado no lineal utilizando un Median Filter con el fin de eliminar el
ruido en la imagen.
Recuerde que el Median Filter, utiliza un vecindario similar al utilizado en el filtrado por
promediado mvil y que se desplaza haciendo un barrido por la imagen original, pero con la
diferencia que en lugar de obtener el promedio del vecindario, lo que hace es obtener la media del
conjunto de valores: Utilice el comando median de Matlab.
lena = imread('lena512.bmp');
figure(1)
imshow(lena)
lena_noise = imnoise(lena,'salt & pepper',0.02);
figure(3)
imshow(lena_noise)
lena_noise1 = lena_noise;
%denoising a given area:
%Median Filter 3x3 neighborhood
for y=2:511
for x=2:511
lena_noise(x,y) = median( [(lena_noise(x-1,y-1))
,(lena_noise(x,y-1)) , (lena_noise(x+1,y-1)) , (lena_noise(x-1,y)) ,
(lena_noise(x+1,y)) , (lena_noise(x-1,y+1)) , (lena_noise(x,y+1)) ,
(lena_noise(x-1,y+1)) ]);
end
end
%denoising for edges
w=1;
for x=2:511
lena_noise(x,w) = median( [(lena_noise(x-1,w)) ,(lena_noise(x,w)) ,
(lena_noise(x+1,w)) ]);
end
w=1;
for x=2:511
lena_noise(w,x) = median( [(lena_noise(w,x-1)) ,(lena_noise(w,x)) ,
(lena_noise(w,x+1)) ]);
end
w=512;
for x=2:511
lena_noise(x,w) = median( [(lena_noise(x-1,w)) ,(lena_noise(x,w)) ,
(lena_noise(x+1,w)) ]);
end
w=512;
for x=2:511
lena_noise(w,x) = median( [(lena_noise(w,x-1)) ,(lena_noise(w,x)) ,
(lena_noise(w,x+1)) ]);
end
figure(4)
imshow(lena_noise)
title('filtrado Lena, vecindario 3x3')
filtrado Lena, vecindario 3x3
clear all
close all
lena = imread('lena512.bmp');
figure(1)
imshow(lena)
for y=1:2
for x=3:510
A= lena_noise(y:y+2,x-2:x+2);
v = reshape( A.' ,1,numel(A));
lena_noise(y,x) = median( v);
end
end
%critical
for y=511:512
for x=3:510
A= lena_noise(y-2:y,x-2:x+2);
v = reshape( A.' ,1,numel(A));
lena_noise(y,x) = median( v);
end
end
%end critical
for y=511:512
for x=3:510
A= lena_noise(x-2:x+2,y);
lena_noise(x,y) = median( A);
end
end
figure(4)
imshow(lena_noise)
title('filtrado Lena, vecindario 5x5')
clear all
close all
lena = imread('lena512.bmp');
figure(1)
imshow(lena)
lena_noise1 = lena_noise;
%denoising a given area:
%Median Filter 7x7 neighborhood
for y=4:508
for x=4:508
A= lena_noise(x-3:x+3,y-3:y+3);
v = reshape( A.' ,1,numel(A));
lena_noise(x,y) = median( v);
end
end
%denoising for edges
for y=1:4
for x=4:508
A= lena_noise(x-3:x+3,y);
lena_noise(x,y) = median( A);
end
end
for y=1:4
for x=4:508
A= lena_noise(y:y+3,x-3:x+3);
v = reshape( A.' ,1,numel(A));
lena_noise(y,x) = median( v);
end
end
%critical
for y=509:512
for x=4:508
A= lena_noise(y-3:y,x-3:x+3);
v = reshape( A.' ,1,numel(A));
lena_noise(y,x) = median( v);
end
end
%end critical
for y=509:512
for x=4:508
A= lena_noise(x-3:x+3,y);
lena_noise(x,y) = median( A);
end
end
figure(4)
imshow(lena_noise)
title('filtrado Lena, vecindario 7x7')
filtrado Lena, vecindario 7x7
lena = imread('lena512.bmp');
figure(1)
imshow(lena)
lena_noise1 = lena_noise;
for y=1:11
for x=11:501
A= lena_noise(x-10:x+10,y:y+1);
v = reshape( A.' ,1,numel(A));
lena_noise(x,y) = median( v);
end
end
for y=1:11
for x=11:501
A= lena_noise(y:y+1,x-10:x+10);
v = reshape( A.' ,1,numel(A));
lena_noise(y,x) = median( v);
end
end
for y=502:512
for x=11:501
A= lena_noise(x-10:x+10,y-1:y);
v = reshape( A.' ,1,numel(A));
lena_noise(x,y) = median( v);
end
end
%critical
for y=502:512
for x=11:501
A= lena_noise(y-1:y,x-10:x+10);
v = reshape( A.' ,1,numel(A));
lena_noise(y,x) = median( v);
end
end
%end critical
for y=502:512
for x=11:501
A= lena_noise(y-1:y,x-10:x+10);
v = reshape( A.' ,1,numel(A));
lena_noise(y,x) = median( v);
end
end
%===========================================|
%denoising for corners
%===========================================|
for y=1:10%corner izquierdo superior
for x=1:10
A= lena_noise(x:x+3,y:y+3);
v = reshape( A.' ,1,numel(A));
lena_noise(x,y) = median( v);
end
end
for y=1:10%corner izquierdo inferior
for x=502:512
A= lena_noise(x-3:x,y:y+3);
v = reshape( A.' ,1,numel(A));
lena_noise(x,y) = median( v);
end
end
for y=502:512%corner derecho superior
for x=1:10
A= lena_noise(x:x+3,y-3:y);
v = reshape( A.' ,1,numel(A));
lena_noise(x,y) = median( v);
end
end
for y=502:512%corner derecho inferior
for x=502:512
A= lena_noise(x-3:x,y-3:y);
v = reshape( A.' ,1,numel(A));
lena_noise(x,y) = median( v);
end
end
figure(4)
imshow(lena_noise)
title('filtrado Lena, vecindario 21x21')
Escriba sus impresiones y justifique el porqu de los resultados obtenidos (respecto a la calidad
de la imagen obtenida).
La calidad de imagen se pierde, est difuminada, esto se debe a que se coge el valor medio del
vecindario que escogemos, entonces mientras mayor sea el tamao del vecindario, menor va a ser
la calidad de la imagen como se ve en las figuras de arriba.
De los vecindarios de 3x3 hasta 7x7 no se elimin el ruido de las esquinas dado que mximo 3
pixeles se nos escapan pero en el caso del vecindario de 21x21 ya es crtico porque ya no son
simples 3 pixeles, esto aumenta a 10 pixeles.
3) Operador Laplaciano
Para procesar los datos utilice el tipo de datos double, por lo que debe convertir las imgenes
ledas a este tipo de dato.
moon_sum=moon_conv+moon;
Describa lo que observa, e indique cual es el rol del operador Laplaciano en el mejoramiento
del detalle de la imagen.
convolucion por el kernel Imagen filtrada
Se observa que los filos de la imagen se realzan y est ms ntida, esto es debido a la convulucin
por el kernel Laplaciano como se ve en la figura de la izquierda de arriba, que tiene la funcin de
sacar los mximos de la seal (filos) y despus procedemos a sumarle a la seal original y por este
motivo se visualiza as este tipo de imagen.
%sharpening
a) Tarea:
El objetivo de esta prctica es eliminar el patrn de moire de una imagen utilizando un filtro
selectivo en frecuencia del tipo notch. La imagen que se muestra a continuacin se muestra
distorsionada por un patrn de ruido que se visualiza con un patrn particular de frecuencia:
A continuacin se muestra el espectro de la imagen donde puede apreciarse los componentes de
ruido claramente identidades:
Su tarea consiste en crear una funcin en el dominio de la frecuencia que elimine los componentes
identificados como fuentes del ruido y restaurar la imagen de tal modo que el patrn de moire
desaparezca,
n=2;
d0=30;
[r,c]=size(DFT_imageN);
notch=zeros(r,c);
butterworth=zeros(r,c);
for i=1:r
for j=1:c
notch(i,j)= sqrt( (i-(r/2))^2 + (j-(c/2))^2);
end
end
A continuacin desarrollamos una expresin que nos permita introducir el orden y radio
de dicho filtro para ello lo realizamos de la siguiente manera:
for i=1:r
for j=1:c
butterworth(i,j)= 1 / (1+ (notch(i,j)/d0)^(2*n) ) ;
end
end
Una vez obtenido el filtro deseado procedemos a multiplicar por el matriz origen (es decir
la imagen con ruido en el dominio de la frecuencia) y posteriormente realizamos la
transformada inversa de Fourier en tiempo discreto para proceder a visualizar los
resultados:
for i=1:r
for j=1:c
butterworth(i,j)= 1 / (1+ (notch(i,j)/d0)^(2*n) ) ;
end
end
%multiplico la imagen por el filtro butterworth en frecuencia
for i=1:r
for j=1:c
resp(i,j)=(butterworth(i,j))*DFT_imageN(i,j);
end
end
imageNfilt=abs(ifft2(resp));
figure,
imshow(imageNfilt,[])
title('imagen filtrada')
figure,
mesh(abs(log(notch)))
title('filtro notch')
figure,
mesh(abs(log(butterworth)))
title('filtro butterworth')
Como se puede ver en la imagen filtrada se ha eliminado el ruido casi en su totalidad, pero
al variar el orden del filtro, concretamente de mayor orden se nota ms el ruido, esto se
debe a que no elimina los componentes de ruido de los bordes.
imagen filtrada
2) Utilizando un sistema de filtrado selectivo tipo notch, en el que localizara un filtro
notch (por cada par de componentes) en cada componente de ruido localizado en el
espectro de la imagen.
Se puede observar claramente el ruido en la imagen original, el objetivo de dicho punto es aplicar
el filtro notch y eliminar dicho ruido.
5) El espectro bidimensional del filtro utilizado para para eliminar el patrn de moire.
Es el filtro que se va a utilizar para eliminar el ruido de la imagen original.
Se puede observar que es el mismo filtro que se diseo en los anterores puntos si no vista
en 3D.
7) El espectro bidimensional de la imagen filtrada.
Se observa en la imagen que se han suprimido las cruces blancas que se explic en el
punto 3 sustituyndolas con puntos negros que son resultado del filtro.
8) El espectro tridimensional de la imagen filtrada (utilice el comando mesh de
Matlab).
Se nota claramente que se eliminaron varias componentes de ruido es decir los picos de
color amarillo que se explicaron en el punto 4, para seguir mejorando la imagen se
procede a modificar el filtro pero con dicho filtro se obtienen buenos resultados.
Documentacin
A continuacin se adjunta el cdigo que se us para el diseo del filtro Notch como se observa
cada lnea esta comentada y especificando que hace.
D0k =10;
uk1 =45; vk1 =0; uk2 = 90; vk2 = 0;
uk3 = 133; vk3 = 0; uk4 = 175; vk4 = 0;
uk5 = 20; vk5 = 55; uk6 = 65; vk6 = 55;
uk7 = 108; vk7 = 55; uk8 = 150; vk8 = 55;
uk9 = 20; vk9 = -55; uk10 = 65; vk10 = -55;
uk11 = 108; vk11 = -55; uk12 = 150; vk12 = -55;
Dk13 = sqrt((i-f/2-uk13)^2+(j-c/2-vk13)^2);
Dmk13 = sqrt((i-f/2+uk13)^2+(j-c/2+vk13)^2);
Dk14 = sqrt((i-f/2-uk14)^2+(j-c/2-vk14)^2);
Dmk14 = sqrt((i-f/2+uk14)^2+(j-c/2+vk14)^2);
Dk15 = sqrt((i-f/2-uk15)^2+(j-c/2-vk15)^2);
Dmk15 = sqrt((i-f/2+uk15)^2+(j-c/2+vk15)^2);
Dk16 = sqrt((i-f/2-uk16)^2+(j-c/2-vk16)^2);
Dmk16 = sqrt((i-f/2+uk16)^2+(j-c/2+vk16)^2);
Dk17 = sqrt((i-f/2-uk17)^2+(j-c/2-vk17)^2);
Dmk17 = sqrt((i-f/2+uk17)^2+(j-c/2+vk17)^2);
Dk18 = sqrt((i-f/2-uk18)^2+(j-c/2-vk18)^2);
Dmk18 = sqrt((i-f/2+uk18)^2+(j-c/2+vk18)^2);
Dk19 = sqrt((i-f/2-uk19)^2+(j-c/2-vk19)^2);
Dmk19 = sqrt((i-f/2+uk19)^2+(j-c/2+vk19)^2);
Dk20 = sqrt((i-f/2-uk20)^2+(j-c/2-vk20)^2);
Dmk20 = sqrt((i-f/2+uk20)^2+(j-c/2+vk20)^2);
Dk21 = sqrt((i-f/2-uk21)^2+(j-c/2-vk21)^2);
Dmk21 = sqrt((i-f/2+uk21)^2+(j-c/2+vk21)^2);
Dk22 = sqrt((i-f/2-uk22)^2+(j-c/2-vk22)^2);
Dmk22 = sqrt((i-f/2+uk22)^2+(j-c/2+vk22)^2);
Dk23 = sqrt((i-f/2-uk23)^2+(j-c/2-vk23)^2);
Dmk23 = sqrt((i-f/2+uk23)^2+(j-c/2+vk23)^2);
Dk24 = sqrt((i-f/2-uk24)^2+(j-c/2-vk24)^2);
Dmk24 = sqrt((i-f/2+uk24)^2+(j-c/2+vk24)^2);
% Formula para el calculo del filtro
H_NR(i,j) = ((1 / (1+ (D0k/Dk1)^(2*n))) * (1 / (1+
(D0k/Dmk1)^(2*n))) ) * ((1 / (1+ (D0k/Dk2)^(2*n)))* (1 / (1+
(D0k/Dmk2)^(2*n))) )*((1 / (1+ (D0k/Dk3)^(2*n)))* (1 / (1+
(D0k/Dmk3)^(2*n))) )*((1 / (1+ (D0k/Dk4)^(2*n)))* (1 / (1+
(D0k/Dmk4)^(2*n))) )*((1 / (1+ (D0k/Dk5)^(2*n)))* (1 / (1+
(D0k/Dmk5)^(2*n))) )*((1 / (1+ (D0k/Dk6)^(2*n)))* (1 / (1+
(D0k/Dmk6)^(2*n))) )*((1 / (1+ (D0k/Dk7)^(2*n)))* (1 / (1+
(D0k/Dmk7)^(2*n))) )*((1 / (1+ (D0k/Dk8)^(2*n)))* (1 / (1+
(D0k/Dmk8)^(2*n))) ) * ((1 / (1+ (D0k/Dk9)^(2*n)))* (1 / (1+
(D0k/Dmk9)^(2*n))) ) * ((1 / (1+ (D0k/Dk10)^(2*n)))* (1 / (1+
(D0k/Dmk10)^(2*n))) )* ((1 / (1+ (D0k/Dk11)^(2*n)))* (1 / (1+
(D0k/Dmk11)^(2*n))) ) * ((1 / (1+ (D0k/Dk12)^(2*n)))* (1 / (1+
(D0k/Dmk12)^(2*n))) *((1 / (1+ (D0k/Dk13)^(2*n))) * (1 / (1+
(D0k/Dmk13)^(2*n))) ) * ((1 / (1+ (D0k/Dk14)^(2*n)))* (1 / (1+
(D0k/Dmk14)^(2*n))) )*((1 / (1+ (D0k/Dk15)^(2*n)))* (1 / (1+
(D0k/Dmk15)^(2*n))) )*((1 / (1+ (D0k/Dk16)^(2*n)))* (1 / (1+
(D0k/Dmk16)^(2*n))) )*((1 / (1+ (D0k/Dk17)^(2*n)))* (1 / (1+
(D0k/Dmk17)^(2*n))) )*((1 / (1+ (D0k/Dk18)^(2*n)))* (1 / (1+
(D0k/Dmk18)^(2*n))) )*((1 / (1+ (D0k/Dk19)^(2*n)))* (1 / (1+
(D0k/Dmk19)^(2*n))) )*((1 / (1+ (D0k/Dk20)^(2*n)))* (1 / (1+
(D0k/Dmk20)^(2*n))) ) * ((1 / (1+ (D0k/Dk21)^(2*n)))* (1 / (1+
(D0k/Dmk21)^(2*n))) ) * ((1 / (1+ (D0k/Dk22)^(2*n)))* (1 / (1+
(D0k/Dmk22)^(2*n))) )* ((1 / (1+ (D0k/Dk23)^(2*n)))* (1 / (1+
(D0k/Dmk23)^(2*n))) ) * ((1 / (1+ (D0k/Dk24)^(2*n)))* (1 / (1+
(D0k/Dmk24)^(2*n))) ));
end
end
% Se calcula la DFT de la imagen filtrada
DFT_imageNfilt=DFT_imageN.*H_NR;
% Se calcula la nueva imagen
imageNfilt=abs(ifft2(DFT_imageNfilt));
% Se muestra el espectro bidimensional del filtro usado.
figure,
imshow(H_NR,[])
% Se calcula y muestra el espectro bidimensional de la imagen filtrada.
R=log(abs(fftshift(fft2(double(imageNfilt))))+1);
figure,
imshow(R,[])
% Se muestra el espectro tridimensional del filtro.
figure, mesh(abs(log(H_NR+1)))
title('Output Spectrum filtro')
% Se muestra el espectro tridimensional de la imagen original
figure, mesh(abs(log(DFT_imageN+1)))
title('Original Image 3D Spectrum')
% Se muestra el espectro tridimensional de la imagen fiinal
figure, mesh(abs(log(DFT_imageNfilt+1)))
title('Output Image Spectrum filtro')
% Se muestra la imagen final es decir la filtrada.
figure, imshow(uint8(imageNfilt))
title('Output Image')
Conclusiones y Recomendaciones
Se pudo poner en practica todos los conociemiento aprendidos en clase para la realizacion
correcta de la practica, Se noto la importancia de realizar fiiltrado ya sea en el dominio
espacial o en el dominio de la frecuencia aplicando la DFT.
Se logr implementar correctamente la convolucin en dos dimensiones es decir mediante
el uso de condicionales y bucles para concluir que se llega a la misma respuesta mediante
el comando conv2 que es prediseado por matlab.
Al momento de desarrollar el filtro Notch se not que depende demasiado la imagen final
del filtro diseado, mientras ms puntos es mejor ya que se eliminan ms componentes de
ruido en este caso se not que 48 puntos eran suficientes para que de buenos resultados,
tambin se not que al suprimir los valores del centro de la imagen original la imagen
resultante era una imagen negra eso se debe a que se eliminan los valores con mayor
ganancia.
Al momento de usar el orden del filtro se recomienda no usar un valor muy alto ya que la
imagen final se comienza a ver borrosa.
En la parte del promediado mvil se puede ver los bordes oscuros, esto se lo aprecia de
mejor manera en el vecindario de 21x21, se debe a que se hace la convolucin en los
mrgenes por ceros, dado que fuera de los mrgenes de la imagen no existen valores.
Bibliografa
https://www.mathworks.com/matlabcentral/fileexchange/40579-frequency-domain-filtering-for-
grayscale-images/all_files
[2] Gonzalez & Woods, Digital Image Processing, Pearson Education, Prentice Hall, Second Edition,
2002
[3] Gonzalez & Woods, Digital Image Processing, Pearson Education, Prentice Hall, Second
Edition, 2002