segmentación de imagenes

78
Detección de bordes y discontinuidades

Upload: omar-sanchez

Post on 15-Jun-2015

15.569 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Segmentación de imagenes

Detección de bordes y discontinuidades

Page 2: Segmentación de imagenes

Filtrado y detección de bordes

Filtros pasobajo:Asemeja el nivel de gris del píxel con el entornoReduce ruidoAumenta homogeneidadSe pierde detalle (bordes se difuminan)

Filtro promedio:

Filtro promedio ponderado:

Page 3: Segmentación de imagenes

Filtrado y detección de bordes (II)

Filtros pasoalto:Enfatizan diferencias en el nivel de gris Aumenta ruidoEstimula los límites o bordes

Gausiana Laplaciana de la gausiana

Page 4: Segmentación de imagenes

Gradiente

Detección de bordes:Enfatizan los bordes que rodean al objetoFiltros pasoalto

Gradiente: Variaciones del nivel de gris en píxeles consecutivos

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

f(x+1,y)

x

y

Page 5: Segmentación de imagenes

Gradiente (II)

Magnitud del vector gradiente

Dirección del vectorgradiente00 4590),( yx

2

2

y

x

G

G

22),( yxM

01 45)1(tan),( yx

0135

Page 6: Segmentación de imagenes

Gradiente (III)

% Determina gx y gyfunction [gx,gy]=gradiente(I)hx=[-1 0;1 0];hy=hx';%filtrogx=imfilter(I,hx,'replicate','conv');gy=imfilter(I,hy,'replicate','conv');%end

% Obtiene la magnitud del gradienteII=abs(gx)+abs(gy);%Obtiene la dirección del gradienteVI=atan(double(gy)/double(gx));

Magnitud del vector gradiente Dirección del vector gradiente

Page 7: Segmentación de imagenes

Aplicación del Gradiente

yG

xG

yx GG

yxM

,

Page 8: Segmentación de imagenes

Aplicación del Gradiente (II)

V=edge(II,'roberts');

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

N

x

M

y

yxMMN

T1 1

2),(1

Aplicación de Umbral

Page 9: Segmentación de imagenes

Representación del gradiente

Referencia del programa MATLAB

clear;close all;I=imread('rice.png');fim=mat2gray(I);%Magnitud del gradientefigure('name','Magnitud del Gradiente');[gx,gy]=gradiente(fim);imshow(abs(gx)+abs(gy)); %Dibuja gradiente en región[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));

Page 10: Segmentación de imagenes

Representación del gradiente (II)

Magnitud del gradiente

Dirección del gradiente

Page 11: Segmentación de imagenes

Máscaras de Roberts

La suma de los componentes de las máscaras es cero: Devuelve cero en áreas de intensidad constante

Page 12: Segmentación de imagenes

Máscaras de Roberts (II)

Page 13: Segmentación de imagenes

Máscaras 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

Page 14: Segmentación de imagenes

Máscaras de Roberts (IV)

Verificar tipo de datos de la imagen

Page 15: Segmentación de imagenes

Máscaras de Prewitt

Extensión a máscaras de tamaño 3x3Píxel 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 filtrosIII=imfilter(II,gh);IV=imfilter(II,gv);% Obtiene el gradienteV=abs(III)+abs(IV);

Equivalencia

Page 16: Segmentación de imagenes

Máscaras de Prewitt (II)

¿Magnitud predominante?

Diagonal izquierda Diagonal derecha

DIVH MMMMyxM ,,,max),(

Dirección predominanteLa equivalente a la magnitud predominante

Page 17: Segmentación de imagenes

Máscaras de Prewitt (III)

Page 18: Segmentación de imagenes

Máscaras de Prewitt (IV)

Influencia del umbral

Page 19: Segmentación de imagenes

Máscaras de Sobel

Reforzar el valor del píxel centralReduce la influencia del ruido en la detección

de discontinuidades

Prewitt

Sobel

Page 20: Segmentación de imagenes

Máscaras de Sobel (II)

>> w=fspecial('sobel')

Page 21: Segmentación de imagenes

Máscaras de Kirsch

8 máscaras que representan 8 orientaciones

Page 22: Segmentación de imagenes

Máscaras de Kirsch (II)

% Define máscaras de Kirschk(:,:,1) = [-3 -3 5; -3 0 5; -3 -3 5];k(:,:,2) = [-3 5 5; -3 0 5; -3 -3 -3];for i=3:8k(:,:,i) = rot90(k(:,:,i-2));end

% Aplica los 8 filtros (x: imagen)for i=1:8resultado(:,:,i) = imfilter(I,k(:,:,i),‘replicate’);end

% Selecciona el máximo de cada filtroII= max(abs(resultado),[],3);

%Aplica umbrale=II>.5*max(II(:)); %50%

Resultado del filtro

II e

Page 23: Segmentación de imagenes

Máscaras de Kirsch (III)

Page 24: Segmentación de imagenes

Máscaras de Kirsch (IV)

Page 25: Segmentación de imagenes

Máscaras de Kirsch (V)

1800 ,max),( MMyxG V

22545 ,max),( MMyxG D

27090 ,max),( MMyxG H

315135 ,max),( MMyxG I

¿Magnitud predominante?

Page 26: Segmentación de imagenes

Máscaras de Robinson

Una negada de la otra, menos costoso computacionalmente

Page 27: Segmentación de imagenes

Kirsch vs Robinson

-1

-0.5

0

0.5

1

-1-0.5

00.5

1-3

-2

-1

0

1

2

3

4

5

-1-0.5

00.5

1

-1-0.5

00.5

1-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

Comparación de máscaras a 45o

Page 28: Segmentación de imagenes

Comparación entre máscaras

Roberts

Prewitt

Sobel

Kirsch

Robinson

Kirsch

Robinson

Roberts

Prewitt

Sobel

Líneas verticales -45o

Page 29: Segmentación de imagenes

Gradiente basado en derivada de segundo orden

2

2

2

22 ),(),(

),(y

yxf

x

yxfyxf

),(4)1,()1,(),1(),1(),(2 yxfyxfyxfyxfyxfyxf

Función que define la máscara

)()1( xfxfx

f

)()1()1()2(2

2

xfxfxfxfx

f

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

Segunda derivada en los puntos x e y

)(2)1()1(2

2

xfxfxfx

f

)()1( yfyfy

f

)()1()1()2(2

2

yfyfyfyfy

f

)(2)1()1(2

2

yfyfyfy

f

Operador Laplaciano

Page 30: Segmentación de imagenes

Gradiente basado en derivada de segundo orden (II)

),(4)1,()1,(),1(),1(),(2 yxfyxfyxfyxfyxfyxf

0 1 0

1 -4 1

0 1 0

Máscaras 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

Page 31: Segmentación de imagenes

Gradiente basado en derivada de segundo orden (III)

Operaciones de imagen filtrada sobre original para mejora de nitidez

Si centro de máscara negativo

Si centro de máscara positivo

1 1 1

1 -8 1

1 1 1

Lo anterior equivale a aplicar la siguiente máscara

Page 32: Segmentación de imagenes

Primera vs segunda derivada

a=[0:1/255:1];for i=1:400 b(i,1:256)=a(1,:);endaa=zeros(400,72);bb=ones(400,72)*255;ent=[aa b bb];

Page 33: Segmentación de imagenes

Primera vs segunda derivada (II)

Imagen Fila Primera derivada Segunda derivada

Page 34: Segmentación de imagenes

Primera vs segunda derivada (III)

Detectar bordes primera derivada

Aplicar umbral de intensidad

a la imagen filtrada

Page 35: Segmentación de imagenes

Primera vs segunda derivada (IV)

Detectar bordes segunda derivada

Detección de los cruces por cero

a la imagen filtrada

Cruce por cero

Page 36: Segmentación de imagenes

Primera vs segunda derivada (V)

Influencia del ruido

Page 37: Segmentación de imagenes

Primera vs segunda derivada (VI)

Primera derivada

Page 38: Segmentación de imagenes

Primera vs segunda derivada (VII)

Segunda derivada

Más susceptible al ruido Menos utilizada para detectar bordes

Page 39: Segmentación de imagenes

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

RuidoDoble bordeNo se detecta dirección

IV

Page 40: Segmentación de imagenes

Primera vs segunda derivada (IX)

Algunas conclusiones sobre derivadas

La primera derivada devuelve bordes más gruesos La segunda derivada discrimina más adecuadamente a líneas 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

Page 41: Segmentación de imagenes

Detección 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)

formaotrade

TyxRSiyxg

0

),(1),(

Page 42: Segmentación de imagenes

Detección de líneas

En una dirección específica

% Se definen las máscarasw(:,:,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 mediafor i=1:4II(:,:,i) = imfilter(I,w(:,:,i),'symmetric','same');maxima_intensidad(1,i)=mean2(II(:,:,i))figure;imshow(II(:,:,i));end

La mayor media indica orientación predominante de las líneas

Page 43: Segmentación de imagenes

Detección de líneas (II)

+

Page 44: Segmentación de imagenes

Detección de líneas (III)

En cualquier dirección

Efecto de doble línea como resultado de aplicar el Laplaciano

w=fspecial('laplacian', 0)III=imfilter(II,w));

Page 45: Segmentación de imagenes

Detección de líneas (IV)

En cualquier dirección

Solución I: Mantiene la doble línea

w=fspecial('laplacian',0) III=imfilter(II,w);IV=abs(III)

Page 46: Segmentación de imagenes

Detección de líneas (V)

En cualquier dirección

Solución II: Seleccionar una línea

w=fspecial('laplacian', 0)III=imfilter(II,w);V=III>0.23*(max(III(:)));

Page 47: Segmentación de imagenes

Detección de bordes

Aplicación del gradientez1 z2 Z3

z4 z5 z6

z7 Z8 z9

58 zzx

fGx

56 zzy

fGy

59 zzx

fGx

68 zzy

fGy

Roberts

1M

2M

21 ,max MMM final

Page 48: Segmentación de imagenes

Detección de bordes (II)

Aplicación del gradiente (Prewitt)z1 z2 Z3

z4 z5 z6

z7 Z8 z9

321987 zzzzzzx

fGx

741963 zzzzzzy

fGy

Sobel

321987 22 zzzzzzx

fGx

741963 22 zzzzzzy

fGy

Page 49: Segmentación de imagenes

Detección de bordes (III)

Combinación de píxeles de diferentes bordes

% Filtrado utilizando máscaras 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');

% Combinación de imágenes filtradas>>III=imlincomb(1,II45,1,II45p,1,II135,1,II135p);

% Máximo entre gradientes>>grad_hv=abs(II45)+abs(135);>>grad_di=abs(II45p)+abs(II135p);>>IV=max(grad_hv, grad_di);

% Máximo entre todos>>V=max(max(abs(II45),abs(135)), max(abs(II135),abs(II135p)));

Page 50: Segmentación de imagenes

Detección de bordes (IV)

III

IV V

Vp=V>0.53*max(V(:));IVp=IV>0.65*max(IV(:));

Page 51: Segmentación de imagenes

Detección de bordes (V)

Combinación y selección por umbral

% Se define el umbralumbral=0.3;% Se definen las máscaras (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 umbralfor i=1:4II(:,:,i) = imfilter(double(I),w(:,:,i),'symmetric','same');II(:,:,i) = II(:,:,i) >= umbral.*max(abs(II(:)));figure;imshow(II(:,:,i));end% Imagen resultanteII=imlincomb(1,II(:,:,1), 1,II(:,:,2), 1,II(:,:,3), 1,II(:,:,4));figure;imshow(II);

Page 52: Segmentación de imagenes

Detección de bordes (VI)

Resultado de la detección de bordes para diferentes umbrales

Page 53: Segmentación de imagenes

Detección de bordes (VII)

Método de Marr-Hildreth

2

22

2),( yx

eyxG 2

2

2

22 ),(),(

),(y

yxG

x

yxGyxG

2

22

2

2

),(

yx

ex

x

yxG

2

22

2

24

2

2

2 1),(

yx

ex

x

yxG

2

22

2

2

),(

yx

ey

y

yxG

2

22

2

24

2

2

2 1),(

yx

ey

y

yxG

2

22

2

4

222

2

2

2

22 2),(),(

),(

yx

eyx

y

yxG

x

yxGyxG

Laplaciana de la gausiana

Page 54: Segmentación de imagenes

Detección de bordes (VIII)

2

22

2

4

222

2

2

2

22 2),(),(

),(

yx

eyx

y

yxG

x

yxGyxG

Laplaciana de la gausiana

7.0),(2 yxG

Cruces por cero

22

Page 55: Segmentación de imagenes

Detección de bordes (IX)

Laplaciana de la gausiana7.0),(2 yxG

22

>> 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 máscara es cero Es isotrópica (invariante a la rotación)

Page 56: Segmentación de imagenes

Detección de bordes (X)

Detección 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

Page 57: Segmentación de imagenes

Detección de bordes (XI)

>> III=edge(II, 'zerocross', 0.3, fspecial('laplacian',0.1));>> IV=edge(II, 'zerocross', 0.3, fspecial('laplacian',0.9));

Más ruidosa

Page 58: Segmentación de imagenes

Detección de bordes (XII)

Método de Marr-Hildreth (otra propuesta) Filtrar la imagen con una máscara equivalente a un filtro gausiano

Aplicar la máscara laplaciana

Detectar los cruce por cero

2

22

2),( yx

eyxG

1 1 1

1 -8 1

1 1 1

Page 59: Segmentación de imagenes

Detección de bordes (XIII)

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

Page 60: Segmentación de imagenes

Detección de bordes (XIV)

Diferencia de Gausianas

La Laplaciana de la gausiana puede aproximarse a diferencia de filtros gausianos

22

22

21

22

2

22

2

21 2

1

2

1),(

yxyx

eeyxDoG

21

Debe cumplirse:

Page 61: Segmentación de imagenes

Detección 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(:));

Page 62: Segmentación de imagenes

Método de Canny

1.- Suavizar la imagen con filtro gausiano

2.- Obtener el módulo y dirección del gradiente basado en dos máscaras de Sobel, Prewitt o Roberts

Punto de borde: Existe máximo local en dirección del gradiente

3.- Supresión no maximal:

Bordes débiles Bordes fuertes

4.- Se incorporan los píxeles débiles 8 conectados a los píxeles fuertes

2

22

2, yx

eyxw

21 ),( TyxMT 2),( TyxM

Page 63: Segmentación de imagenes

Aplicación de Canny

Kirsch (T=0.95M) Canny

Page 64: Segmentación de imagenes

Máscaras de Frei-Chen

Subespacio borde

Subespacio línea

Subespacio promedio

Page 65: Segmentación de imagenes

Obtención de coeficientes de la máscara

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

Page 66: Segmentación de imagenes

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

as

b

bt

tysxftswyxg ),(),(),(

-a 0 a

-b 0 b

-a 0 a

x1 x2 x3

x4 x5 x6

x7 x8 x9

Obtención de coeficientes de la máscara (II)

Page 67: Segmentación de imagenes

-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

x1 x2 x3

x4 x5 x6

x7 x8 x9

Obtención de coeficientes de la máscara (III)

Page 68: Segmentación de imagenes

Borde total = Suma de líneas en cada orientación

Núcleo estimador

Obtención de coeficientes de la máscara (IV)

Page 69: Segmentación de imagenes

Núcleo estimador

Obtención de coeficientes de la máscara (V)

Coeficientes de la máscara resultante

-2a-b -b b

-2a-b 0 2a+b

-b b 2a+b

Page 70: Segmentación de imagenes

Núcleo estimador

Componentes derivativos

Obtención de coeficientes de la máscara (VI)

Page 71: Segmentación de imagenes

Matriz de entrada-salida

Obtención de coeficientes de la máscara (VII)

x1 x2 x3

x4 x5 x6

x7 x8 x9

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 número de filas será semejante al número de píxelesLa imagen original y la que contiene bordes tendrán la misma dimensión

Page 72: Segmentación de imagenes

Sustituir en algoritmo de aprendizaje supervisado

Obtención de coeficientes de la máscara (VIII)

Núcleo estimador

Adaptación de parámetros (gradiente)

Page 73: Segmentación de imagenes

Solución de sistema de ecuaciones lineales

Obtención de coeficientes de la máscara (IX)

Núcleo estimador

bat bxaxyxg ),(

)(2 4169 xxxxxa

)( 73192846 xxxxxxxxxb

b

aXG GXXX TT

b

a 1

-2a-b -b b

-2a-b 0 2a+b

-b b 2a+b

Page 74: Segmentación de imagenes

Obtención de coeficientes de la máscara (X)

mm = -1.9216 -0.5584 0.5584 -1.9216 0 1.9216 -0.5584 0.5584 1.9216

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

Page 75: Segmentación de imagenes

Transformada de Hough

Representación de línea en forma normalFuente

Page 76: Segmentación de imagenes

Transformada de Hough (II)

Línea Puntos con similar Rho y Theta

Page 77: Segmentación de imagenes

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

Línea definida en

sensen

cos xy

Page 78: Segmentación de imagenes

Transformada de Hough (IV)

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

Fuente