Instituto Politécnico Nacional Unidad Profesional Interdisciplinarias en Ingeniería y Tecnologías
Avanzadas
Practica 9: Filtro Pasa Alta, Pasa Baja y Sharpen
Autor: Moncayo Bravo Pedro Alan
Antecedentes Teóricos:
Para el caso de un filtro pasa bajas, su efecto es de suavizar (blur-smooth) una imagen. Este
procedimiento se puede llevar a cabo mediante la utilización de filtros espaciales, llamados
máscaras, kernels, plantillas y ventanas. Existe una correspondencia 1 a 1 entre los filtros
espaciales y los del dominio de la frecuencia. Sin embargo los primeros son más versátiles.
La mayoría de los filtros usan una matriz de convolución. Con el filtro «matriz de convolución», si
tiene imaginación, puede crear filtros personalizados. Convolución es el tratamiento de una matriz
por otra que se llama “kernel”.
El filtro matriz de convolución usa una primera matriz que es la imagen que será tratada. La
imagen es una colección bidimensional de píxeles en coordenada rectangular. El kernel usado
depende del efecto deseado.
GIMP usa matrices 5x5 o 3x3. Se considerarán sólo las matrices 3x3, son las más usadas y son
suficiente para los efectos deseados. Si todos los valores del borde de un kernel se seleccionan a
cero, el sistema la considerará como una matriz 3x3.
El filtro examina, sucesivamente, cada píxel de la imagen. Para cada uno de ellos, que se
llamará “píxel inicial”, se multiplica el valor de este píxel y los valores de los 8 circundantes por el
valor correspondiente del kernel. Entonces se añade el resultado, y el píxel inicial se regula en este
valor resultante final.
Codigo en MATLAB
function pdifil9
close all; clear all; clc;
color=imread('butterfly.jpg');
figure
I=rgb2gray(color);
g=double(I);
subplot(1,1,1);
imshow(I);
title('imagen original en gris');
[x,y,z]=size(I);
ker1=zeros(size(I));%kernel
ker2=zeros(size(I));% smooth
ker3=zeros(size(I));
ker4=zeros(size(I));
ker5=zeros(size(I));
for i=2:x-1
for j=2:y-1
ker1(i,j)=(0*(g(i-1,j-1)))+((1/16)*(g(i,j-1)))+(0*(g(i+1,j-
1)))+((1/16)*(g(i-
1,j)))+(0*(g(i,j)))+((1/16)*(g(i+1,j)))+(0*(g(i+1,j+1)))+((1/16)*(g(i,j+1
)))+(0*(g(i-1,j+1)));
ker2(i,j)=((1/16)*(g(i-1,j-1)))+((2/16)*(g(i,j-
1)))+((1/16)*(g(i+1,j-1)))+((2/16)*(g(i-
1,j)))+((4/16)*(g(i,j)))+((2/16)*(g(i+1,j)))+((1/16)*(g(i+1,j+1)))+((2/16
)*(g(i,j+1)))+((1/16)*(g(i-1,j+1)));
ker3(i,j)=((1/12)*(g(i-1,j-1)))+((1/12)*(g(i,j-
1)))+((1/12)*(g(i+1,j-1)))+((1/12)*(g(i-
1,j)))+((1/12)*(g(i,j)))+((1/12)*(g(i+1,j)))+((1/12)*(g(i+1,j+1)))+((1/12
)*(g(i,j+1)))+((1/12)*(g(i-1,j+1)));
ker4(i,j)=((1/10)*(g(i-1,j-1)))+(0*(g(i,j-1)))+((1/10)*(g(i+1,j-
1)))+((1/10)*(g(i-
1,j)))+((4/10)*(g(i,j)))+((1/10)*(g(i+1,j)))+((1/10)*(g(i+1,j+1)))+(0*(g(
i,j+1)))+((1/10)*(g(i-1,j+1)));
ker5(i,j)=((1/8)*(g(i-1,j-1)))+((1/8)*(g(i,j-1)))+(0*(g(i+1,j-
1)))+((0)*(g(i-
1,j)))+((2/8)*(g(i,j)))+((0)*(g(i+1,j)))+((1/8)*(g(i+1,j+1)))+((1/8)*(g(i
,j+1)))+((1/8)*(g(i-1,j+1)));
end
end
figure
subplot(4,3,1)
imshow(uint8(ker1));
title('filtro Kernel')
subplot(4,3,2)
imshow(uint8(ker2));
title('filtro smooth')
subplot(4,3,3)
imshow(uint8(ker3));
title('filtro pasa altas')
Contor= (uint8(ker4))+(uint8(ker5));
subplot(4,3,4)
imshow(uint8(Contor));
title('filtro de contornos')
kep1=zeros(size(I));%Kernel Pasa Altas
kep2=zeros(size(I));
kep3=zeros(size(I));
kep4=zeros(size(I));
kep5=zeros(size(I));
for i=2:x-1
for j=2:y-1
kep1(i,j)=((1)*(g(i-1,j-1)))+((-2)*(g(i,j-1)))+((1)*(g(i+1,j-
1)))+((-2)*(g(i-1,j)))+((4)*(g(i,j)))+((-
2)*(g(i+1,j)))+((1)*(g(i+1,j+1)))+((-2)*(g(i,j+1)))+((1)*(g(i-1,j+1)));
kep2(i,j)=((-1)*(g(i-1,j-1)))+((-1)*(g(i,j-1)))+((-1)*(g(i+1,j-
1)))+((-1)*(g(i-1,j)))+((8)*(g(i,j)))+((-1)*(g(i+1,j)))+((-
1)*(g(i+1,j+1)))+((-1)*(g(i,j+1)))+((-1)*(g(i-1,j+1)));
kep3(i,j)=((0)*(g(i-1,j-1)))+((-1)*(g(i,j-1)))+((0)*(g(i+1,j-
1)))+((-1)*(g(i-1,j)))+((4)*(g(i,j)))+((-
1)*(g(i+1,j)))+((0)*(g(i+1,j+1)))+((-1)*(g(i,j+1)))+((0)*(g(i-1,j+1)));
kep4(i,j)=((-2)*(g(i-1,j-1)))+((0)*(g(i,j-1)))+((-2)*(g(i+1,j-
1)))+((0)*(g(i-1,j)))+((8)*(g(i,j)))+((0)*(g(i+1,j)))+((-
2)*(g(i+1,j+1)))+((0)*(g(i,j+1)))+((-2)*(g(i-1,j+1)));
kep4(i,j)=((1)*(g(i-1,j-1)))+((-2)*(g(i,j-1)))+((1)*(g(i+1,j-
1)))+((-2)*(g(i-
1,j)))+((12)*(g(i,j)))+((2)*(g(i+1,j)))+((1)*(g(i+1,j+1)))+((-
2)*(g(i,j+1)))+((1)*(g(i-1,j+1)));
end
end
subplot(4,3,5)
imshow(uint8(kep1));
title('kernel pasa altas 1')
subplot(4,3,6)
imshow(uint8(kep2));
title('kernel pasa altas 2')
subplot(4,3,7)
imshow(uint8(kep3));
title('kernel pasa altas 3')
subplot(4,3,8)
imshow(uint8(kep4));
title('kernel pasa altas 4')
subplot(4,3,9)
imshow(uint8(kep5));
title('kernel pasa altas 5')
sha1=zeros(size(I));%Sharper o realce
sha2=zeros(size(I));
sha3=zeros(size(I));
for i=2:x-1
for j=2:y-1
sha1(i,j)=((-1)*(g(i-1,j-1)))+((-2)*(g(i,j-1)))+((1)*(g(i+1,j-
1)))+((-2)*(g(i-1,j)))+((5)*(g(i,j)))+((-
2)*(g(i+1,j)))+((1)*(g(i+1,j+1)))+((-2)*(g(i,j+1)))+((1)*(g(i-1,j+1)));
sha2(i,j)=((-1)*(g(i-1,j-1)))+((-1)*(g(i,j-1)))+((-1)*(g(i+1,j-
1)))+((-1)*(g(i-1,j)))+((9)*(g(i,j)))+((-1)*(g(i+1,j)))+((-
1)*(g(i+1,j+1)))+((-1)*(g(i,j+1)))+((-1)*(g(i-1,j+1)));
sha3(i,j)=((0)*(g(i-1,j-1)))+((-1)*(g(i,j-1)))+((0)*(g(i+1,j-
1)))+((-1)*(g(i-1,j)))+((5)*(g(i,j)))+((-
1)*(g(i+1,j)))+((0)*(g(i+1,j+1)))+((-1)*(g(i,j+1)))+((0)*(g(i-1,j+1)));
end
end
subplot(4,3,10)
imshow(uint8(sha1));
title('filtro sharpen 1')
subplot(4,3,11)
imshow(uint8(sha2));
title('filtro sharpen 2')
subplot(4,3,12)
imshow(uint8(sha3));
title('filtro sharpen 3')
end
Resultados:
Conclusiones:
Existen una gran cantidad de filtros distintos en este caso usamos los de matrices de 3 x 3 que son
unos de los más usados en la convolución, lo que se quiere hacer a la imagen a traves de estos
filtros es permitir la reducción de las variaciones entre los pixeles vecinos o o detectar los pixeles
donde se producen cambios de intensidad detectando con esto los bordes.
Bibliografia:
http://atenciolpdi.blogspot.mx/2010/07/filtros-y-ruidos-unidad-2.html
https://docs.gimp.org/es/plug-in-convmatrix.html