Sei sulla pagina 1di 7

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,j1)+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');

Potrebbero piacerti anche