You are on page 1of 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
y

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

x
Gradiente (II)
Magnitud del vector gradiente

Direccin
Gx 2
( x, y) tan 1 (1) 450 del vector
Gy 2
( x, y) 90 45
0 0 gradiente
M ( x, y ) 2 2

1350
Gradiente (III)
Magnitud del vector gradiente Direccin del vector gradiente

% 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));
Aplicacin del Gradiente

Gy

M x, y
Gx
Gx G y
Aplicacin del Gradiente (II)
Aplicacin de Umbral
N M
1
T = 33% de max{|Gx|, |Gy|} T
MN
M ( x, y)
x 1 y 1
2

V=edge(II,'roberts');
Representacin del gradiente
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));

Referencia del programa MATLAB


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') Equivalencia

% Se aplican filtros
gh = gv =
>> gh=fspecial('prewitt') III=imfilter(II,gh);
1 1 1 1 0 -1
>> gv=gh' IV=imfilter(II,gv);
0 0 0 1 0 -1
% Obtiene el gradiente
-1 -1 -1 1 0 -1
V=abs(III)+abs(IV);
Mscaras de Prewitt (II)
Magnitud predominante?

Diagonal izquierda Diagonal derecha

M ( x, y) max M H , MV , M I , M D
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) Resultado del filtro


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%
II e
Mscaras de Kirsch (III)
Mscaras de Kirsch (IV)
Mscaras de Kirsch (V)
Magnitud predominante?

G( x, y)V max M 0 , M180 G( x, y) H max M 90 , M 270


G( x, y) D max M 45 , M 225 G( x, y) I max M135 , M 315
Mscaras de Robinson
Una negada de la otra, menos costoso computacionalmente
Kirsch vs Robinson
Comparacin de mscaras a 45o

2
5
1.5
4

1
3

2 0.5

1 0

0 -0.5

-1 -1

-2 1
-1.5
0.5
-3 1
0 -2 0.5
1
0.5 -0.5 1 0
0 0.5
-0.5 -1 0 -0.5
-1 -0.5
-1 -1
Comparacin entre mscaras
Lneas verticales -45o

Kirsch Kirsch
Roberts Roberts

Prewitt Prewitt
Robinson Robinson

Sobel Sobel
Gradiente basado en derivada
de segundo orden
Operador 2
f ( x , y ) 2
f ( x, y )
f ( x, y )
2

Laplaciano x 2
y 2
Segunda derivada en los puntos x+1 e y+1
f f
f ( x 1) f ( x) f ( y 1) f ( y )
x y
2 f 2 f
f ( x 2) f ( x 1) f ( x 1) f ( x) f ( y 2) f ( y 1) f ( y 1) f ( y)
x 2
y 2

Segunda derivada en los puntos x e y


2 f 2 f
f ( x 1) f ( x 1) 2 f ( x) f ( y 1) f ( y 1) 2 f ( y)
x 2
y 2
Funcin que define la mscara

2 f ( x, y) f ( x 1, y) f ( x 1, y) f ( x, y 1) f ( x, y 1) 4 f ( x, y)
Gradiente basado en derivada
de segundo orden (II)
2 f ( x, y) f ( x 1, y) f ( x 1, y) f ( x, y 1) f ( x, y 1) 4 f ( x, y)

Mscaras equivalentes

0 1 0 1 1 1 0 -1 0 -1 -1 -1
1 -4 1 1 -8 1 -1 4 -1 -1 8 -1
0 1 0 1 1 1 0 -1 0 -1 -1 -1
Gradiente basado en derivada
de segundo orden (III)
Operaciones de imagen filtrada sobre
original para mejora de nitidez
1 1 1
Si centro de
1 -8 1
mscara negativo
1 1 1
Si centro de
mscara positivo

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);
Ruido
Doble borde
No se detecta direccin

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

1 Si R( x, y ) T
g ( x, y )
0 de otra forma
Deteccin de lneas
En una direccin especfica
% Se definen las mscaras
w(:,:,1)=[-1, -1, -1; 2, 2, 2; -1, -1, -1]; % 0o
w(:,:,3)=rot90(w(:,:,1)); % 90o
w(:,:,2)=[-1, -1, 2; -1, 2, -1; 2, -1, -1]; % 45o
w(:,:,4)=rot90(w(:,:,2)); % -45o

% 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
z1 z2 Z3 Aplicacin del gradiente
z4 z5 z6
z7 Z8 z9

Roberts

f f
Gx z8 z 5 Gy z 6 z5 M1
x y

f f
Gx z9 z5 Gy z8 z6 M2
x y

M final max M1 , M 2
Deteccin de bordes (II)
z1 z2 Z3 Aplicacin del gradiente (Prewitt)
z4 z5 z6
z7 Z8 z9 Sobel

f
Gx z7 z8 z9 z1 z 2 z3
f x
Gx z7 2 z8 z9 z1 2 z2 z3
x
f
f Gy z3 z6 z9 z1 z4 z7
Gy z3 2 z6 z9 z1 2 z4 z7 y
y
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)

IV V

III

IVp=IV>0.65*max(IV(:)); Vp=V>0.53*max(V(:));
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
x2 y 2


2
G ( x , y ) 2
G( x, y)
G ( x, y ) e 2
2
G( x, y)
2

x 2
y 2
x2 y2 x2 y2

G( x, y) x
2

G ( x, y ) y 2
2
2 e
2

2 e
x y
x2 y2 x2 y2
G ( x, y ) x
2
1 2
2
2

G ( x, y ) y
2 2
1
2


4 2 e
2

4 2 e
x y
2 2

Laplaciana de la gausiana
x2 y2
G ( x, y ) G( x, y ) x y 2
2 2 2 2 2
2
2


G( x, y )
2
e

x 2
y 2
4

Deteccin de bordes (VIII)
Laplaciana de la gausiana
x2 y2
G ( x, y ) G( x, y ) x y 2
2 2 2 2 2
2
2


2G( x, y ) e

x 2
y 2
4

2G( x, y) 0.7

2 2

Cruces por cero


Deteccin de bordes (IX)
Laplaciana de la gausiana
G( x, y)
2
0.7
>> 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
2 2
>> 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) >> -fspecial('log', 5, .6)


ans = ans =
-0.2475 -0.2475 -0.2479 -0.2475 -0.2475 -0.0056 -0.0192 -0.0483 -0.0192 -0.0056
-0.2475 -0.3545 -1.2336 -0.3545 -0.2475 -0.0192 -0.2758 -0.2426 -0.2758 -0.0192
-0.2479 -1.2336 10.3145 -1.2336 -0.2479 -0.0483 -0.2426 2.4429 -0.2426 -0.0483
-0.2475 -0.3545 -1.2336 -0.3545 -0.2475 -0.0192 -0.2758 -0.2426 -0.2758 -0.0192
-0.2475 -0.2475 -0.2479 -0.2475 -0.2475 -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
x2 y 2


2
2
G ( x, y ) e

Aplicar la mscara laplaciana


1 1 1
1 -8 1
1 1 1
Detectar los cruce por cero
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
x2 y2 x2 y2



1 2 12 1 2 22
DoG ( x, y ) e
e
2 2
1 2 2
2

Debe cumplirse:
1 2
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
x2 y 2

wx, y e 2 2

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:


T1 M ( x, y) T2 M ( x, y) T2
Bordes dbiles Bordes fuertes
4.- Se incorporan los pxeles dbiles 8 conectados a los pxeles fuertes
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
-a 0 a
-b 0 b
-a 0 a
Sobel

Neurona

a = [0.5; 1.5] = 0.5+(1./(1+exp(-pa)));

b = [0.5; 2.5] = 0.5+2*(1./(1+exp(-pb)));


Obtencin de coeficientes de
la mscara (II)
f(x-1, y-1) f(x-1, y) f(x-1, y+1) -a 0 a
f(x, y-1) f(x, y) f(x, y+1) -b 0 b
f(x+1, y-1) f(x+1, y) f(x+1, y+1) -a 0 a

a b
g ( x, y) w ( s, t ) f ( x s, y t )
s a t b

x1 x2 x3
x4 x5 x6
x7 x8 x9
Obtencin de coeficientes de
la mscara (III)
-a 0 a
-b 0 b x1 x2 x3
-a 0 a x4 x5 x6
-a -b -a x7 x8 x9
0 0 0
a b a

-b -a 0
-a 0 a
0 a b

0 a b
-a 0 a
-b -a 0
Obtencin de coeficientes de
la mscara (IV)
Borde total = Suma de lneas en cada orientacin

Ncleo estimador
Obtencin de coeficientes de
la mscara (V)
Ncleo estimador

Coeficientes de la mscara resultante

-2a-b -b b
-2a-b 0 2a+b
-b b 2a+b
Obtencin de coeficientes de
la mscara (VI)
Ncleo estimador

Componentes derivativos
Obtencin de coeficientes de
la mscara (VII)
Matriz de entrada-salida

f(x-1, y-1) f(x-1, y) f(x-1, y+1) x1 x2 x3


f(x, y-1) f(x, y) f(x, y+1) x4 x5 x6
f(x+1, y-1) f(x+1, y) f(x+1, y+1) x7 x8 x9

El nmero de filas ser semejante al nmero de pxeles


La imagen original y la que contiene bordes tendrn la misma dimensin
Obtencin de coeficientes de
la mscara (VIII)
Sustituir en algoritmo de aprendizaje supervisado

Ncleo estimador

Adaptacin de parmetros (gradiente)


Obtencin de coeficientes de
la mscara (IX)
Solucin de sistema de ecuaciones lineales

Ncleo estimador

gt ( x, y) axa bxb
xa 2( x9 x6 x1 x4 )
xb ( x6 x4 x8 x2 x9 x1 x3 x7 )
-2a-b -b b
a a
G X b
XT
X
1 T
X G -2a-b 0 2a+b
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
Fuente Representacin de lnea en forma normal
Transformada de Hough (II)

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)

Valores de Rho y Theta


>> RT=[Rho(1,P(1,1)),Theta(1,P(1,2))]

Lnea definida en
cos
y x
sen sen
Transformada de Hough (IV)

Fuente

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