You are on page 1of 6

Filtrado de Imgenes digitales

Orlando P. Chacn Molina

Xavier Villa Grandes

orlando@igotel.net

javiervg19@hotmail.com

ResumenEl presente documento pretende mostrar la


implementacin de mtodos para el filtrado de imgenes,
concretamente con los mtodos del promedio mvil y median
filter.

1 1 1
1 0 1
1 1 1
Tabla 2 Matriz mscara

Keywordsfiltro; imgenes; promedio; median;

I.

INTRODUCCIN

El filtrado de imgenes, dependiendo del mtodo usado en


el proceso, permite, en cierto grado, la recuperacin de la
calidad de imgenes que han perdido su calidad. En este
documento se explican los mtodos del promedio mvil y
median filter para la correccin del ruido salt &pepper, estos
mtodos estn basados en la estadstica, tomando como
referencia a los valores de pixel que tiene cada uno de sus
vecinos.
II.

FUNDAMENTOS.

A. Aspectos comunes
Los mtodos de filtrado que se revisarn en este documento
corresponden a mtodos estadsticos que usan los valores de
pixel de sus vecinos para la determinacin de su propio valor.
El nmero de vecinos vara en funcin de la dimensin de la
mscara (p ej. 3x3, 5x5, 7x7, 3x5, 3x1 etc). Teniendo como
dimensin de una mscara (x, y), el nmero de vecinos es
igual a (x*y-1), se resta el valor de 1 debido a que el propio
pixel no es objeto de clculo.
Para la aplicacin de del mtodo se recurre a la creacin de
una matriz mascara con valores 1 para todas las celdas
excepto la central que es cero. La mscara recorrer todas las
columnas y filas, coincidiendo su celda central con el punto
objeto de clculo de la matriz original con la del resultado de
en el orden mencionado. En cada parada de la mscara se
realizan los clculos correspondientes para cada mtodo y su
valor resultante es asignado a otra matriz, en la misma posicin
en la que se encontraba situado el punto central de la matriz
mascara sobre la matriz original.

100
104
110
190
40
104

101
102
111
115
30
102

105
90
112
114
20
90

180
170
190
113
108
190

60
90
90
110
90
90

50
60
89
109
90
60

40
190
20
108
190
190

Tabla 1Matriz original

30
40
24
107
90
40

50
67
90
78
98
67

100
104
110
190
40
104

101
102
111
115
30
102

105
90
112
114
20
90

180
170
190
113
108
190

60
90
90
110
90
90

50
60
89
109
90
60

40
190
20
108
190
190

30
40
24
107
90
40

50
67
90
78
98
67

Tabla 3 Matriz con mascara sobrepuesta.

B. Promedio mvil
El filtro de promedio mvil se basa en los principios
expuestos en la seccin II-A. El clculo del valor central en
cada parada de la mscara se basa en el promedio de valores de
los vecinos.
C. Median Filter
Al igual que el promedio, tambin mvil se basa en los
principios expuestos en la seccin II-A. El clculo del valor
central en cada parada de la mscara se basa en el en la
mediana de valores de los vecinos.
III.

ALGORITMO

Est basado en arreglos bidimensionales de matlab para el


manejo de los vecindarios en cada celda de la matriz original,
con esto se logra tambin optimizar los recursos de cmputo
utilizados para el procesamiento de una imagen.
El algoritmo soporta cualquier tamao de mscara, siempre
que esta sea impar tanto en el eje x como en el y. Ej.
(17,5)-(5,1)-(61,1)
El algoritmo, al estar basado en una mscara, puede
manejar cualquier tipo de mascara para el caso del promedio
mvil, para lo cual se debera modificar el cdigo actual en la
seccin de la generacin de la mscara de unos.
A. Estructura
Consta de una funcin que recibe cuatro parmetros y
retorna una matriz (imagen).
Function img = nhAvg(originalImg, x, y, type)

if(yS<=r+addY)
bC=-yS+addY+r;
elseif(bC>0)
bC=0;
end

La funcin recibe como primer parmetro una matriz de la


imagen original, seguido de las dimensiones de la matriz
mscara (x, y) y finalmente el tipo de algoritmo (1: promedio
mvil o 2:median filter)
B. Cdigo Fuente
%by Orlando Chacon & Javier Villa
%variables
%r, y, yS are used to represent values on
vertical axis(rows)
%c, x, xS are used to represent values on
horizontal axis(columns)
function img = nhAvg(originalImg, x, y,
type)%Currently valid types are: mean and
median represented by 1 or 2 respectively

%get submatrix from original


image
%subImg=originalImg(raddY+tC:r+addY-bC,c-addX+lC:c+addX-rC);
if(lC>0 || rC>0 || tC>0 ||
bC>0)
submask=mask(1+tC:ybC,1+lC:x-rC);
if type==1

mask=onesMask(x,y);%constructs a
input mask according to x,y values
[yS,xS]=size(originalImg);%size in Y
and X

img(r,c)=uint8(sum(sum(submask.*originalI
mg(r-addY+tC:r+addY-bC,c-addX+lC:c+addXrC)))/sum(submask(:)));
elseif type==2

addX=(x-1)/2; %positions to add from


center in X axis
addY=(y-1)/2; %positions to add from
center in Y axis

tmpP=median(submask.*originalImg(raddY+tC:r+addY-bC,c-addX+lC:c+addX-rC));
tmpP=median(tmpP(:));
img(r,c)=tmpP;
end
else
if type==1

%work with matrix borders


lC=0;%left Cut
rC=0;%right Cut
tC=0;%top Cut
bC=0;%bottom Cut
img=uint8(originalImg);
for r=1:yS
for c=1:xS
%get left Cut
if(addX>=c)
lC=addX-c+1;
elseif(lC>0)
lC=0;
end
%get right Cut
if(xS<=c+addX)
rC=-xS+addX+c;
elseif(rC>0)
rC=0;
end
%get top cut
if(addY>=r)
tC=addY-r+1;
elseif(tC>0)
tC=0;
end
%get bottom cut

img(r,c)=uint8(sum(sum(mask.*originalImg(
r-addY+tC:r+addY-bC,c-addX+lC:c+addXrC)))/sum(mask(:)));
elseif type==2
tmpP=mask.*originalImg(r-addY+tC:r+addYbC,c-addX+lC:c+addX-rC);
tmpP=median(tmpP(:));
img(r,c)=tmpP;
end
end
end
end
img=uint8(img);
end
function mask = onesMask(x,y)
if (mod(x,2)==1 && mod(y,2)==1)
mask=ones(y,x);
centerX=((x-1)/2)+1;
centerY=((y-1)/2)+1;
mask(centerY,centerX)=0;
else
mask=ones(1,1);
end
mask=uint8(mask);
end

C. Entendiendo el cdigo
Primeramente se genera una matriz mascara a partir de los
parmetros x, y ingresados, se obtiene la dimensin de la
matriz original (xS, yS) y el numero de elementos que se
agregaran a partir del punto central de la matriz mascara, tanto
en x como en y (addX, addY). Seguido, se realizan dos bucle
para recorrer toda la matriz original, se obtienen las
dimensiones de corte en la izquierda, derecha, arriba y abajo
para cada celda (en caso de la que la matriz mscara sobresalga
de la original), en caso de desbordamiento se procede a obtener
una sub-mscara recortada hasta los bordes de la
original(usando los valores de corte), luego se obtiene una submatriz de la original de igual tamao que la sub-mascara, se
multiplican elemento a elemento la sub-matriz por la submscara. Dependiendo del tipo de algoritmo, se obtiene el
promedio o la mediana del resultado de la multiplicacin
anterior y se le asigna a la celda correspondiente de la matriz
resultado. Luego de haber recorrido completamente la matriz
original se obtendr la imagen re-muestreada y ser el valor
que retorne la funcin.
IV.

A. Promedio Mvil
1) 3x3(>> img=nhAvg(lena_noise,3,3,1);)

RESULTADOS

Los resultados de prueba han sido realizados con la imagen


lena512.bmp, inicializndola con las siguientes parmetros
>> lena=imread('lena512.bmp');
>> lena_noise = imnoise(lena,'salt & pepper',0.02);
En el ejemplo, para mostrar la imagen se usa siempre:
>> figure, imshow(img).
A continuacin se muestran los resultados para los dos
tipos de algoritmos, cada uno con los vecindarios:(3x3), (5x5),
(7x7), (21,21), (3x1), (5x1), (7x1)
Imagen Fuente:

2) 5x5(>> img=nhAvg(lena_noise,5,5,1);)

3) 7x7(>> img=nhAvg(lena_noise,7,7,1);)

4) 21x21(>> img=nhAvg(lena_noise,21,21,1);)

5) 3x1(>> img=nhAvg(lena_noise,3,1,1);)

6) 5x1(>> img=nhAvg(lena_noise,5,1,1);)

7) 7x1(>> img=nhAvg(lena_noise,7,1,1);)

B. Median Filter
1) 3x3(>> img=nhAvg(lena_noise,3,3,2);)

2) 5x5(>> img=nhAvg(lena_noise,5,5,2);)

6) 5x1(>> img=nhAvg(lena_noise,5,1,2);)

3) 7x7(>> img=nhAvg(lena_noise,7,7,2);)
7) 7x1(>> img=nhAvg(lena_noise,7,1,2);)

4) 21x21(>> img=nhAvg(lena_noise,21,21,2);)

V.

5) 3x1(>> img=nhAvg(lena_noise,3,1,2);)

CONCLUSIONES

Luego de haber realizado varias pruebas con los mtodos


estudiados, se ha determinado que para este caso particular,
imgenes con ruido salt & pepper, el mejor resultado se
obtiene con el algoritmo Median Filter entre 3 y 5
vecindarios, bsicamente debido a que de esta forma no se
tiene el promedio en el cual pueden estar involucrados puntos
corrompidos y se calcula su=sobre estos valores. En su lugar el
algoritmo median filter usa el valor central dentro del conjunto
ordenado de vecinos.

VI.

REFERENCIAS

Curso de Procesamiento de Imgenes dictado por el Ing.


Kenneth S. Palacio Baus Msc.

You might also like