Escolar Documentos
Profissional Documentos
Cultura Documentos
6 4 4 2 3 2 0 0 0 0 0 0
1 2 3
1 2 3 4 5
1 n ... 1
2 ... 2
3 ... 3
.
.
m ...
Operaciones basadas
en vecindades (V)
Solución: Relleno de píxeles
Imagen de salida
Imagen de entrada 1 2 3
1 ...
1 2 3 4 5
1 n ... 2 ...
1 2 3 4 5
2 ... 3 1 n ...
3 ... 2 ...
.
. 3 ...
. .
m ...
. .
m ...
f=
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
w=
[0 0 0 0 0
00000
00100
00000 >> imfilter(f,w,25,'full')
0 0 0 0 0]
Operaciones basadas
en vecindades (VII)
Relleno basado en réplica
f=
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
w=
[0 0 0 0 0
00000
00100
00000 >> imfilter(f,w,’replicate' ,'full')
0 0 0 0 0]
Operaciones basadas
en vecindades (VIII)
Relleno basado en espejo
f=
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
w=
[0 0 0 0 0
00000
00100
00000 >> imfilter(f,w,’ symmetric ‘,'full')
0 0 0 0 0]
Operaciones basadas
en vecindades (IX)
Tamaño de la
imagen destino
f=
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1 >> imfilter(f,w,0,’ full')
w=
[0 0 0 0 0
00000
00100
00000
0 0 0 0 0]
>> imfilter(f,w,0,’ same')
Filtros espaciales
Responden a la siguiente ecuación:
a b
g ( x, y) w ( s, t ) f ( x s, y t )
s a t b
donde:
f(x+s, y+t): Valor de los píxeles del bloque seleccionado
w(s, t): Coeficientes que se aplicarán al bloque (máscara)
a b
g ( x, y) w ( s, t ) f ( x s, y t )
s a t b
Filtros espaciales (IV)
Ejemplo:
Valor de los píxeles
17 24 1 8 15 Máscara (o filtro)
23 5 7 14 16 8 1 6
4 6 13 20 22 3 5 7
10 12 19 21 3 4 9 2
11 18 25 2 9
a b
g ( x, y) w ( s, t ) f ( x s, y t )
s a t b
g(2,4)=1(8)+8(1)+15(6)+7(3)+14(5)+16(7)+13(4)+20(9)+22(2)=585
Filtros espaciales (V)
Pasos para la aplicación del filtro lineal:
1.- Definir la máscara
2.- Definir tipo de relleno
3.- Aplicar la ecuación:
a b
g ( x, y) w ( s, t ) f ( x s, y t )
s a t b
Ejemplos de filtros
Filtro promedio:
1 1 1 1 2 1
w 1 2 1
1
w 2 4 2
1
10 16
1 1 1 1 2 1
Forma general
1 c 1
1 2
w 2
c c c
c 2
1 c 1
Filtros espaciales (VIII)
Ejemplo (usando Matlab):
% Imagen original
>> I=imread('tire.tif');
Original
Filtros espaciales (X)
Original
>> imhist(I) >> imhist(I2)
900
800
800
700
700
600
600
500
500
400
400
300 300
200 200
100 100
0 0
Imagen
f= Máscara
00000 w=
00000 123
00100 456
00000 789
00000
g ( x, y) f ( x, y) ( x, y)
Ruído
Imágenes ruidosas (II)
Escáner de una letra con y sin ruído
>>[R,Q] = size(G);
>>G_ruidosa = G + randn(R,Q)*0.2
G=01110100011000010000100111000101110
f ( x)
f ( x 1) f ( x)
x
Filtro Laplaciano (II)
f ( x)
Si se cumple: f ( x 1) f ( x)
x
2 f ( x)
Entonces: f ( x 1) f ( x 1) 2 f ( x)
x 2
2
f ( x , y ) 2
f ( x, y )
f ( x, y )
2
x 2
y 2
Filtro Laplaciano (III)
Función dependiente de dos variables
2
f ( x , y ) 2
f ( x, y )
f ( x, y )
2
x 2
y 2
La derivada de segundo orden con respecto a al variable x:
2 f ( x, y)
f ( x 1, y) f ( x 1, y) 2 f ( x, y)
x 2
2 f ( x, y )
f ( x, y 1) f ( x, y 1) 2 f ( x, y )
y 2
Finalmente:
2 f ( x, y) f ( x 1, y) f ( x 1, y) 2 f ( x, y) f ( x, y 1) f ( x, y 1) 2 f ( x, y)
Filtro Laplaciano (IV)
El Laplaciano queda definido por:
2 f ( x, y) f ( x 1, y) f ( x 1, y) f ( x, y 1) f ( x, y 1) 4 f ( x, y)
w=
a b
0
1
1
-4
0
1
g ( x, y) w ( s, t ) f ( x s, y t )
s a t b
0 1 0
Filtro Laplaciano (V)
% Imagen original
>> I=imread('moon.tif' );
% Se define una matriz de pesos
>> w=[0, 1, 0; 1, -4, 1; 0, 1, 0];
% Se aplica el filtro
>> I2=imfilter(I,w);
Alternativa:
>> I=imread('moon.tif');
>> w=fspecial('laplacian',0);
>> I2=imfilter(I,w,'replicate');
Filtro Laplaciano (VI)
Imágenes: www.imageprecessingplace.com
Filtro Laplaciano (VII)
2 f ( x, y) f ( x 1, y) f ( x 1, y) f ( x, y 1) f ( x, y 1) 4 f ( x, y)
w= w=
0 1 0
1 -4 1 1 1 1
0 1 0 1 -8 1
-4 1 1 1
+1 También se utiliza el negado de las anteriores máscaras
w= w=
-1 -1 -1 0 -1 0
-1 8 -1 -1 4 -1
-1 -1 -1 0 -1 0
Filtros Laplacianos alternativos
Se emplea en pocas ocasiones en la práctica
Incluye
diagonal
Filtro Gaussiano
La máscara o filtro que responde a:
( x 2 y 2 ) / 4 2
e
w( x, y ) a b
e
s a s b
( s 2 t 2 ) / 4 2
0.05
% Máscara y filtro
>> w=fspecial(‘gaussian',3,0.5);
0
-3 -2 -1 0 1 2 3 >> I2=imfilter(I,w,'replicate');
5 15
0 10
-5 5
-10 0
-15 -5
5 5
4 5 4 5
3 4 3 4
3 3
2 2 2 2
t 1 1 t 1 1
s s
Laplaciana de la gausiana (III)
Mejorando detalles del tipo de filtros
>> w=fspecial('log',5,0.4)
>> [x, y]=meshgrid(-2:1:2)
>> [xi, yi]=meshgrid(-2:.05:2);
>> zi = interp2(x,y,z,xi,yi);
>> surf(xi,yi,zi)
-5
-10
-15
5
4 5
3 4
3
2 2
t 1 1
s
Máscaras con fspecial
Disco
>> w = fspecial('disk',4)
Promedio
>> w = fspecial('average',5)
w=
0.0400 0.0400 0.0400 0.0400 0.0400
0.0400 0.0400 0.0400 0.0400 0.0400
0.0400 0.0400 0.0400 0.0400 0.0400
0.0400 0.0400 0.0400 0.0400 0.0400
0.0400 0.0400 0.0400 0.0400 0.0400
>> 1/25
ans =
0.0400
Ejemplo: Promedio
>> w=fspecial('average');
Imagen Original Resultado del Filtro
Máscaras con fspecial (II)
Gausiana Laplaciana de la gausiana
>>z = fspecial('gaussian',5,0.7) >> z = fspecial('log',5,0.7)
Ejemplo: Filtro Gaussiano
>> w=fspecial('gaussian');
Máscara: w =
[1 2 1
0 0 0
-1 -2 -1]
Acentuar transiciones verticales: Transpuesta de la matriz
Ejemplo: Filtro Prewit
>> w=fspecial('prewitt');
Imagen Original Resultado del Filtro
Ejemplo: Filtro Sobel
>> w=fspecial('sobel');
>> hp=transp(w); % Acentúa vertical
Imagen Original Resultado del Filtro
Filtros no lineales
Filtro lineal
a b
g ( x, y) w ( s, t ) f ( x s, y t )
s a t b
Filtro no lineal
Valor de los píxeles
Bloque de píxeles
17 24 1 8 15
1 1 1
23 5 7 14 16
1 1 1
4 6 13 20 22 1 1 1
10 12 19 21 3
11 18 25 2 9 >>B = nlfilter(A, [m n], función_nl)
ˆf ( x, y ) 1
g ( s, t )
mn ( s ,t )S xy
A= B=
A = imread(‘imagen.jpg'); 1 2 3 1.3333 2.3333 1.7778
fun = @(x) mean(x(:)); 4 5 6 3.0000 5.0000 3.6667
B = nlfilter(A,[3 3],fun); 7 8 9 2.6667 4.3333 3.1111
Filtros no lineales (II)
Ejemplo de Filtro de Media aritmética
Imagen original Media aritmética
Filtros no lineales (III)
Filtro de Media geométrica
1
mn
fˆ ( x, y ) g ( s, t )
( s ,t )S xy
fˆ ( x, y )
g ( s ,
( s ,t )S xy
t ) Q
Frente a ruido:
Sal y Pimienta
Filtros usando Simulink
Filtro mediana
Se define “fspecial’
Filtros usando Simulink (IV)
Filtros usando Simulink (V)
Video de una cámara conectada ó archivo.avi: Ver vipedge, sustituir por 2-D FIR Filter
Realzado aplicando
Unsharp Masking
Pasos
1.- Desenfocar la imagen original (filtro promedio, etc..)
2.- Sustraer a la imagen original la imagen desenfocada
(se obtiene la máscara)
3.- Adicionar a la imagen original la máscara
h=fspecial('average',5);
II=imfilter(I,h);
III=imsubtract(I,II);
IV=imadd(I,III);
Realzado aplicando
Unsharp Masking (II)
>> w = fspecial('laplacian',0) w=
>> III = im2double(I) - imfilter(im2double(I), w); 0 1 0
1 -4 1
0 1 0
Realzado aplicando
Filtrado Highboost
Pasos
1.- Desenfocar la imagen original (filtro promedio, etc..)
f f
2.- Sustraer a la imagen original la imagen desenfocada
(se obtiene la máscara)
g masc ( x, y) f f
3.- Adicionar a la imagen original la máscara
g ( x, y) f k * g masc ( x, y)
k=1 k=3