Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Resumen
En el siguiente trabajo se muestran los resultados obtenido en la recuperacin de una imagen
muestreada utilizando dos mtodos diferentes, uno que utiliza la transformada de Fourier de la imagen y
otro que utiliza la operacin convolucin. Se logr obtener una imagen recuperada mucho mejor que la
imagen de partida, pero que an as no logro reproducir exactamente la imagen a recuperar debido al
bajo perodo espacial del muestreo.
x
ancho
(1)
Filtro gaussiano 1
2x
y = 0.5 1 + cos
ancho
(2)
Filtro de pirmide
y=
2
2
(x + ancho/2) si x < 0 y =
(x ancho/2) si x > 0
ancho
ancho
(3)
Filtro gaussiano 2
y = 0.54 + 0.46 cos
Donde "ancho" denota el ancho del filtro
mimmurillome@unal.edu.co
133855
2x
ancho
(4)
Se seleccion que el filtro tuviera un ancho de 80 pxeles suponiendo que el muestreo era el ideal segn el
teorema de Nyquist. Para observar si el muestreo nos puede permitir recuperar con exactitud la imagen
original, podemos observar la siguiente figura en la cual se muestra un perfil de la transformada de Fourier
de la imagen muestreada
En la imagen anterior se observa que el muestreo tiene un perodo espacial muy bajo por lo cual los espectros
se encuentran superpuestos en la transformada. Por lo tanto no es posible recuperar con exactitud la imagen
que se muestreo.
Anexo
Al ejecutar el programa se mostrarn dos imagenes una correspondiente a la recuperacin de la imagen a
partir de la transformada incluyendo la forma de los filtros y una segunda imagen que contiene las imagenes
recuperadas a partir de la convolucin. Para que la recuperacin a partir de la transformada se observe bien
la variable ancho debe valer alrededor de 80 pxeles y para que la recuperacin a partir de la convolucin se
observe bien, la variable ancho debe valer alrededor de 6 pxeles.
Cdigo
pi=3.1415926;
a=2;
% Filas para el subplot
b=5;
% Columnas para el subplot
ancho=80; %Ancho del filtro
%LECTURA DE LA IMAGEN Y TRANSFORMADA
f=imread(imagen_m.tif);
F=fft2(f);
modF=abs(F);
FF=fftshift(F);
%CONSTRUCCION DE FILTROS
%Filtro cuadrado
%ancho=80; %Permite cambiar el ancho de manera independiente para cada filtro
filter=zeros(480);
min=240-ancho/2;
max=240+ancho/2;
10
filter(min:max,min:max)=1;
%Filtro gaussiano 1
filter1=ones(480);
x=zeros(1,480);
%ancho=80; %Ancho de la gaussiana
for ii=1:480
dist=abs(ii-240);
if dist>ancho/2
continue;
end
x(ii)=0.5*(1+cos((2*pi*(ii-240))/ancho)); %La funcion me centra el filtro en 240
end
%Estos dos for me forman la gaussiana con la matriz de unos
for ii=1:480
filter1(ii,1:480)=filter1(ii,1:480).*x;
end
for ii=1:480
filter1(1:480,ii)=filter1(1:480,ii).*x;
end
%Filtro piramide
filter2=ones(480);
y=zeros(1,480);
%ancho=80; %Ancho de la piramide
for ii=1:480
dist=abs(ii-240);
if dist>ancho/2 %Condicion para utilizar unicamente el maximo principal
continue;
end
m=2/ancho;
y(ii)=m*(ii-(240-ancho/2)); %La funcion me centra el filtro en 240
if ii>240
y(ii)=m*((240+ancho/2)-ii);
end
end
%Estos dos for me forman la piramide con la matriz de unos
for ii=1:480
filter2(ii,1:480)=filter2(ii,1:480).*y;
end
for ii=1:480
filter2(1:480,ii)=filter2(1:480,ii).*y;
end
%filtro sinc
filter3=ones(480);
%ancho=80;
%Ancho de la sinc utilizando solo el maximo principal
z=zeros(1,480);
for ii=1:480
11
dist=abs(ii-240);
arg=2*pi*(ii-240)/ancho;
if dist>ancho/2
continue;
end
z(ii)=(sin(arg))/arg;
end
z(240)=1;
%Estos dos for me forman la sinc con la matriz de unos
for ii=1:480
filter3(ii,1:480)=filter3(ii,1:480).*z;
end
for ii=1:480
filter3(1:480,ii)=filter3(1:480,ii).*z;
end
%filtro gaussiano 2
filter4=ones(480);
p=zeros(1,480);
for ii=1:480
dist=abs(ii-240);
if dist>ancho/2
continue;
end
p(ii)=0.54+0.46*cos(2*pi*(ii-240)/ancho);
end
%Estos dos for me forman el filtro gaussiano con la matriz de unos
for ii=1:480
filter4(ii,1:480)=filter4(ii,1:480).*p;
end
for ii=1:480
filter4(1:480,ii)=filter4(1:480,ii).*p;
end
12
Raux=abs(R3);
RR3=mat2gray(Raux);
%Filtro gaussiano 2
R4=ifft2(F.*filter4);
Raux=abs(R4);
RR4=mat2gray(Raux);
%RECUPEACION DE LA IMAGEN CON CONVOLUCION
%Filtro cuadrado%
Iaux=conv2(mat2gray(f),filter,same); %same me preserva el tamao de la grilla de la imagen
I=mat2gray(Iaux);
%Filtro gaussiano 1
Iaux=conv2(mat2gray(f),filter1,same);
I1=mat2gray(Iaux);
%Filtro piramide
Iaux=conv2(mat2gray(f),filter2,same);
I2=mat2gray(Iaux);
%Filtro sinc
Iaux=conv2(mat2gray(f),filter3,same);
I3=mat2gray(Iaux);
%Filtro gaussiano 2
Iaux=conv2(mat2gray(f),filter4,same);
I4=mat2gray(Iaux);
%IMPRESION IMAGENES
figure;
%Impresion filtros
%Filtro cuadrado
cuad=mat2gray(filter);
subplot(a,b,1);
imshow(cuad);
title(Filtro cuadrado);
%Filtro gaussiano 1
gauss=mat2gray(filter1);
subplot(a,b,2);
imshow(gauss);
title(Filtro gaussiano 1);
%Filtro piramide
pira=mat2gray(filter2);
subplot(a,b,3);
imshow(pira);
title(Filtro piramide);
%Filtro sinc
fsinc=mat2gray(filter3);
subplot(a,b,4);
imshow(fsinc);
title(Filtro sinc);
%Filtro gaussiano 2
gauss2=mat2gray(filter4);
subplot(a,b,5);
imshow(gauss2);
title(Filtro gaussiano 2);
%IMAGEN RECUPERADA CON TRANSFORMADA
13