mejora de imagen - matlab

22
Universidad Nacional de Córdoba Facultad de Ciencias Exactas Físicas y Naturales Procesamiento de Señales Trabajo Práctico Nº1 -Tema C- Alumno: Maestri, Franco Docentes: Dra. Vera de Payer, Elizabeth del Valle Ing. Armesto, Juana Mgter. Rulloni, Valeria

Upload: franco-maestri

Post on 18-Apr-2015

155 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Mejora de Imagen - Matlab

Universidad Nacional de Córdoba

Facultad de Ciencias Exactas Físicas y Naturales

Procesamiento de Señales

Trabajo Práctico Nº1

-Tema C-

Alumno: Maestri, Franco

Docentes: Dra. Vera de Payer, Elizabeth del Valle Ing. Armesto, Juana Mgter. Rulloni, Valeria

Page 2: Mejora de Imagen - Matlab

Señales Bidimensionales

1. Graficar las señales discretas x1 y x2.

a) x1[n]=3n-2, 0≤n≤4

>>n=[0:1:4];

x1=3n-2;

plot(x1);

b) x2[n]=sin(nπ/3), 0≤n≤6

>>n=[0:1:6];

x2=sin(n*pi/3);

plot(x1);

2.

a) Dar la transforma de Fourier Discreta punto N, con N=6, de x1 y x1.

>>Fx1=fft(x1,6);

Fx1 = 0.0000 -0.0000 - 3.0000i 0.0000 -0.0000 0.0000 -0.0000 + 3.0000i

>>Fx1=fft(x2,6)

Fx1 = 0.0000 -0.0000 - 3.0000i 0.0000 -0.0000 0.0000 -0.0000 + 3.0000i

Page 3: Mejora de Imagen - Matlab

Graficar por separado la parte real e imaginaria de cada una:

>>stem(real(Fx1))

stem(imag(Fx1))

stem(real(Fx2))

stem(imag(Fx2))

M=20

Page 4: Mejora de Imagen - Matlab

M=0

Page 5: Mejora de Imagen - Matlab

c) Pensando en la extensión de la señal x1 a una señal periódica de período N=7, denotada x3,

calcular los coeficientes de la Serie de Fourier:

>>x3=[-2 1 4 7 10 0 0]

fft(x3)

ans =

Columns 1 through 6

20.0000 -17.5831 - 3.3799i 4.7729 - 1.5849i -4.1899 + 5.6182i -4.1899 - 5.6182i 4.7729 +

1.5849i

Column 7

-17.5831 + 3.3799i

d) Calcule la convolución lineal entre x1 y x2.

>>conv(x1,x2)

ans = 0, -1.7321, -0.8660, 4.3301, 11.2583, 15.5885, 4.3301, -9.5263, -14.7224, -8.6603, -0.0000

e) Calcule la convolución circular de 8 puntos de las señales x1 con x2 (denotada por x1*x2). Tenemos que la convolución circular entre x1 y x2 es igual a la antitransformada del producto de

sus respectivas transformadas de Fourier. Para que se cumpla que la convolución circular coincida

con la lineal, se debe cumplir que N≥n+m-2, siendo m y n los elementos de x1 y x2. Para este caso

N≥7+7-2=12. En matlab:

>>convcx1x1=ifft(fft(x1,12).*fft(x2,12))

convcx1x1 =

Columns 1 through 10

-0.0000 -1.7321 -0.8660 4.3301 11.2583 15.5885 4.3301 -9.5263 -14.7224 -8.6603

Columns 11 through 12

0 0

Que son los mismos valores obtenidos en la convolución lineal hecha anteriormente.

Page 6: Mejora de Imagen - Matlab

3. Calcular el producto de convolución 2-D de las imágenes representadas por las matrices A y B >> A=[3,1,-1;0,2,1]; B=[3,2,2;1,1,2;0,2,1]; conv2(A,B); ans = 9 9 5 0 -2 3 10 13 7 0 0 8 8 4 1 0 0 4 4 1 4. Genere y grafique una imagen con 7 bandas verticales con niveles de gris decrecientes

del blanco al negro. >>b=ones(32);

linea=[0.*b, .2.*b, .4.*b, .6.*b, .8.*b, b];

bandas=[linea;linea;linea;linea;linea];

imshow(bandas)

5. Obtenga la DFT 2-D de la imagen del ejercicio 3 y grafique su valor absoluto, el valor

absoluto centrado y una transformación logarítmica de esta última. >>c=conv2(A,B);

C=fftshift(fft(c));

subplot(1,3,1), imshow(abs(C)), title Abs;

subplot(1,3,2), imshow(abs(fftshift(c))), title Centrada;

subplot(1,3,3), imshow(0.2*log(1+abs(fftshift(c)))), title Log;

6. Forme una colección de las 3 imágenes graficadas en el ejercicio 5.

Page 7: Mejora de Imagen - Matlab

Mejora de Imagen

1. Dada las imágenes Degradé horizontal de gris y Damero en negro y gris, aplique la

transformada de Fourier de dichas imágenes una transformación logarítmica conveniente para visualizarla correctamente. >> I=checkerboard(8);

b=ones(32); linea=[0.*b, .2.*b, .4.*b, .6.*b, .8.*b, b];

bandas=[linea;linea;linea;linea;linea];

subplot(1,2,1), imshow(0.2*log(1+abs(fftshift(fft(I))))), title Damero;

subplot(1,2,2), imshow(0.2*log(1+abs(fftshift(fft(bandas))))), title Bandas;

2. Elija una imagen y haga las siguientes transformaciones:

>>G=imread(‘grand_i.jpg');

GG=rgb2gray(G);

imshow(GG);

Page 8: Mejora de Imagen - Matlab

a)Conviértala a su negativo:

>> GGN=imadjust(GG,[0 1],[1 0],1);

imshow(GGN)

b)Aclárela

>> GGA=imadjust(GG,[], [0.2 1],0.4);

imshow(GGA);

c) Oscurézcala

>> GGO=imadjust(GG,[],[],1.6);

imshow(GGO);

Page 9: Mejora de Imagen - Matlab

d) Realce niveles intermedios de gris

>> GGG=imadjust(GG,[.45 .55],[0.7 0.8], 1);

imshow(GGG);

Histogramas:

>> subplot(2,3,1), imhist(GG), title 'Blanco y Negro'; subplot(2,3,2), imhist(GGN), title 'Negativo';

subplot(2,3,3), imhist(GGA), title 'Aclarada'; subplot(2,3,4), imhist(GGO), title 'Oscurecida';

subplot(2,3,5), imhist(GGG), title 'Realce de niveles medios';

Page 10: Mejora de Imagen - Matlab

3. Ecualice los histogramas de los ejercicios anteriores. Muestre los resultados obtenidos comparando con las imágenes originales. >> GGEQ=histeq(GG); GGNEQ=histeq(GGN); GGAEQ=histeq(GGA); GGOEQ=histeq(GGO); GGGEQ=histeq(GGG); >>subplot(2,3,1), imhist(GGEQ), title 'Blanco y Negro'; subplot(2,3,2), imhist(GGNEQ), title 'Negativo'; subplot(2,3,3), imhist(GGAEQ), title 'Aclarada'; subplot(2,3,4), imhist(GGOEQ), title 'Oscurecida'; subplot(2,3,5), imhist(GGGEQ), title 'Realce de niveles medios';

Page 11: Mejora de Imagen - Matlab

Las imágenes, luego de la ecualización de histograma, resultan: >>subplot(2,3,1), imshow(GGEQ), title 'Blanco y Negro'; subplot(2,3,2), imshow(GGNEQ), title 'Negativo'; subplot(2,3,3), imshow(GGAEQ), title 'Aclarada'; subplot(2,3,4), imshow(GGOEQ), title 'Oscurecida'; subplot(2,3,5), imshow(GGGEQ), title 'Realce de niveles medios'; subplot(2,3,6), imshow(GG), title 'Original';

Page 12: Mejora de Imagen - Matlab

4. Diseñe dos filtros espaciales y aplíquelos a las imágenes de los ejercicios anteriores.

Muestre los resultados obtenidos.

>> F1=1/9*[1 1 1;0 0 0;-1 -1 -1];

>> subplot(2,3,1), imshow(filter2(F1,GG)), title 'Blanco y Negro';

subplot(2,3,2), imshow(filter2(F1,GGN)), title 'Negativo';

subplot(2,3,3), imshow(filter2(F1,GGA,'full')), title 'Aclarada';

subplot(2,3,4), imshow(filter2(F1,GGO,'full')), title 'Oscurecida';

subplot(2,3,5), imshow(filter2(F1,GGG,'full')), title 'Realce de niveles medios';

subplot(2,3,6), imshow(GG), title 'Original';

Page 13: Mejora de Imagen - Matlab

>>F2=(1/3000)*[1 1 1; 1 1 1;1 1 1];

>>subplot(2,3,1), imshow(filter2(F2,GG)), title 'Blanco y Negro';

subplot(2,3,2), imshow(filter2(F2,GGN)), title 'Negativo';

subplot(2,3,3), imshow(filter2(F2,GGA,'full')), title 'Aclarada';

subplot(2,3,4), imshow(filter2(F2,GGO,'full')), title 'Oscurecida';

subplot(2,3,5), imshow(filter2(F2,GGG,'full')), title 'Realce de niveles medios';

subplot(2,3,6), imshow(GG), title 'Original';

Page 14: Mejora de Imagen - Matlab

Restauración de la Imagen

1) Dada la imagen Niveles de gris, contaminar

con dos tipos y niveles de ruido.

>>b=ones(32);

linea=[0.*b, .2.*b, .4.*b, .6.*b, .8.*b, b];

bandas=[linea;linea;linea;linea;linea];

imshow(bandas)

>>Isyp1=imnoise(bandas,'salt & pepper', 0.05);

Isyp2=imnoise(bandas,'salt & pepper', 0.1);

Ig1=imnoise(bandas,'gaussian',0.01);

Ig2=imnoise(bandas,'gaussian',0.1);

>>subplot(2,2,1),imshow(Isyp1),title 'Ruido Salt & Pepper bajo'

subplot(2,2,2),imshow(Isyp2),title 'Ruido Salt & Pepper alto'

subplot(2,2,3),imshow(Ig1),title 'Ruido Gaussiano bajo'

subplot(2,2,4),imshow(Ig2),title 'Ruido Gaussiano alto'

Page 15: Mejora de Imagen - Matlab

2) Utilice dos filtros de valor medio y el filtro de mediana.

Filtro de valor medio Nº1:

>>Isyp1fvm=ordfilt2(Isyp1,5,ones(3));

Isyp2fvm=ordfilt2(Isyp2,5,ones(3));

Ig1fvm=ordfilt2(Ig1,5,ones(3));

Ig2fvm=ordfilt2(Ig2,5,ones(3));

>>subplot(2,2,1),imshow(Isyp1fvm),title 'Filtro de Valor Medio, Salt & Pepper bajo'

subplot(2,2,2),imshow(Isyp2fvm),title 'Filtro de Valor Medio, Salt & Pepper alto'

subplot(2,2,3),imshow(Ig1fvm),title 'Filtro de Valor Medio, Gaussiano bajo'

subplot(2,2,4),imshow(Ig2fvm),title 'Filtro de Valor Medio, Gaussiano alto'

Page 16: Mejora de Imagen - Matlab

Filtro de Valor medio Nº2:

>>Isyp1fvm=ordfilt2(Isyp1,13,ones(5));

Isyp2fvm=ordfilt2(Isyp2,13,ones(5));

Ig1fvm=ordfilt2(Ig1,13,ones(5));

Ig2fvm=ordfilt2(Ig2,13,ones(5));

>>subplot(2,2,1),imshow(Isyp1fvm),title 'Filtro de Valor Medio, Salt & Pepper bajo'

subplot(2,2,2),imshow(Isyp2fvm),title 'Filtro de Valor Medio, Salt & Pepper alto'

subplot(2,2,3),imshow(Ig1fvm),title 'Filtro de Valor Medio, Gaussiano bajo'

subplot(2,2,4),imshow(Ig2fvm),title 'Filtro de Valor Medio, Gaussiano alto'

Page 17: Mejora de Imagen - Matlab

Filtro de Mediana:

>>Isyp1fmed=medfilt2(Isyp1);

Isyp2fmed=medfilt2(Isyp2);

Ig1fmed=medfilt2(Ig1);

Ig2fmed=medfilt2(Ig2);

>>subplot(2,2,1),imshow(Isyp1fmed),title 'Filtro de Mediana, Salt & Pepper bajo'

subplot(2,2,2),imshow(Isyp2fmed),title 'Filtro de Mediana, Salt & Pepper alto'

subplot(2,2,3),imshow(Ig1fmed),title 'Filtro de Mediana, Gaussiano bajo'

subplot(2,2,4),imshow(Ig2fmed),title 'Filtro de Mediana, Gaussiano alto'

3) Para el caso de las bandas de grises, los métodos de mejora de imagen no han presentado

ninguna diferencia notable. Para un caso diferente, según sea el tipo de ruido, dará

mejores resultados utilizar un filtro u otro.

Page 18: Mejora de Imagen - Matlab

4) Repetir los pasos anteriores para la imagen Checkerboard.

Obtener imagen:

>>I=checkerboard(8);

imshow(I)

Añadir Ruido:

>>Isyp1=imnoise(I,'salt & pepper', 0.05);

Isyp2=imnoise(I,'salt & pepper', 0.1);

Ig1=imnoise(I,'gaussian',0.01);

Ig2=imnoise(I,'gaussian',0.1);

>>subplot(2,2,1),imshow(Isyp1),title 'Ruido Salt & Pepper bajo'

subplot(2,2,2),imshow(Isyp2),title 'Ruido Salt & Pepper alto'

subplot(2,2,3),imshow(Ig1),title 'Ruido Gaussiano bajo'

subplot(2,2,4),imshow(Ig2),title 'Ruido Gaussiano alto'

Page 19: Mejora de Imagen - Matlab

Filtro de Valor medio Nº1:

>>Isyp1fvm=ordfilt2(Isyp1,5,ones(3));

Isyp2fvm=ordfilt2(Isyp2,5,ones(3));

Ig1fvm=ordfilt2(Ig1,5,ones(3));

Ig2fvm=ordfilt2(Ig2,5,ones(3));

>>subplot(2,2,1),imshow(Isyp1fvm),title 'Filtro de Valor Medio, Salt & Pepper bajo'

subplot(2,2,2),imshow(Isyp2fvm),title 'Filtro de Valor Medio, Salt & Pepper alto'

subplot(2,2,3),imshow(Ig1fvm),title 'Filtro de Valor Medio, Gaussiano bajo'

subplot(2,2,4),imshow(Ig2fvm),title 'Filtro de Valor Medio, Gaussiano alto'

Page 20: Mejora de Imagen - Matlab

Filtro de Valor medio Nº2:

>>Isyp1fvm=ordfilt2(Isyp1,13,ones(5));

Isyp2fvm=ordfilt2(Isyp2,13,ones(5));

Ig1fvm=ordfilt2(Ig1,13,ones(5));

Ig2fvm=ordfilt2(Ig2,13,ones(5));

>>subplot(2,2,1),imshow(Isyp1fvm),title 'Filtro de Valor Medio, Salt & Pepper bajo'

subplot(2,2,2),imshow(Isyp2fvm),title 'Filtro de Valor Medio, Salt & Pepper alto'

subplot(2,2,3),imshow(Ig1fvm),title 'Filtro de Valor Medio, Gaussiano bajo'

subplot(2,2,4),imshow(Ig2fvm),title 'Filtro de Valor Medio, Gaussiano alto'

Page 21: Mejora de Imagen - Matlab

Filtro de Mediana:

>>Isyp1fmed=medfilt2(Isyp1);

Isyp2fmed=medfilt2(Isyp2);

Ig1fmed=medfilt2(Ig1);

Ig2fmed=medfilt2(Ig2);

>>subplot(2,2,1),imshow(Isyp1fmed),title 'Filtro de Mediana, Salt & Pepper bajo'

subplot(2,2,2),imshow(Isyp2fmed),title 'Filtro de Mediana, Salt & Pepper alto'

subplot(2,2,3),imshow(Ig1fmed),title 'Filtro de Mediana, Gaussiano bajo'

subplot(2,2,4),imshow(Ig2fmed),title 'Filtro de Mediana, Gaussiano alto'

Para este nuevo caso se encontró un desempeño muy similar para el primer filtro de valor

medio y el filtro de mediana, pero se encontró una gran diferencia en el segundo filtro de valor

medio utilizado. Para este último la calidad obtenida no fue tan buena como las demás, ya que

este utiliza una matriz de unos más grande para realizar el filtrado, por lo que al calcular el

promedio de los valores se observan los resultados mostrados anteriormente.

Page 22: Mejora de Imagen - Matlab

5) Durante la adquisición de una imagen, sufre un movimiento lineal uniforme en la dirección

vertical y luego otro en dirección horizontal.

>>I=checkerboard(8);

H=fspecial('motion',5,5);

Imov=imfilter(I,H);

>>subplot(1,2,1), imshow(I), title 'Tablero';

subplot(1,2,2), imshow(Imov), title 'Imagen Movida';

6)Utilice filtrado inverso para recuperar la imagen

>>whos I

Name Size Bytes Class

I 64x64 32768 double array

Grand total is 4096 elements using 32768 bytes

>>FH=fft2(H,64,64);

FI=fft2(I,64,64);

Ifi=ifft2(FI./(FH+1));

>> imshow(Ifi), title 'Imagen Recuperada';