Вы находитесь на странице: 1из 78

Deteccin de bordes y

discontinuidades

Filtrado y deteccin de bordes

Filtros pasobajo:
Asemeja el nivel de gris del pxel con el entorn
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+1,y)
x

f(x,y+1)

Gradiente (II)
Magnitud del vector gradiente

Gx 2
Gy 2

M ( x, y ) 2 2

( x, y ) tan 1 (1) 450

( x, y ) 90 45
0

1350

Direccin
del vector
gradiente

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

Gx

M x, y
Gx G y

Aplicacin del Gradiente (II)


Aplicacin de Umbral
T = 33% de max{|Gx|, |Gy|}

1
T
MN

2
M
(
x
,
y
)

x 1 y 1

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

Equivalencia

[BW,umbral,gv,gh] = edge(I,'prewitt')
>> gh=fspecial('prewitt')
>> gv=gh'

gh =
1
0
-1

1
0
-1

1
0
-1

gv =
1
1
1

0
0
0

-1
-1
-1

% Se aplican filtros
III=imfilter(II,gh);
IV=imfilter(II,gv);
% Obtiene el gradiente
V=abs(III)+abs(IV);

Mscaras de Prewitt (II)


Magnitud predominante?

Diagonal izquierda

Diagonal derecha

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

% 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%

II

Mscaras de Kirsch (III)

Mscaras de Kirsch (IV)

Mscaras de Kirsch (V)


Magnitud predominante?

G ( x, y )V max M 0 , M 180

G ( x, y ) D max M 45 , M 225

G ( x, y ) H max M 90 , M 270

G ( x, y ) I max M 135 , M 315

Mscaras de Robinson
Una negada de la otra, menos costoso computacionalmente

Kirsch vs Robinson
Comparacin de mscaras a 45o

1.5

3
2

0.5

-0.5

-1

-1

-2
-3
1

-1.5
0.5
0.5

0
0

-0.5

-0.5
-1

-1

-2
1

0.5

-0.5

-1

-1

-0.5

0.5

Comparacin entre mscaras


Lneas verticales
Roberts

Kirsch

Prewitt

-45o
Kirsch
Roberts

Prewitt
Robinson

Robinson

Sobel

Sobel

Gradiente basado en derivada


de segundo orden
2
2

f
(
x
,
y
)

f ( x, y )
2
f ( x, y )

2
x
y 2

Operador
Laplaciano

Segunda derivada en los puntos x+1 e y+1

f
f ( x 1) f ( x)
x

f
f ( y 1) f ( y )
y

2 f
f ( x 2) f ( x 1) f ( x 1) f ( x)
x 2

2 f
f ( y 2) f ( y 1) f ( y 1) f ( y )
2
y

Segunda derivada en los puntos x e y


2 f
f ( x 1) f ( x 1) 2 f ( x)
2
x

2 f
f ( y 1) f ( y 1) 2 f ( y )
2
y

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

-1

-1

-1

-4

-8

-1

-1

-1

-1

-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
Lo anterior equivale a aplicar la siguiente mscara

-8

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]
>> ww=-w
>> II=imfilter(I,w);
>> III=imfilter(I,ww);

w=
-1
-1
-1

Si R ( x, y ) T

de otra forma

g ( x, y )

-1
8
-1

-1
-1
-1

Deteccin de lneas
En una direccin especfica
% Se definen las mscaras
w(:,:,1)=[-1, -1, -1; 2, 2, 2; -1, -1, -1];
w(:,:,3)=rot90(w(:,:,1));
w(:,:,2)=[-1, -1, 2; -1, 2, -1; 2, -1, -1];
w(:,:,4)=rot90(w(:,:,2));

% 0o
% 90 o
% 45o
% -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
z1

z2

Z3

z4

z5

z6

z7

Z8

z9

Aplicacin del gradiente

Roberts

f
Gx
z8 z 5
x

Gy

f
z 6 z5
y

M1

f
Gx
z9 z 5
x

f
Gy
z8 z 6
y

M2

M final max M 1 , M 2

Deteccin de bordes (II)


z1

z2

Z3

z4

z5

z6

z7

Z8

z9

Gx

Aplicacin del gradiente (Prewitt)


Sobel

f
z7 2 z8 z9 z1 2 z 2 z3
x

f
Gy
z3 2 z6 z9 z1 2 z 4 z7
y

Gx

f
z7 z8 z9 z1 z 2 z3
x

Gy

f
z3 z6 z9 z1 z 4 z7
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

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
G ( x, y ) e

x2 y2

2
2

2
2

G
(
x
,
y
)

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

2
x
y 2

G ( x, y )
x
2e
x

x2 y 2

2
2

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


2

G ( x, y )
y
2e
y

x2 y2

2
2

x2 y 2
2
2

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


2

x2 y2

2
2

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

e
2
2
4
x
y

x2 y2

2
2

Deteccin de bordes (VIII)


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

e
2
2
4
x
y

2 G ( x, y )

x2 y 2
2
2

0.7

2 2
Cruces por cero

Deteccin de bordes (IX)


G ( x, y )
2

2 2

Laplaciana de la gausiana
0.7
>> w=fspecial('log',5,.7)
w=
0.0034 0.0338 0.0697
0.0338 0.1800 0.0105
0.0697 0.0105 -1.3250
0.0338 0.1800 0.0105
0.0034 0.0338 0.0697
>> sum(w(:))
-6.0715e-018

0.0338
0.1800
0.0105
0.1800
0.0338

0.0034
0.0338
0.0697
0.0338
0.0034

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

G ( x, y ) e

x2 y2

2
2

Aplicar la mscara laplaciana


1

-8

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

1
DoG ( x, y )
e
2
2 1

x2 y2


2
2 1

e
2
2 2

Debe cumplirse:

1 2

x2 y2


2
2 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

w x, y e

x2 y2

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

-b

-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

f(x, y-1)

f(x, y)

f(x, y+1)

-b

f(x+1, y-1)

f(x+1, y)

f(x+1, y+1)

-a

g ( x, y)

w ( s, t ) f ( x s, y t )

s at b

x1

x2

x3

x4

x5

x6

x7

x8

x9

Obtencin de coeficientes de
la mscara (III)
-a

-b

-a

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

0 a

a b

-a

-b -a

x1

x2

x3

x4

x5

x6

x7

x8

x9

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
-2a-b
-b

-b
b
0 2a
+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

g t ( x, y ) axa bxb
xa 2( x9 x6 x1 x4 )
xb ( x6 x4 x8 x2 x9 x1 x3 x7 )
a
G X
b

a
1 T
T

X
X
X G
b

-2a-b
-2a-b
-b

-b
b
0 2a
+b
b 2a

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);

Вам также может понравиться