segmentación de imagenes

Post on 15-Jun-2015

15.569 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Detección de bordes y discontinuidades

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:

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

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

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

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

Aplicación del Gradiente

yG

xG

yx GG

yxM

,

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

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

Representación del gradiente (II)

Magnitud del gradiente

Dirección del gradiente

Máscaras de Roberts

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

Máscaras de Roberts (II)

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

Máscaras de Roberts (IV)

Verificar tipo de datos de la imagen

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

Máscaras de Prewitt (II)

¿Magnitud predominante?

Diagonal izquierda Diagonal derecha

DIVH MMMMyxM ,,,max),(

Dirección predominanteLa equivalente a la magnitud predominante

Máscaras de Prewitt (III)

Máscaras de Prewitt (IV)

Influencia del umbral

Máscaras de Sobel

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

de discontinuidades

Prewitt

Sobel

Máscaras de Sobel (II)

>> w=fspecial('sobel')

Máscaras de Kirsch

8 máscaras que representan 8 orientaciones

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

Máscaras de Kirsch (III)

Máscaras de Kirsch (IV)

Máscaras de Kirsch (V)

1800 ,max),( MMyxG V

22545 ,max),( MMyxG D

27090 ,max),( MMyxG H

315135 ,max),( MMyxG I

¿Magnitud predominante?

Máscaras de Robinson

Una negada de la otra, menos costoso computacionalmente

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

Comparación entre máscaras

Roberts

Prewitt

Sobel

Kirsch

Robinson

Kirsch

Robinson

Roberts

Prewitt

Sobel

Líneas verticales -45o

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

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

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

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

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

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

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

RuidoDoble bordeNo se detecta dirección

IV

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

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),(

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

Detección de líneas (II)

+

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

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)

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

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

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

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

Detección de bordes (IV)

III

IV V

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

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

Detección de bordes (VI)

Resultado de la detección de bordes para diferentes umbrales

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

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

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)

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

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

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

Detección de bordes (XIII)

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

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:

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

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

Aplicación de Canny

Kirsch (T=0.95M) Canny

Máscaras de Frei-Chen

Subespacio borde

Subespacio línea

Subespacio promedio

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

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)

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

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

Núcleo estimador

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

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

Núcleo estimador

Componentes derivativos

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

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

Sustituir en algoritmo de aprendizaje supervisado

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

Núcleo estimador

Adaptación de parámetros (gradiente)

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

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

Transformada de Hough

Representación de línea en forma normalFuente

Transformada de Hough (II)

Línea 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

Línea definida en

sensen

cos xy

Transformada de Hough (IV)

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

Fuente

top related