Señales aleatorias y filtrado de imágenes
Trabajo realizado por:
- David Cabrero Sañudo
- Ainara Contreras Echebarria
- Roberto Rodríguez Gallego
Contenido
- 1 Procesamiento de imágenes (Oversampling)
- 1.1 Generar un filtro Low pass que contenga 2N + 1 elementos
- 1.2 Aplicar una ventana de Hamming al filtro
- 1.3 Realizar un filtro Low-Pass en dos dimensiones tomando variables separadas para (x) e (y)
- 1.4 Aplicar un factor de ampliación a una imagen
- 1.5 Aplicar un factor de ampliación a una imagen, aplicando un filtro con la ventana de Hamming
- 1.6 Multiplicar el tamaño de la imagen lena por cuatro y aplicar un filtro con 2N + 1 valores siendo N=10
- 1.7 Realizar lo mismo que en el ejercicio anterior pero con N=1
- 1.8 Ahora ampliamos la imagen por ocho y el número de elementos del filtro lo igualamos a diez
1 Procesamiento de imágenes (Oversampling)
El proceso de Oversampling consiste en aumentar el número de pixeles de la imagen original.
1.1 Generar un filtro Low pass que contenga 2N + 1 elementos
En la imagen de la izquierda vemos 15 puntos ya que el valor de N introducido a sido de 7 (2N + 1 = 15) y en la imagen de la derecha podemos ver el filtro en tres dimensiones.
1.2 Aplicar una ventana de Hamming al filtro
Igual que para el filtro de Low-Pass vemos que en la imagen de la izquierda nos aparecen 15 puntos y en la imagen de la derecha vemos la representación en tres dimensiones. Al aplicarle la ventana de Hamming lo que conseguimos es amortiguar las altas frecuencias y amoldarse mejor a las bajas frecuencias.
1.3 Realizar un filtro Low-Pass en dos dimensiones tomando variables separadas para (x) e (y)
La aplicación de un filtro de frecuencia baja tiene el efecto de eliminar frecuencias altas y medias dando como resultado una imagen que tiene un menor contraste, una apariencia más suave. Es por esto que este proceso es también denominado “suavización de imágenes” (image smoothing) y al filtro de frecuencia baja se le llama filtro de suavizado o de homogeneización (smoothing filter).
%N es el número de elementos del filtro
%M es la proporción de frecuencias que queremos eliminar
Nx=7;
Mx=4;
Ny=7;
My=4;
% Filtros para x e y
h1=filtrolp(Nx,Mx);
h2=filtrolp(Ny,My);
% Filtros para x e y (hamming)
h1m=filtrolph(Nx,Mx);
h2m=filtrolph(Ny,My);
% filtro dos dimensiones low pass
subplot(1,2,1)
h=h1'*h2;
surf(h)
title('low pass')
% filtro dos dimensiones Hamming
subplot(1,2,2)
hm=h1m'*h2m;
surf(hm)
title('Hamming')
% dtft con low pass
DTFTh=fftshift(abs(fft2(h,2^6,2^6)));
n1=2^6; n2=2^6; p1=1/n1; p2=1/n2;
tau1=[-1/2:p1:1/2-p1];
tau2=[-1/2:p2:1/2-p2];
[tt1,tt2]=meshgrid(tau1,tau2)
figure(2)
subplot(1,2,1)
surf(tt1,tt2,DTFTh)
title('DTFT low pass')
%dtft con hamming
DTFThm=fftshift(abs(fft2(hm,2^6,2^6)));
subplot(1,2,2)
surf(tt1,tt2,DTFThm)
title('DTFT Hamming')
1.4 Aplicar un factor de ampliación a una imagen
El primer paso será añadir M-1 ceros entre cada dos valores de la muestra inicial y luego aplicarle el filtro de Low-Pass.
function z = interM(imagen,N,M)
[a,b]=size(imagen);
%matriz de ceros
imagen2=zeros(a*M,b*M);
imagen2(1:M:a*M,1:M:b*M)=imagen(1:a,1:b);
% Filtros para x e y
h1=filtrolp(N,M);
h=h1'*h1;
imagenfil=filter2(h,imagen2);
imagesc(imagenfil);
colormap('gray');
axis('image');
title('filtrada ')
figure(2)
imagesc(imagen2);
colormap('gray');
axis('image');
title('con ceros ')
En la imagen vemos como cada dos pixeles de la imagen original a intercalado un valor nulo, ya que hemos utilizado M=2.
Después de aplicar el filtro de Low Pass el resultado es el siguiente:
Vemos que en los pixeles donde añadió un cero esta más oscuro, pero queda mucho más suavizado que antes de aplicarle el filtro.
1.5 Aplicar un factor de ampliación a una imagen, aplicando un filtro con la ventana de Hamming
1.6 Multiplicar el tamaño de la imagen lena por cuatro y aplicar un filtro con 2N + 1 valores siendo N=10
%leer la imagen
lena=imread('lena.jpg','jpeg');
%multiplicar por 4 la imagen
N=10;
M=4;
figure (1)
h=1/M;
lena4=lena(1:h:512,1:h:512);
imagesc(lena4);
colormap('gray');
axis('image');
title('imagen x 4')
%aplicar un filtro low pass
theta=pi*[1:N];
h=sin(2*theta/(2*M))./theta;
h=[fliplr(h) 1/M h];
h=h/(sum(h))*M;
hb2=h'*h
lenafil=filter2(hb2,lena4);
%anadir ventana Hamming
theta=pi*[1:N];
h=sin(2*theta/(2*M))./theta;
hh=h.*(0.54+0.46*cos(pi*theta/N));
%simetrizamos
hh=[fliplr(hh) 1/M hh];
hh=hh/(sum(hh))*M; % evitamos que el filtro amplifique la senal
z=hh;
hb3=hh'*hh;
lenafil2=filter2(hb3,lena4);
%dibujar
figure(2)
subplot(1,2,1)
imagesc(lenafil);
colormap('gray');
axis('image');
title('low pass')
subplot(1,2,2)
imagesc(lenafil2);
colormap('gray');
axis('image');
title('hamming')
En la imagen de la izquierda vemos la imagen ampliada, es decir, que paso de tener (512 x 512) pixeles a tener (2048 x 2048) pixeles. En la imagen de la derecha vemos primero la imagen aplicándole el filtro de Low-Pass y en la segunda imagen aplicándole la ventana de Haming.
En la siguiente imagen hemos ampliado una zona para poder apreciar mejor cuales son los resultados del filtro, y vemos que aplicándole el filtro Low-Pass la imagen se ve mejor y al añadirle la ventana de Hamming que lo que hace es suavizar la imagen.
1.7 Realizar lo mismo que en el ejercicio anterior pero con N=1
Vemos que al ser menor el número de elementos del filtro, es decir, el valor de N, la imagen filtrada se parce más a imagen original.
1.8 Ahora ampliamos la imagen por ocho y el número de elementos del filtro lo igualamos a diez
Al aumentar más el tamaño de la imagen, se vera más pixelada pero vemos que manteniendo el número de elementos del filtro el resultado es similar al que obtuvimos al aumentar la imagen por 4.



