Professional Documents
Culture Documents
orlando@igotel.net
javiervg19@hotmail.com
1 1 1
1 0 1
1 1 1
Tabla 2 Matriz mscara
I.
INTRODUCCIN
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
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
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
if(yS<=r+addY)
bC=-yS+addY+r;
elseif(bC>0)
bC=0;
end
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
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
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
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
VI.
REFERENCIAS