recuperacion de imagen

13
Recuperación de imagen a partir de su transformada y la convolución con filtros Miller Mateo Murillo * Óptica de Fourier, Departamento de Física Universidad Nacional de Colombia Bogotá 09/03/2015 Resumen En el siguiente trabajo se muestran los resultados obtenido en la recuperación de una imagen muestreada utilizando dos métodos diferentes, uno que utiliza la transformada de Fourier de la imagen y otro que utiliza la operación convolución. Se logró obtener una imagen recuperada mucho mejor que la imagen de partida, pero que aún así no logro reproducir exactamente la imagen a recuperar debido al bajo período espacial del muestreo. Recuperación utilizando la transformada Para recuperar la imagen a partir de la transformada de Fourier, el procedimiento que se realizó es el siguiente: X Leer la imagen en MATLAB utilizando el comando imread(). X Realizar la transformada de Fourier en dos dimensiones de la imagen utilizando el comando fft2(). X Construir el filtro deseado que en nuestro caso en una dimensión corresponden a las siguientes funciones. Filtro cuadrado y = rect x ancho (1) Filtro gaussiano 1 y =0.5 1 + cos 2πx ancho (2) Filtro de pirámide y = 2 ancho (x + ancho/2) si x< 0 y = - 2 ancho (x - ancho/2) si x> 0 (3) Filtro gaussiano 2 y =0.54 + 0.46 cos 2πx ancho (4) Donde "ancho" denota el ancho del filtro * [email protected] 133855 1

Upload: miller-murillo

Post on 15-Jan-2016

24 views

Category:

Documents


0 download

DESCRIPTION

Optica de Fourier MATLABAnálisis espectral

TRANSCRIPT

Recuperación de imagen a partir de sutransformada y la convolución con filtros

Miller Mateo Murillo ∗

Óptica de Fourier, Departamento de FísicaUniversidad Nacional de Colombia

Bogotá

09/03/2015

ResumenEn el siguiente trabajo se muestran los resultados obtenido en la recuperación de una imagen

muestreada utilizando dos métodos diferentes, uno que utiliza la transformada de Fourier de la imagen yotro que utiliza la operación convolución. Se logró obtener una imagen recuperada mucho mejor que laimagen de partida, pero que aún así no logro reproducir exactamente la imagen a recuperar debido al

bajo período espacial del muestreo.

Recuperación utilizando la transformada

Para recuperar la imagen a partir de la transformada de Fourier, el procedimiento que se realizó es el siguiente:

X Leer la imagen en MATLAB utilizando el comando imread().

X Realizar la transformada de Fourier en dos dimensiones de la imagen utilizando el comando fft2().

X Construir el filtro deseado que en nuestro caso en una dimensión corresponden a las siguientes funciones.

Filtro cuadradoy = rect

( x

ancho

)(1)

Filtro gaussiano 1

y = 0.5

[1 + cos

(2πx

ancho

)](2)

Filtro de pirámide

y =2

ancho(x+ ancho/2) si x < 0 y = − 2

ancho(x− ancho/2) si x > 0 (3)

Filtro gaussiano 2

y = 0.54 + 0.46 cos

(2πx

ancho

)(4)

Donde "ancho" denota el ancho del filtro∗[email protected] 133855

1

2

X Centrar la transformada de fourier con el comando fftshift().

X Multiplicar la transformada de Fourier de la imagen por el filtro que se desea aplicar.

X Realizar la transformada inversa de Fourier del resultado obtenido anteriormente.

Los resultados obtenidos realizando el procedimiento anterior son los siguientes:

Figura 1: Imagen a recuperar con un muestreo de 6 píxeles.

3

Figura 2: Imágenes recuperadas utilizando filtros cuadrado y gaussiano 1 de ancho 80 píxeles

4

Figura 3: Imágenes recuperadas utilizando filtros pirámide y sinc de ancho 80 píxeles

5

Figura 4: Imagen recuperada utilizando el filtro gaussiano 2 de ancho 80 píxeles

Se seleccionó que el filtro tuviera un ancho de 80 píxeles suponiendo que el muestreo era el ideal según elteorema de Nyquist. Para observar si el muestreo nos puede permitir recuperar con exactitud la imagenoriginal, podemos observar la siguiente figura en la cual se muestra un perfil de la transformada de Fourierde la imagen muestreada

6

Figura 5: Perfil de la magnitud de la transformada de Fourier de la imagen muestreada.

En la imagen anterior se observa que el muestreo tiene un período espacial muy bajo por lo cual los espectrosse encuentran superpuestos en la transformada. Por lo tanto no es posible recuperar con exactitud la imagenque se muestreo.

Recuperación utilizando convolución

A partir de lo que se realizó en la recuperación con la transformada, para recuperar la imagen utilizando laconvolución lo que se realizó fue la convolución entre la imagen muestreada y el filtro deseado utilizando lafunción conv2(). Los filtros que fueron utilizados son de ancho 6 píxeles debido a que la imagen muestreadatiene ese período.

7

Figura 6: Imagen recuperadas utilizando filtro cuadrado de ancho 6 píxeles

Figura 7: Imagen recuperada utilizando filtro gaussiano 1 de ancho 6 píxeles

8

Figura 8: Imagen recuperada utilizando filtro pirámide de ancho 6 píxeles

Figura 9: Imagen recuperad utilizando filtro sinc de ancho 6 píxeles

9

Figura 10: Imagen recuperada utilizando filtro gaussiano 2 de ancho 6 píxeles

Anexo

Al ejecutar el programa se mostrarán dos imagenes una correspondiente a la recuperación de la imagen apartir de la transformada incluyendo la forma de los filtros y una segunda imagen que contiene las imagenesrecuperadas a partir de la convolución. Para que la recuperación a partir de la transformada se observe bienla variable ancho debe valer alrededor de 80 píxeles y para que la recuperación a partir de la convolución seobserve bien, la variable ancho debe valer alrededor de 6 píxeles.

Códigopi=3.1415926;a=2; % Filas para el subplotb=5; % Columnas para el subplotancho=80; %Ancho del filtro

%LECTURA DE LA IMAGEN Y TRANSFORMADAf=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 filtrofilter=zeros(480);min=240-ancho/2;max=240+ancho/2;

10

filter(min:max,min:max)=1;

%Filtro gaussiano 1filter1=ones(480);x=zeros(1,480);%ancho=80; %Ancho de la gaussianafor ii=1:480

dist=abs(ii-240);if dist>ancho/2

continue;endx(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 unosfor ii=1:480

filter1(ii,1:480)=filter1(ii,1:480).*x;end

for ii=1:480filter1(1:480,ii)=filter1(1:480,ii)’.*x;

end

%Filtro piramidefilter2=ones(480);y=zeros(1,480);%ancho=80; %Ancho de la piramide

for ii=1:480dist=abs(ii-240);if dist>ancho/2 %Condicion para utilizar unicamente el maximo principal

continue;endm=2/ancho;y(ii)=m*(ii-(240-ancho/2)); %La funcion me centra el filtro en 240if ii>240y(ii)=m*((240+ancho/2)-ii);end

end

%Estos dos for me forman la piramide con la matriz de unosfor ii=1:480

filter2(ii,1:480)=filter2(ii,1:480).*y;end

for ii=1:480filter2(1:480,ii)=filter2(1:480,ii)’.*y;

end

%filtro sincfilter3=ones(480);%ancho=80; %Ancho de la sinc utilizando solo el maximo principalz=zeros(1,480);for ii=1:480

11

dist=abs(ii-240);arg=2*pi*(ii-240)/ancho;if dist>ancho/2

continue;endz(ii)=(sin(arg))/arg;

endz(240)=1;%Estos dos for me forman la sinc con la matriz de unosfor ii=1:480

filter3(ii,1:480)=filter3(ii,1:480).*z;end

for ii=1:480filter3(1:480,ii)=filter3(1:480,ii)’.*z;

end

%filtro gaussiano 2filter4=ones(480);p=zeros(1,480);

for ii=1:480dist=abs(ii-240);if dist>ancho/2

continue;endp(ii)=0.54+0.46*cos(2*pi*(ii-240)/ancho);

end

%Estos dos for me forman el filtro gaussiano con la matriz de unosfor ii=1:480

filter4(ii,1:480)=filter4(ii,1:480).*p;end

for ii=1:480filter4(1:480,ii)=filter4(1:480,ii)’.*p;

end

%RECUPERACION DE LA IMAGEN A PARTIR DE SU TRANSFORMADA%filtro rectagularR=ifft2(F.*filter);Raux=abs(R);RR=mat2gray(Raux); %mat2gray me transforma la imagen en escala de grises para imprimirla%Filtro gaussiano 1R1=ifft2(F.*filter1);Raux=abs(R1);RR1=mat2gray(Raux);%Filtro piramideR2=ifft2(F.*filter2);Raux=abs(R2);RR2=mat2gray(Raux);%Filtro sincR3=ifft2(F.*filter3);

12

Raux=abs(R3);RR3=mat2gray(Raux);%Filtro gaussiano 2R4=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 tamaño de la grilla de la imagenI=mat2gray(Iaux);%Filtro gaussiano 1Iaux=conv2(mat2gray(f),filter1,’same’);I1=mat2gray(Iaux);%Filtro piramideIaux=conv2(mat2gray(f),filter2,’same’);I2=mat2gray(Iaux);%Filtro sincIaux=conv2(mat2gray(f),filter3,’same’);I3=mat2gray(Iaux);%Filtro gaussiano 2Iaux=conv2(mat2gray(f),filter4,’same’);I4=mat2gray(Iaux);

%IMPRESION IMAGENESfigure;%Impresion filtros%Filtro cuadradocuad=mat2gray(filter);subplot(a,b,1);imshow(cuad);title(’Filtro cuadrado’);%Filtro gaussiano 1gauss=mat2gray(filter1);subplot(a,b,2);imshow(gauss);title(’Filtro gaussiano 1’);%Filtro piramidepira=mat2gray(filter2);subplot(a,b,3);imshow(pira);title(’Filtro piramide’);%Filtro sincfsinc=mat2gray(filter3);subplot(a,b,4);imshow(fsinc);title(’Filtro sinc’);%Filtro gaussiano 2gauss2=mat2gray(filter4);subplot(a,b,5);imshow(gauss2);title(’Filtro gaussiano 2’);

%IMAGEN RECUPERADA CON TRANSFORMADA

13

%RR imagen recuperada rectangulosubplot(a,b,6);imshow(RR);%RR1 imagen recuperada gaussianasubplot(a,b,7);imshow(RR1);%RR2 imagen recuperada piramidesubplot(a,b,8);imshow(RR2);%RR3 imagen recuperada sincsubplot(a,b,9);imshow(RR3);%RR4 imagen recuperada gaussiana 2subplot(a,b,10);imshow(RR4);

%IMAGEN RECUPERADA CON CONVOLUCIONfigure;c=2;d=3;%Filtro cuadradosubplot(c,d,1);imshow(I);title(’Filtro cuadrado’);%Filtro gaussiano 1subplot(c,d,2);imshow(I1);title(’Filtro gaussiano 1’);%Filtro piramidesubplot(c,d,3);imshow(I2);title(’Filtro piramide’);%Filtro sincsubplot(c,d,4);imshow(I3);title(’Filtro sinc’);%Filtro gaussiano 2subplot(c,d,5);imshow(I4);title(’Filtro gaussiano 2’);