Está en la página 1de 78

Deteccin de bordes y

discontinuidades
Filtrado y deteccin de bordes
Filtros pasobajo:
Asemeja el nivel de gris del pxel con el entorno
Reduce ruido
Aumenta homogeneidad
Se pierde detalle (bordes se difuminan)
Filtro promedio:
Filtro promedio ponderado:
Filtrado y deteccin de bordes (II)
Filtros pasoalto:
Enfatizan diferencias en el nivel de gris
Aumenta ruido
Estimula los lmites o bordes
Gausiana Laplaciana de la gausiana
Gradiente
Deteccin de bordes:
Enfatizan los bordes que rodean al objeto
Filtros pasoalto
Gradiente: Variaciones del nivel de gris
en pxeles consecutivos
f(x,y) f(x,y+1)
f(x+1,y)
x
y
Gradiente (II)
Magnitud del vector gradiente
Direccin
del vector
gradiente
0 0
45 90 ) , ( = y x o
2
2
=
=
y
x
G
G
2 2 ) , ( = y x M
0 1
45 ) 1 ( tan ) , ( = =

y x o
0
135
Gradiente (III)
% Determina gx y gy
function [gx,gy]=gradiente(I)
hx=[-1 0;1 0];
hy=hx';
%filtro
gx=imfilter(I,hx,'replicate','conv');
gy=imfilter(I,hy,'replicate','conv');
%end

% Obtiene la magnitud del gradiente
II=abs(gx)+abs(gy);
%Obtiene la direccin del gradiente
VI=atan(double(gy)/double(gx));
Magnitud del vector gradiente
Direccin del vector gradiente
Aplicacin del Gradiente
y
G
x
G
( )
y x
G G
y x M
+
= ,
Aplicacin del Gradiente (II)
V=edge(II,'roberts');
T = 33% de max{|Gx|, |Gy|}

= =
=
N
x
M
y
y x M
MN
T
1 1
2
) , (
1
Aplicacin de Umbral
Representacin del gradiente
Referencia del programa MATLAB
clear;close all;
I=imread('rice.png');
fim=mat2gray(I);
%Magnitud del gradiente
figure('name','Magnitud del Gradiente');
[gx,gy]=gradiente(fim);
imshow(abs(gx)+abs(gy));

%Dibuja gradiente en regin
[gx,gy]=gradiente(fim);
figure('name','Gradiente');
imshow(fim(1:50,1:50),'InitialMagnification','fit');
hold on;
quiver(gx(1:50,1:50),gy(1:50,1:50));

Representacin del gradiente (II)
Magnitud del gradiente
Direccin del gradiente
Mscaras de Roberts

La suma de los componentes de las mscaras es cero:
Devuelve cero en reas de intensidad constante
Mscaras de Roberts (II)

Mscaras de Roberts (III)

%En espacio de trabajo
[BW,umbral,g45,g135] = edge(I,'roberts',...)
g45 = imfilter(I,[1 0; 0 -1]/2,'replicate');
g135 = imfilter(I,[0 1;-1 0]/2,'replicate');

>umbral
Mscaras de Roberts (IV)

Verificar tipo de datos de la imagen
Mscaras de Prewitt

Extensin a mscaras de tamao 3x3
Pxel a alterar en centro de la vecindad
[BW,umbral,gv,gh] = edge(I,'prewitt')
>> gh=fspecial('prewitt')
>> gv=gh'
gh =
1 1 1
0 0 0
-1 -1 -1
gv =
1 0 -1
1 0 -1
1 0 -1
% Se aplican filtros
III=imfilter(II,gh);
IV=imfilter(II,gv);
% Obtiene el gradiente
V=abs(III)+abs(IV);
Equivalencia
Mscaras de Prewitt (II)

Magnitud predominante?
Diagonal izquierda Diagonal derecha
{ }
D I V H
M M M M y x M , , , max ) , ( =
Direccin predominante
La equivalente a la magnitud predominante
Mscaras de Prewitt (III)

Mscaras de Prewitt (IV)

Influencia del umbral
Mscaras de Sobel

Reforzar el valor del pxel central
Reduce la influencia del ruido en la deteccin
de discontinuidades
Prewitt
Sobel
Mscaras de Sobel (II)

>> w=fspecial('sobel')
Mscaras de Kirsch

8 mscaras que representan 8 orientaciones
Mscaras de Kirsch (II)

% Define mscaras de Kirsch
k(:,:,1) = [-3 -3 5; -3 0 5; -3 -3 5];
k(:,:,2) = [-3 5 5; -3 0 5; -3 -3 -3];
for i=3:8
k(:,:,i) = rot90(k(:,:,i-2));
end
% Aplica los 8 filtros (x: imagen)
for i=1:8
resultado(:,:,i) = imfilter(I,k(:,:,i),replicate);
end

% Selecciona el mximo de cada filtro
II= max(abs(resultado),[],3);

%Aplica umbral
e=II>.5*max(II(:)); %50%
Resultado del filtro
II e
Mscaras de Kirsch (III)

Mscaras de Kirsch (IV)

Mscaras de Kirsch (V)

{ }
180 0
, max ) , ( M M y x G
V
=
{ }
225 45
, max ) , ( M M y x G
D
=
{ }
270 90
, max ) , ( M M y x G
H
=
{ }
315 135
, max ) , ( M M y x G
I
=
Magnitud predominante?
Mscaras de Robinson

Una negada de la otra, menos costoso computacionalmente
Kirsch vs Robinson

-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-3
-2
-1
0
1
2
3
4
5
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Comparacin de mscaras a 45
o
Comparacin entre mscaras

Roberts
Prewitt
Sobel
Kirsch
Robinson
Kirsch
Robinson
Roberts
Prewitt
Sobel
Lneas verticales -45
o
Gradiente basado en derivada
de segundo orden

2
2
2
2
2
) , ( ) , (
) , (
y
y x f
x
y x f
y x f
c
c
+
c
c
= V
) , ( 4 ) 1 , ( ) 1 , ( ) , 1 ( ) , 1 ( ) , (
2
y x f y x f y x f y x f y x f y x f + + + + + = V
Funcin que define la mscara
) ( ) 1 ( x f x f
x
f
+ =
c
c
) ( ) 1 ( ) 1 ( ) 2 (
2
2
x f x f x f x f
x
f
+ + + + =
c
c
Segunda derivada en los puntos x+1 e y+1
Segunda derivada en los puntos x e y
) ( 2 ) 1 ( ) 1 (
2
2
x f x f x f
x
f
+ + =
c
c
) ( ) 1 ( y f y f
y
f
+ =
c
c
) ( ) 1 ( ) 1 ( ) 2 (
2
2
y f y f y f y f
y
f
+ + + + =
c
c
) ( 2 ) 1 ( ) 1 (
2
2
y f y f y f
y
f
+ + =
c
c
Operador
Laplaciano
Gradiente basado en derivada
de segundo orden (II)

) , ( 4 ) 1 , ( ) 1 , ( ) , 1 ( ) , 1 ( ) , (
2
y x f y x f y x f y x f y x f y x f + + + + + = V
0 1 0
1 -4 1
0 1 0
Mscaras equivalentes
1 1 1
1 -8 1
1 1 1
0 -1 0
-1 4 -1
0 -1 0
-1 -1 -1
-1 8 -1
-1 -1 -1
Gradiente basado en derivada
de segundo orden (III)

Operaciones de imagen filtrada sobre
original para mejora de nitidez
Si centro de
mscara negativo
Si centro de
mscara positivo
1 1 1
1 -8 1
1 1 1
Lo anterior equivale a aplicar la siguiente mscara
Primera vs segunda derivada

a=[0:1/255:1];
for i=1:400
b(i,1:256)=a(1,:);
end
aa=zeros(400,72);
bb=ones(400,72)*255;
ent=[aa b bb];
Primera vs segunda derivada (II)

Imagen Fila Primera derivada Segunda derivada
Primera vs segunda derivada (III)

Detectar bordes
primera derivada

Aplicar umbral
de intensidad
a la imagen filtrada
Primera vs segunda derivada (IV)

Detectar bordes
segunda derivada

Deteccin de los
cruces por cero
a la imagen filtrada
Cruce por cero
Primera vs segunda derivada (V)

Influencia del ruido
Primera vs segunda derivada (VI)

Primera derivada
Primera vs segunda derivada (VII)

Segunda derivada
Ms susceptible al ruido
Menos utilizada para detectar bordes
Primera vs segunda derivada (VIII)

% Filtro de Sobel (primera derivada)
>> III=edge(II,sobel');
% Filtro de segunda derivada
>> h=[1 1 1; 1 -8 1; 1 1 1];
>>IV=edge(II, 'zerocross', h);
III
Ruido
Doble borde
No se detecta direccin
IV
Primera vs segunda derivada (IX)

Algunas conclusiones sobre derivadas

La primera derivada devuelve bordes ms gruesos
La segunda derivada discrimina ms adecuadamente a
lneas finas, puntos aislados y ruido
La segunda derivada devuelve doble respuesta a un
cambio de intensidad (valor absoluto: doble borde)
El cambio de signo de la segunda derivada indica si el cambio
de intensidad es de negro a blanco o viceversa
Deteccin de puntos

>> I=imread('discont2.jpg');
>> w=[-1, -1, -1; -1, 8, -1; -1, -1, -1]
>> ww=-w
>> II=imfilter(I,w);
>> III=imfilter(I,ww);
w =
-1 -1 -1
-1 8 -1
-1 -1 -1
Se aplica el Laplaciano (segunda derivada)

>
=
f orma otra de
T y x R Si
y x g
0
) , ( 1
) , (
Deteccin de lneas

En una direccin especfica
% Se definen las mscaras
w(:,:,1)=[-1, -1, -1; 2, 2, 2; -1, -1, -1]; % 0
o

w(:,:,3)=rot90(w(:,:,1)); % 90
o

w(:,:,2)=[-1, -1, 2; -1, 2, -1; 2, -1, -1]; % 45
o

w(:,:,4)=rot90(w(:,:,2)); % -45
o


% Se calcula la media
for i=1:4
II(:,:,i) = imfilter(I,w(:,:,i),'symmetric','same');
maxima_intensidad(1,i)=mean2(II(:,:,i))
figure;imshow(II(:,:,i));
end
La mayor media indica orientacin predominante de las lneas
Deteccin de lneas (II)

+
Deteccin de lneas (III)

En cualquier direccin
Efecto de doble lnea como resultado de aplicar el Laplaciano
w=fspecial('laplacian', 0)
III=imfilter(II,w));
Deteccin de lneas (IV)

En cualquier direccin
Solucin I: Mantiene la doble lnea
w=fspecial('laplacian',0)
III=imfilter(II,w);
IV=abs(III)
Deteccin de lneas (V)

En cualquier direccin
Solucin II: Seleccionar una lnea
w=fspecial('laplacian', 0)
III=imfilter(II,w);
V=III>0.23*(max(III(:)));
Deteccin de bordes

Aplicacin del gradiente z
1
z
2
Z
3

z
4
z
5
z
6

z
7
Z
8
z
9

5 8
z z
x
f
G
x
=
c
c
=
5 6
z z
y
f
G
y
=
c
c
=
5 9
z z
x
f
G
x
=
c
c
=
6 8
z z
y
f
G
y
=
c
c
=
Roberts
1
M
2
M
{ }
2 1
, max M M M
final
=
Deteccin de bordes (II)

Aplicacin del gradiente (Prewitt) z
1
z
2
Z
3

z
4
z
5
z
6

z
7
Z
8
z
9

( )
3 2 1 9 8 7
z z z z z z
x
f
G
x
+ + + + =
c
c
=
( )
7 4 1 9 6 3
z z z z z z
y
f
G
y
+ + + + =
c
c
=
Sobel
( )
3 2 1 9 8 7
2 2 z z z z z z
x
f
G
x
+ + + + =
c
c
=
( )
7 4 1 9 6 3
2 2 z z z z z z
y
f
G
y
+ + + + =
c
c
=
Deteccin de bordes (III)

Combinacin de pxeles de diferentes bordes
% Filtrado utilizando mscaras de Roberts
>> II45 = imfilter(I,[1 0; 0 -1],'symmetric');
>> II45p = imfilter(I,[-1 0; 0 1],'symmetric');
>> II135 = imfilter(I,[0 1;-1 0],'symmetric');
>> II135p = imfilter(I,[0 -1;1 0],'symmetric');
% Combinacin de imgenes filtradas
>>III=imlincomb(1,II45,1,II45p,1,II135,1,II135p);
% Mximo entre gradientes
>>grad_hv=abs(II45)+abs(135);
>>grad_di=abs(II45p)+abs(II135p);
>>IV=max(grad_hv, grad_di);
% Mximo entre todos
>>V=max(max(abs(II45),abs(135)), max(abs(II135),abs(II135p)));
Deteccin de bordes (IV)

III
IV
V
Vp=V>0.53*max(V(:)); IVp=IV>0.65*max(IV(:));
Deteccin de bordes (V)

Combinacin y seleccin por umbral
% Se define el umbral
umbral=0.3;
% Se definen las mscaras (Sobel)
w(:,:,1)=fspecial('sobel');
w(:,:,3)=rot90(w(:,:,1));
w(:,:,2)=[-2, -1, 0; -1, 0, 1; 0, 1, 2];
w(:,:,4)=rot90(w(:,:,2));
% Se aplica Sobel en las cuatro orientaciones, con umbral
for i=1:4
II(:,:,i) = imfilter(double(I),w(:,:,i),'symmetric','same');
II(:,:,i) = II(:,:,i) >= umbral.*max(abs(II(:)));
figure;imshow(II(:,:,i));
end
% Imagen resultante
II=imlincomb(1,II(:,:,1), 1,II(:,:,2), 1,II(:,:,3), 1,II(:,:,4));
figure;
imshow(II);
Deteccin de bordes (VI)

Resultado de la deteccin de bordes para diferentes umbrales
Deteccin de bordes (VII)

Mtodo de Marr-Hildreth
|
|
.
|

\
|
+

=
2
2 2
2
) , (
o
y x
e y x G
2
2
2
2
2
) , ( ) , (
) , (
y
y x G
x
y x G
y x G
c
c
+
c
c
= V
|
|
.
|

\
|
+

=
c
c
2
2 2
2
2
) , (
o
o
y x
e
x
x
y x G
|
|
.
|

\
|
+

=
c
c
2
2 2
2
2 4
2
2
2
1 ) , (
o
o o
y x
e
x
x
y x G
|
|
.
|

\
|
+

=
c
c
2
2 2
2
2
) , (
o
o
y x
e
y
y
y x G
|
|
.
|

\
|
+

=
c
c
2
2 2
2
2 4
2
2
2
1 ) , (
o
o o
y x
e
y
y
y x G
|
|
.
|

\
|
+

+
=
c
c
+
c
c
= V
2
2 2
2
4
2 2 2
2
2
2
2
2
2 ) , ( ) , (
) , (
o
o
o
y x
e
y x
y
y x G
x
y x G
y x G
Laplaciana de la gausiana
Deteccin de bordes (VIII)

|
|
.
|

\
|
+

+
=
c
c
+
c
c
= V
2
2 2
2
4
2 2 2
2
2
2
2
2
2 ) , ( ) , (
) , (
o
o
o
y x
e
y x
y
y x G
x
y x G
y x G
Laplaciana de la gausiana
7 . 0 = o ) , (
2
y x G V
Cruces por cero
o 2 2
Deteccin de bordes (IX)

Laplaciana de la gausiana
7 . 0 = o
) , (
2
y x G V
o 2 2
>> w=fspecial('log',5,.7)
w =
0.0034 0.0338 0.0697 0.0338 0.0034
0.0338 0.1800 0.0105 0.1800 0.0338
0.0697 0.0105 -1.3250 0.0105 0.0697
0.0338 0.1800 0.0105 0.1800 0.0338
0.0034 0.0338 0.0697 0.0338 0.0034
>> sum(w(:))
-6.0715e-018
La suma de los componentes de la mscara es cero
Es isotrpica (invariante a la rotacin)
Deteccin de bordes (X)

Deteccin de cruces por cero laplaciana de la gausiana
>> -fspecial('log', 5, .4)
ans =
-0.2475 -0.2475 -0.2479 -0.2475 -0.2475
-0.2475 -0.3545 -1.2336 -0.3545 -0.2475
-0.2479 -1.2336 10.3145 -1.2336 -0.2479
-0.2475 -0.3545 -1.2336 -0.3545 -0.2475
-0.2475 -0.2475 -0.2479 -0.2475 -0.2475
>> -fspecial('log', 5, .6)
ans =
-0.0056 -0.0192 -0.0483 -0.0192 -0.0056
-0.0192 -0.2758 -0.2426 -0.2758 -0.0192
-0.0483 -0.2426 2.4429 -0.2426 -0.0483
-0.0192 -0.2758 -0.2426 -0.2758 -0.0192
-0.0056 -0.0192 -0.0483 -0.0192 -0.0056
Deteccin de bordes (XI)

>> III=edge(II, 'zerocross', 0.3, fspecial('laplacian',0.1));
>> IV=edge(II, 'zerocross', 0.3, fspecial('laplacian',0.9));
Ms ruidosa
Deteccin de bordes (XII)

Mtodo de Marr-Hildreth (otra propuesta)
Filtrar la imagen con una mscara equivalente a un filtro gausiano




Aplicar la mscara laplaciana




Detectar los cruce por cero
|
|
.
|

\
|
+

=
2
2 2
2
) , (
o
y x
e y x G
1 1 1
1 -8 1
1 1 1
Deteccin de bordes (XIII)

>> w=[1 1 1; 1 -8 1; 1 1 1];
>>III=edge(II, 'zerocross', 0.5, w);
Deteccin de bordes (XIV)

Diferencia de Gausianas
La Laplaciana de la gausiana puede aproximarse
a diferencia de filtros gausianos
|
|
|
.
|

\
|
+

|
|
|
.
|

\
|
+

=
2
2
2 2
2
1
2 2
2
2
2
2
2
1
2
1
2
1
) , (
o o
to to
y x y x
e e y x DoG
2 1
o o >
Debe cumplirse:
Deteccin de bordes (XV)

>> IV=imfilter(II,fspecial('gaussian',[3 3],.8));
>> V=imfilter(II,fspecial('gaussian',[3 3],.2));
>> VI=imsubtract(IV,V);
>> VI=VI>0.13*max(VI(:));
Mtodo de Canny

1.- Suavizar la imagen con filtro gausiano




2.- Obtener el mdulo y direccin del gradiente basado en
dos mscaras de Sobel, Prewitt o Roberts



Punto de borde: Existe mximo local en direccin del gradiente

3.- Supresin no maximal:


Bordes dbiles Bordes fuertes
4.- Se incorporan los pxeles dbiles 8 conectados a los pxeles fuertes
( )
2
2 2
2
,
o
y x
e y x w
+

=
2 1
) , ( T y x M T < s
2
) , ( T y x M >
Aplicacin de Canny

Kirsch (T=0.95M)
Canny
Mscaras de Frei-Chen

Subespacio borde
Subespacio lnea
Subespacio promedio
Obtencin de coeficientes de
la mscara

Prewitt
Sobel
-a 0 a
-b 0 b
-a 0 a
a = [0.5; 1.5] = 0.5+(1./(1+exp(-pa)));
b = [0.5; 2.5] = 0.5+2*(1./(1+exp(-pb)));
Neurona

f(x-1, y-1) f(x-1, y) f(x-1, y+1)
f(x, y-1) f(x, y) f(x, y+1)
f(x+1, y-1) f(x+1, y) f(x+1, y+1)

= =
+ + =
a
a s
b
b t
t y s x f t s w y x g ) , ( ) , ( ) , (
-a 0 a
-b 0 b
-a 0 a
x
1
x
2
x
3

x
4
x
5
x
6

x
7
x
8
x
9

Obtencin de coeficientes de
la mscara (II)

-a 0 a
-b 0 b
-a 0 a
-a -b -a
0 0 0
a b a
-b -a 0
-a 0 a
0 a b
0 a b
-a 0 a
-b -a 0
x
1
x
2
x
3

x
4
x
5
x
6

x
7
x
8
x
9

Obtencin de coeficientes de
la mscara (III)

Borde total = Suma de lneas en cada orientacin
Ncleo estimador
Obtencin de coeficientes de
la mscara (IV)

Ncleo estimador
Obtencin de coeficientes de
la mscara (V)
Coeficientes de la mscara resultante
-2a-b -b b
-2a-b 0 2a+b
-b b 2a+b

Ncleo estimador
Componentes derivativos
Obtencin de coeficientes de
la mscara (VI)

Matriz de entrada-salida
Obtencin de coeficientes de
la mscara (VII)
x
1
x
2
x
3

x
4
x
5
x
6

x
7
x
8
x
9

f(x-1, y-1) f(x-1, y) f(x-1, y+1)
f(x, y-1) f(x, y) f(x, y+1)
f(x+1, y-1) f(x+1, y) f(x+1, y+1)
El nmero de filas ser semejante al nmero de pxeles
La imagen original y la que contiene bordes tendrn la misma dimensin

Sustituir en algoritmo de aprendizaje supervisado
Obtencin de coeficientes de
la mscara (VIII)
Ncleo estimador
Adaptacin de parmetros (gradiente)

Solucin de sistema de ecuaciones lineales
Obtencin de coeficientes de
la mscara (IX)
Ncleo estimador
b a t
bx ax y x g + = ) , (
) ( 2
4 1 6 9
x x x x x
a
+ =
) (
7 3 1 9 2 8 4 6
x x x x x x x x x
b
+ + + =
(

=
b
a
X G ( ) G X X X
T T
b
a
1
=
(

-2a-b -b b
-2a-b 0 2a+b
-b b 2a+b

Obtencin de coeficientes de
la mscara (X)
mm =
-1.9216 -0.5584 0.5584
-1.9216 0 1.9216
-0.5584 0.5584 1.9216

>>IV=imfilter(II, mm, 'symmetric');

Transformada de Hough
Representacin de lnea en forma normal Fuente

Transformada de Hough (II)

u
Lnea
Puntos con similar Rho y Theta

Transformada de Hough (III)
Determina la transformada de Hough
>>[Hough,Theta,Rho] = hough(a);
Determina picos en la transformada
>> P = houghpeaks(H,1)
>> RT=[Rho(1,P(1,1)),Theta(1,P(1,2))]
Valores de Rho y Theta
Lnea definida en
u

u
u
sen sen
cos
+ = x y

Transformada de Hough (IV)
>>II=rgb2gray(I);
>> III=im2bw(II,.45);
>> [H,T,R] = hough(III);
>> P = houghpeaks(H,2);
Fuente

También podría gustarte