diseño de filtros en matlab
DESCRIPTION
Diseño de filtros para procesamiento de imágenes mediante Matlab, código implementado en Matlab.TRANSCRIPT
-
Diseo de filtros en Matlab
Filtro a la Media
El programa est contenido en el archivo filtromedia.m adjunto a este documento. Los resultados
obtenidos para una imagen en particular, se muestran en la figura 1.1.
Figura 1.1. Filtro a la media
Filtro a la Mediana
El programa est contenido en el archivo filtromediana.m adjunto a este documento. Los resultados
obtenidos para una imagen en particular, se muestran en las figura 1.2.
Figura 1.2. Filtro a la mediana
Filtro a la Gaussiano
El programa est contenido en el archivo filtrogaussiano.m adjunto a este documento. Los resultados
obtenidos para una imagen en particular, se muestran en las figura 1.3.
-
Figura 1.3. Filtro Gaussiano
Filtro Laplaciano
El programa est contenido en el archivo filtrolaplaciano.m adjunto a este documento. Los resultados
obtenidos para una imagen en particular, se muestran en las figura 1.4.
Figura 1.4. Filtro Laplaciano
Filtro Highboost
El programa est contenido en el archivo Highboost.m adjunto a este documento. Los resultados
obtenidos para una imagen en particular, se muestran en las figura 1.5.
Figura 1.5. Filtro Highboost
Anexos
%Filtro a la Media, la mascara usada es una matriz de mxm con m impar clc clear all close all I=imread(input('Introduzca nombre o ubicacin de la imagen:', 's'));%G en
I l=size(I); %checamos la dimensin por si es imagen en color a=length(l); if a>2 mat=rgb2gray(I); %Convertimos a escala de grises else mat=I; end opc=0; while(opc==0)
-
dim=input('La matriz filtro es de dimension mxm con m impar,Defina
m:'); if(mod(dim,2) ~= 0) opc=1; end end %generamos la matriz mascara mask=ones(dim,dim); mask=(mask/(dim^2)); [r c]=size(mat); %obtenemos num de pixeles ren y col [rmask cmask]=size(mask); rcadd=fix(rmask/2); for i=1:rcadd for j=1:1:c renadd(i,j)=0; for j=1:(r+(2*rcadd)) coladd(j,i)=0; end end end mata=[coladd [renadd;mat;renadd] coladd]; %para recorrer la mask en la matriz aumentada ren=r-1; col=c-1; for k=0:ren for l=0:col acum=0; for i=1:rmask; for j=1:cmask; acum=acum+((mata(i+k,j+l))*(mask(i,j))); end end mat(k+1,l+1)=acum; end end mat=round(mat); %presentando el resultado I es la imagen original,mat contiene el
resultado subplot(2,1,1), subimage(I), title('Imagen original'); subplot(2,1,2), subimage(mat), title(['Imagen con Filtro a la Media mask
de orden m= ',num2str(dim),]);
%Filtro a la mediana clc clear all close all I=imread(input('Introduzca nombre o ubicacin de la imagen:', 's'));%G en
I l=size(I); %checamos la dimensin por si es imagen en color a=length(l); if a>2 mat=rgb2gray(I); %Convertimos a escala de grises else mat=I;
-
end opc=0; while(opc==0) dim=input('La matriz filtro es de dimension mxm con m impar,Defina
m:'); if(mod(dim,2) ~= 0) opc=1; end end %generamos la matriz mascara mask=[1:dim^2]; [r c]=size(mat); %obtenemos num de pixeles ren y col rmask=dim; cmask=dim; rcadd=fix(rmask/2); for i=1:rcadd for j=1:1:c renadd(i,j)=0; for j=1:(r+(2*rcadd)) coladd(j,i)=0; end end end %agregamos renglones y columnas a la matriz de la imagen original mata=[coladd [renadd;mat;renadd] coladd]; %para obtener la mediana de mascara en la matriz aumentada ren=r-1; col=c-1; for k=0:ren for l=0:col m=1; for i=1:rmask; for j=1:cmask; mask(m)=mata(i+k,j+l); m=m+1; end end %mat(k+1+rcadd,l+1+rcadd)=acum %calculamos la mediana de la mask, ordenamos y extraemos el valor
m mask=sort(mask); mat(k+1,l+1)=mask(round(dim^2/2)); end end %presentando el resultado I es la imagen original,mat contiene el
resultado subplot(2,1,1), subimage(I), title('Imagen original'); subplot(2,1,2), subimage(mat), title(['Imagen con Filtro a la Mediana
mask de orden m= ',num2str(dim),]);
% Filtrado mediante Laplaciano clc clear all close all
-
I=imread(input('Introduzca nombre o ubicacin de la imagen:', 's'));%G en
I l=size(I); %checamos la dimensin por si es imagen en color a=length(l); if a>2 mat=rgb2gray(I); %Convertimos a escala de grises else mat=I; end %para la matriz mascara % mask=[0 1 0;1 -4 1;0 1 0]; [r c]=size(mat); %obtenemos num de pixeles ren y col % Calculamos la imagen con laplaciano para la mascara de 3x3 for i=2:r-1 for j=2:c-1 matl(i,j)=-4*mat(i,j)+mat(i-1,j)+mat(i,j-
1)+mat(i,j+1)+mat(i+1,j); end end %presentando el resultado I es la imagen original,mat contiene el
resultado subplot(3,1,1), subimage(I), title('Imagen original'); subplot(3,1,2), subimage(matl), title('Imagen con Filtro Laplaciano');
%Filtro Gaussiano %Se crea la mascara a partir de la varianza y se hace la convolucion clc clear all close all I=imread(input('Introduzca nombre o ubicacin de la imagen:', 's'));%G en
I l=size(I); %checamos la dimensin por si es imagen en color a=length(l); if a>2 mat=rgb2gray(I); %Convertimos a escala de grises else mat=I; end opc=0; while(opc==0) var=input('La mascara Gaussiana se genera a partir de la varianza,
defina:'); if(var >= 0) opc=1; end end %generamos la matriz mascara Gaussiana dim=round(6*sqrt(2*(var+(var/10)))); if(mod(dim,2)==0) dim=dim-1; end mask=zeros(dim,dim); pc= round(dim/2); acum=0; for i=1:dim
-
for j=1:dim mask(i,j)=exp(-((((pc-i)^2)+((pc-j)^2))/(2*var))); acum=acum+mask(i,j); end end mask=mask/acum; %aqui esta la mascara Gaussiana [r c]=size(mat); %obtenemos num de pixeles ren y col rmask=dim; cmask=dim; rcadd=fix(rmask/2); for i=1:rcadd for j=1:1:c renadd(i,j)=0; for j=1:(r+(2*rcadd)) coladd(j,i)=0; end end end mata=[coladd [renadd;mat;renadd] coladd]; %para recorrer la mask en la matriz aumentada ren=r-1; col=c-1; for k=0:ren for l=0:col acum=0; for i=1:rmask; for j=1:cmask; acum=acum+((mata(i+k,j+l))*(mask(i,j))); end end mat(k+1,l+1)=acum; end end mat=round(mat); %presentando el resultado I es la imagen original,mat contiene el
resultado subplot(2,1,1), subimage(I), title('Imagen original'); subplot(2,1,2), subimage(mat), title(['Imagen con Filtro Gaussiano,
varianza= ',num2str(var),]);
%Unsharpening higboost clc clear all close all I=imread(input('Introduzca nombre o ubicacin de la imagen:', 's'));%G en
I l=size(I); %checamos la dimensin por si es imagen en color a=length(l); if a>2 mat=rgb2gray(I); %Convertimos a escala de grises else mat=I; end D=mat;
-
HB=mat; [r c]=size(mat); % Promediado con mascara de 3x3 for i=2:r-1 for j=2:c-1 D(i,j)=sum(sum(mat((i-1):(i+1),(j-1):(j+1)))); D(i,j)= round(D(i,j)/9); end end unsharp=mat-D; HB=round(0.5*mat)+unsharp; %presentando el resultado I es la imagen original,mat contiene el
resultado subplot(3,1,1), subimage(I), title('Imagen original'); subplot(3,1,2), subimage(unsharp), title('Imagen con Filtro Unsharp'); subplot(3,1,3), subimage(HB), title('Imagen con Filtro High Boost');