Académique Documents
Professionnel Documents
Culture Documents
𝐻(𝑢, 𝑣) =
𝑇
sin[𝜋(𝑢𝑎 + 𝑣𝑏)] 𝑒 −𝑗𝜋(𝑢𝑎+𝑣𝑏) (6)
𝜋(𝑢𝑎+𝑣𝑏)
Resumen—Para tener un mejor manejo de los puntos de la 𝑇
practica los agrupamos dependiendo de la relación que había 𝑃1 = (7)
𝜋(𝑢𝑎+𝑣𝑏)
entre ellos, resultándonos la división de la práctica en cuatro 𝑃2 = sin[𝜋(𝑢𝑎 + 𝑣𝑏)] (8)
fases. Las primeras dos etapas consistían en corromper una
imagen en buen estado, aplicándole ruido, Gaussiano para la 𝑃3 = 𝑒 −𝑗𝜋(𝑢𝑎+𝑣𝑏) (9)
1 |𝐻(𝑢,𝑣)|2
primera, y sal y pimienta para la segunda. En cada una de las ̂𝐹 (𝑢, 𝑣) = [ ] 𝐺(𝑢, 𝑣) (10)
𝐻(𝑢,𝑣) |𝐻(𝑢,𝑣)|2 +𝐾
etapas usamos un filtro; para la primera usamos un filtrado
espacial (promedio aritmético, promedio geométrico, promedio
armónico, mediana), en la segunda fase hicimos uso de filtros II. DESARROLLO
Butterworth pasa-altas, y pasa-bajas, para la tercera etapa La practica la dividimos en cuatro etapas, para tener un
implementamos el filtro Sobel y en la etapa final utilizamos el
mejor manejo de cada uno de los puntos requeridos, cada
filtro Wiener. Cabe mencionar que para el procesamiento de la
imagen en cada una de las facetas utilizamos el programa de etapa contiene los puntos que se relacionan entre ellos por
MATLAB con sus respectivos comandos. medio de las imágenes de entrada como resultantes.
En la primera etapa a una imagen en buen estado le
I. INTRODUCCIÓN agregamos un ruido aditivo Gaussiano, utilizando un
STE documento presenta lo realizado, los procedimientos comando, a esta imagen resultante le colocamos un filtrado
Eutilizados, resultados obtenidos y conclusiones a las que espacial implementando tres filtros (aritmético, geométrico,
armónico, y mediana) .
llego el equipo, durante la realización de la séptima practica.
En esta práctica utilizamos el programa de MATLAB y sus En nuestra segunda fase igualmente corrompimos y
respectivos comandos para evitar la realización de procesos filtramos una imagen en buen estado, utilizamos el ruido sal y
muy largos y laboriosos, aplicamos conocimientos vistos en pimienta, y para el filtrado fue un filtro Butterworth pasa-
clase referente a filtrado espacial y en frecuencia. El objetivo bajas. En esta parte de la práctica también hicimos uso del
primario de realizar un filtrado a una imagen es disminuir el filtro Butterworth pasa-altas, sin embargo se aplico a la
ruido que la corrompe, entendemos el concepto de ruido como imagen en buen estado.
información no deseada que contamina la imagen. Existen dos Para la tercera etapa obtuvimos los bordes de una imagen
tipos de filtrados: espacial y frecuencial. El filtrado espacial por medio del filtro Sobel, cabe mencionar que esto lo
utiliza vecindades de pixeles, esto quiere decir que se toma un realizamos de forma manual y usando comandos.
pixel como centro y los 8 pixeles que los rodean para, En la etapa final hicimos uso de las imágenes resultantes, de
mediante ecuaciones que sirven como filtros, generar un los ruidos Gaussiano, y sal y pimienta, además de nuestra
nuevo valor que nos da como resultado nuestra imagen imagen en buen estado utilizada en toda la práctica. A todas
filtrada. Los filtros en el dominio de la frecuencia trabajan las imágenes les aplicamos un filtro Wiener de forma manual.
únicamente en el dominio de Fourier por lo cual es necesario
aplicar una transformación discreta de Fourier a nuestra III. MÉTODOS Y CÁLCULOS
imagen a filtrar y, posteriormente, manipular las frecuencias Como ya se menciono en el transcurso del reporte, la
mediante distintas ecuaciones para conseguir nuestro filtrado. práctica se dividió por etapas, en cada una de ellas realizamos
un código diferente en MATLAB, que se muestran
𝑓̂(𝑥, 𝑦) =
1
∑(𝑠,𝑡)∈𝑆𝑥𝑦 𝑔(𝑠, 𝑡) (1) respectivamente en los apéndices. Absolutamente en las
𝑚𝑛 cuatro etapas de la práctica, primero tuvimos que cerrar todas
1
utilizamos el comando “imnoise”, el filtro “gaussian” y los cual se aplico a la imagen original y también se hizo uso
valores de “m” igual a cero y “σ” igual a cero punto cero directo del filtro “sobel”
nueve, para crear el filtro promedio aritmético utilizamos [1], Para la última etapa obtuvimos inicialmente dos imágenes,
haciendo uso una matriz de tres por tres llena de unos, una que contenía un ruido impulso o sal y pimienta, y otra que
teniendo hecho esto, se aplica el filtro a nuestra imagen con con ruido aditivo Gaussiano, en ambos filtros usamos el
ruido. Para el filtro promedio geométrico y armónico, creamos comando “imnoise”; para el ruido aditivo Gaussiano usamos
una matriz de tres por tres, igualmente llena de unos, “m” igual a cero y “σ” igual a cero punto uno, igualmente para
recorremos la imagen en cada pixel en el que pueda actuar la el ruido sal y pimienta el valor utilizado fue de cero punto uno.
máscara en tu totalidad, usando dos ciclos for anidados,, Para la creación del filtro, a la imagen original le aplicamos la
también tuvimos que crear nueve variables que representan transformada discreta de Fourier mediante el comando “fft2” y
nuestra vecindad de ocho vecinos para cada pixel, enseguida la centramos con el comando “fftshift”, enseguida declaramos
cada elemento de nuestra matriz del filtro se multiplicara por las constantes de [6], a=1, b=a, T=1, y K=400. Creamos una
su correspondiente en la vecindad, finalizando los ciclos, matriz del mismo tamaño que nuestra imagen original y
aplicamos [2] para el filtro promedio geométrico, y [3] para el obtuvimos H usando [6], para esto dividimos la formula, y
filtro promedio armónico. Por último en el filtro mediana, utilizamos auxiliares, el primero tenía el resultado de [7], el
creamos una matriz de tres por tres llena de unos, y una matriz segundo guardaba el resultado de [8] y por último el tercer
vacía donde guardaremos nuestra imagen filtrada, al igual que auxiliar contenía el resultado de [9], teniendo los tres
en los filtros pasados, recorremos la matriz de la imagen auxiliares realizamos la multiplicación de ellos y a este
original en busca de los pixeles en los que se les pueda aplicar resultado le sumamos 0.00001. A nuestra matriz H le
el filtro en su totalidad, cabe mencionar que si es nuestro aplicamos con los mismos comandos ya mencionados, la
primer filtro, utilizamos un vector de nueve posiciones, y en transformada discreta de Fourier y la centramos; con dos
cada una guardamos el resultado de la multiplicación de cada ciclos for anidados aplicamos [10], generando una nueva
una de las posiciones de la matriz llena de unos con la matriz matriz, a esta ultima matriz igualmente con comandos le
que tiene el ruido igualmente en diferentes posiciones, una vez colocamos la transformada inversa de Fourier y la centramos,
que llenamos nuestro vector buscamos el valor de la mediana. utilizando los comandos de “ifftshift” y “ifft2”. Realizamos
En caso contrario de que no sea nuestro primer filtro, entonces este mismo procedimiento pero aplicándolo a nuestras
tomamos los resultados anteriores a la matriz, es decir imágenes con ruido.
tomaremos la imagen filtrada en lugar de utilizar la imagen
corrompida con el ruido, igualmente los resultados se guardan IV. RESULTADOS
en un vector de nueve posiciones y se busca la mediana. Para
A. Etapa Uno
finalizar utilizamos un switch que tuvo el objetivo de guardar
cada iteración del filtro mediana. La Fig. 1. Nos muestra la imagen original con la que se
En la segunda fase corrompimos una imagen en buen estado trabajo durante toda la práctica, podemos notar que es una
con el ruido sal y pimienta utilizando el comando “imnoise” imagen en buen estado, la Fig. 2 nos presenta la Fig. 1.
aplicado a la imagen original junto con el filtro “salt & implementándole ruido aditivo Gaussiano, la Fig. 3. es la Fig.
pepper”, utilizando el valor de cero punto uno, a esta imagen 2 con el filtro promedio aritmético, mientras que la Fig. 4 es la
le aplicamos la transformada discreta de Fourier utilizando el Fig. 2 con un filtro promedio geométrico. El filtro promedio
comando “fft2”y la centramos con el comando “fftshift”, para armónico implementado en la Fig. 2, se presenta en la Fig. 5,
el centro de nuestra imagen tuvimos que obtener los valores de la Fig. 6 a la Fig. 10, presentamos las imágenes resultantes
centrales, para esto dividimos el numero de columnas y aplicando diferentes medianas.
renglones entre dos, con ayuda de dos ciclos for anidados que
tiene como condición de paro el tamaño de nuestra matriz
original, en este ciclo creamos una matriz con la distancia de
cada pixel, y dos matrices mas, una para el filtro pasa-bajas
utilizando [4], y otra para el filtro pasa-altas utilizando [5],
una vez teniendo las matrices de los filtros, realizamos la
convolución con la matriz de la imagen con ruido, en dominio
de Fourier, realizado esto, por ultimo aplicamos la inversa de
Fourier con el comando “ifft2” para recuperar la imagen.
Para la tercera fase realizamos la obtención de los bordes de
forma manual y mediante comandos. De forma manual
tuvimos que crear dos matrices para poder detectar bordes en
el eje “x” y en el eje “y”, enseguida aplicamos un filtro con el
comando “imfilter” a la matriz de la imagen original y a la
matriz del eje “x”, luego realizamos esto mismo pero
cambiando la matriz del eje “x” por la matriz de eje “y”, por
ultimo combinamos las imágenes resultantes, para esto
elevamos cada una de las matrices al cuadrado, las sumamos y
sacamos raíz al resultado de esta sumatoria. Para obtener los
bordes mediante comandos, utilizamos el comando “edge” el
3
Universidad Autónoma del Estado de México, Facultad de Medicina, Sexto Semestre.
B. Segunda Etapa
La Fig. 11 nos muestra la imagen resultante de la Fig. 1.
implementándole ruido sal y pimienta, las siguientes dos
Figuras nos muestran la Fig. 11. con los filtros Butterworth, la
Fig. 12 tiene el filtro pasa-bajas, mientras que la Fig. 13
contiene implementado el filtro pasa-altas.
Fig. 13. Imagen con un filtro Butterworth pasa-altas. Fig. 15. Imagen con el filtro Sobel utilizando comandos.
V. DISCUSIÓN Y CONCLUSIONES
Con respecto a nuestros resultados obtenidos en cada etapa,
logramos observar diferentes cosas con respecto al filtrado
espacial y frecuencial. En nuestra primera etapa, podemos
notar con bastante claridad la diferencia entre una imagen en
perfecto estado con esta misma imagen pero corrompida con
ruido, la calidad disminuye en gran medida, haciendo que la
imagen sea inadecuada para su aplicación, sin embargo al
momento de colocarle los diferentes filtros nos percatamos
que la calidad de la imagen en lugar de mejorar, empeora
notablemente, en especial con los filtros, mediana y promedio
armónico, fue interesante ver como conforme cambiábamos el
valor de la mediana, la imagen se volvía cada vez mas borrosa,
además cabe mencionar que el filtro promedio geométrico y el
filtro promedio aritmético, arrojaron un resultado bastante
similar, incluso se puede decir que la diferencia entre ambos
es casi nula, por ultimo nos dimos cuenta que si el valor
Fig. 17. Imagen en buen estado implementándole un filtro utilizado al momento de aplicar el ruido gaussiano es más
Wiener. próximo a cero, el ruido es menos a comparación de si se usa
un valor muy aproximada a cero punto uno.
En la segunda etapa observamos la misma imagen inicial de
la etapa uno pero esta vez implementándole un ruido sal y
pimienta, notamos que la calidad de la imagen disminuye pero
en menor medida a comparación que la imagen con el ruido
aditivo gaussiano, en esta etapa hicimos uso de los filtros
Butterworth, pasa-bajas y pasa-altas, notando que el primero
se enfoca mas en las formas pero no a gran detalle, mientras
que el segundo tiene un enfoque a contornos, sin embargo
ninguno de los dos filtros es cien por ciento adecuado para
mejorar la calidad de la imagen después de aplicarle ruido.
En la tercera etapa realizamos una obtención de bordes de
forma manual y utilizando comandos, en prácticas anteriores
nos percatábamos que al realizarlas por ambas formas, la
diferencia en los resultados era prácticamente nula, sin
embargo en esta ocasión la diferencia entre ambos resultados
es bastante notoria, los bordes mediante el uso de comandos
Fig. 18. Imagen resultante de aplicar un filtro Wiener a una resultan ser muy pronunciados, mientras que de formar
imagen con ruido aditivo Gaussiano. manual se puede distinguir un poco más la forma de la figura
de la imagen original, sin embargo los bordes al contrario del
uso de comandos resultan ser un tanto borrosos.
En la cuarta etapa, notamos que al aplicar este filtro en una
imagen con ruido gaussiano, y sal y pimienta, se logra el
objetivo de disminuirlo, sin embargo la calidad de la imagen
no es buena en lo absoluto, además de que el brillo en la
imagen aumenta un poco. En cuanto a aplicarlo a una imagen
en perfecto estado, como no lo necesita provoca un efecto
negativo en ella, iniciando porque la vuelve un tanto borrosa y
el brillo aumenta igualmente un poco.
APÉNDICE I
ETAPA I
%Leemos nuestra imagen con imread, la transformamos a una sola matriz en escala de grises con rgb2gray, le damos un formato
doble y la normalizamos
ImOr=double(rgb2gray(imread('rm_rodilla.jpg')))/255;
%Creamos una matriz del mismo tamaño pero en ceros.
FiltroGeom=ImOr*0;
% Filtro Promedio
%Creamos nuestra matriz que usaremos como filtro
FiltroPromedio=ones(3)/9;
%Mostramos nuestra imagen original con un plot
subplot(1,3,1), imshow(ImOr), title('Original');
%Le añadimos un ruido gaussiano a nuestra imagen
ImRuidoGauss=imnoise(ImOr,'gaussian',0,0.09);
%Mostramos la imagen corrompida en el mismo plot
subplot(1,3,2), imshow(ImRuidoGauss), title('Ruido Gaussiano m=0, varianza=0.09');
%Guardamos esta imagen corrompida
imwrite(ImRuidoGauss,'Imagen con Ruido Gaussiano.jpg','jpg');
%Aplicamos el filtro a la imagen corrompida
ImFiltroProm=conv2(ImRuidoGauss,FiltroPromedio,'full');
%Mostramos la imagen en nuestro Plot
figure(1), subplot(1,3,3), imshow(ImFiltroProm), title('Filtro Promedio');
%Guardamos nuestra imagen filtrada
imwrite(ImFiltroProm,'Imagen con Filtro Promedio.jpg','jpg');
FiltroGeom(x,y)=(v1*v2*v3*v4*v5*v6*v7*v8*v9).^(1/9);
end
end
r=2
%Mostramos la imagen en nuestro Plot
8
Universidad Autónoma del Estado de México, Facultad de Medicina, Sexto Semestre.
%% Filtro Mediana
%Creamos la matriz de nuestro filtro
m1=ones(3);
%Creamos una matriz vacía donde guardaremos nuestra nueva imagen filtrada
FiltroMediana=FiltroGeom*0;
%Recorremos todos los pixeles donde nuestro filtro puede ser aplicado agregando un ciclo extra para cada iteración de nuestro
filtro Mediana
for z=1:5;
for x=2:size(ImOr,1)-1;
for y=2:size(ImOr,2)-1;
%Si es nuestro primer ciclo crearemos una matriz donde guardaremos los resultados nuevos
if z==1
v(1)= m1(1,1)*ImRuidoGauss(x-1,y-1);
v(2)= m1(1,2)*ImRuidoGauss(x-1,y);
v(3)= m1(1,3)*ImRuidoGauss(x-1,y+1);
v(4)= m1(2,1)*ImRuidoGauss(x,y-1);
v(5)= m1(2,2)*ImRuidoGauss(x,y);
v(6)= m1(2,3)*ImRuidoGauss(x,y+1);
v(7)= m1(3,1)*ImRuidoGauss(x+1,y-1);
v(8)= m1(3,2)*ImRuidoGauss(x+1,y);
v(9)= m1(3,3)*ImRuidoGauss(x+1,y+1);
%Se busca el valor de la mediana en nuestro vector
M=median(v);
%Se guarda
FiltroMediana(x,y)=M;
9
Universidad Autónoma del Estado de México, Facultad de Medicina, Sexto Semestre.
%Si no es nuestro primer filtro simplemente iremos tomando los resultados anteriores a la matriz
else
%En lugar de utilizar la imagen corrompida, utilizamos la imagen filtrada anteriormente
v(1)= m1(1,1)*FiltroMediana(x-1,y-1);
v(2)= m1(1,2)*FiltroMediana(x-1,y);
v(3)= m1(1,3)*FiltroMediana(x-1,y+1);
v(4)= m1(2,1)*FiltroMediana(x,y-1);
v(5)= m1(2,2)*FiltroMediana(x,y);
v(6)= m1(2,3)*FiltroMediana(x,y+1);
v(7)= m1(3,1)*FiltroMediana(x+1,y-1);
v(8)= m1(3,2)*FiltroMediana(x+1,y);
v(9)= m1(3,3)*FiltroMediana(x+1,y+1);
%Se busca la mediana
M=median(v);
%Se guarda el valor
FiltroMediana(x,y)=M;
end
end
end
%Este switch tiene el objetivo de guardar cada iteración del filtro Mediana
switch z
case 1
Mediana1=FiltroMediana;
imwrite(Mediana1, 'Filtro Mediana1.jpg', 'jpg');
case 2
Mediana2=FiltroMediana;
imwrite(Mediana2, 'Filtro Mediana2.jpg', 'jpg');
case 3
Mediana3=FiltroMediana;
imwrite(Mediana3, 'Filtro Mediana3.jpg', 'jpg');
case 4
Mediana4=FiltroMediana;
imwrite(Mediana4, 'Filtro Mediana4.jpg', 'jpg');
case 5
Mediana5=FiltroMediana;
imwrite(Mediana5, 'Filtro Mediana5.jpg', 'jpg');
end
end
%Mostramos la imagen final en nuestro Plot
figure (1), subplot(1,3,3), imshow(FiltroMediana), title('Filtro Mediana');
end
10
Universidad Autónoma del Estado de México, Facultad de Medicina, Sexto Semestre.
APÉNDICE II
ETAPA II
function [ ] = untitled2( n, D0 )
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
APÉNDICE III
ETAPA III
APÉNDICE IV
ETAPA IV
FourierCentrada=fftshift(Fourier);
%Creamos una matriz del mismo tama?o de nuestra imagen con nuestra fórmula para obtener H
for x=1:M
for y=1:N
aux1=T/(pi*(x*a+b*y));
aux2=sin(pi*(a*x+y*b));
aux3=exp((-y)*pi*(a*x+y*b));
H(x,y)=(aux1*aux2*aux3)+.00001;
end
end
%Aplicamos Fourier a esa matriz y la centramos
H=fft2(H);
H=fftshift(H);
%Creamos otro ciclo para aplicar nuestra formula del Filtro de Wiener y obtener así una imagen
for x=1:M
for y=1:N
aux4=1/H(x,y);
complex=conj(H(x,y));
cuad=abs(H(x,y)).^2;
aux5=(cuad)/((cuad)+K);
aux6=FourierCentrada(x,y);
Fp(x,y)=aux4*aux5*aux6;
end
end
%Aplicamos una inversa de Fourier de esta ultima matriz.
Fp=ifftshift(Fp);
Fp=ifft2(Fp);
%Mostramos nuestras imagenes
figure(1), imshow(real((Fp*255))), title('Filtro Wiener');
figure(2), imshow(real((ImagenSalPimienta))), title('Imagen Sal y Pimienta');
%Guardamos nuestras imagenes
imwrite(real((Fp*255)),'Filtro Wiener Sal y Pimienta.jpg','jpg');
imwrite(real((ImagenSalPimienta)),'Imagen Sal y Pimienta.jpg','jpg');
%Aplicamos Fourier a nuestra imagen con ruido impulso y la centramos
Fourier=fft2(ImRuidoGauss);
FourierCentrada=fftshift(Fourier);
%Creamos una matriz del mismo tama?o de nuestra imagen con nuestra fórmula para obtener H
for x=1:M
for y=1:N
aux1=T/(pi*(x*a+b*y));
aux2=sin(pi*(a*x+y*b));
aux3=exp((-y)*pi*(a*x+y*b));
H(x,y)=(aux1*aux2*aux3)+.00001;
end
end
%Aplicamos Fourier a esa matriz y la centramos
H=fft2(H);
H=fftshift(H);
%Creamos otro ciclo para aplicar nuestra formula del Filtro de Wiener y obtener así una imagen
for x=1:M
for y=1:N
aux4=1/H(x,y);
complex=conj(H(x,y));
cuad=abs(H(x,y)).^2;
aux5=(cuad)/((cuad)+K);
aux6=FourierCentrada(x,y);
Fp(x,y)=aux4*aux5*aux6;
end
end
%Aplicamos una inversa de Fourier de esta ultima matriz.
14
Universidad Autónoma del Estado de México, Facultad de Medicina, Sexto Semestre.
Fp=ifftshift(Fp);
Fp=ifft2(Fp);
%Mostramos nuestras imagenes
figure(1), imshow(real((Fp*255))), title('Filtro Wiener');
figure(2), imshow(real((ImRuidoGauss))), title('Imagen Ruido Gauss');
%Guardamos nuestras imagenes
imwrite(real((Fp*255)),'Filtro Wiener Ruido Gaussiano.jpg','jpg');
imwrite(real((ImRuidoGauss)),'Imagen Ruido Gaussiano.jpg','jpg');
end