giovani_ex10 - Filtro de Gabor

[1]An Enhanced Gabor Filter-Based Segmentation Algorithm for Fingerprint Recognition Systems

O filtro de Gabor tem a seguinte forma geral no domínio espacial [2]:

...

A magnitude do filtro de gabor em diversas direções para uma dada janela de dimensão WxW centrada em(X,Y) é [3]:

onde

-I(x,y) denota o nivel de cinza do pixel (x,y)

-theta_k denota a direção angulo de cada interação. Sendo theta_k = pi(k-1)/m, k=1..m

A classificação de um determinado pixel se dá pelo desvio padrão(DEV) da magnitude g. Se DEV for menor que um dado valor de threshold, sua rotulação será classificada como impressão, caso contrário como fundo.

Filtro Gabor

 1 #-----------------------------------------------------------------------------
 2 def gifiltrogabor(s,theta,f,sigma_x,sigma_y):
 3 
 4     lin,col = s[0],s[1]
 5 
 6     x,y = iameshgrid(arange(-col/2, col/2), arange(-lin/2, lin/2))
 7 
 8     x_theta =  x * cos(theta) + y * sin(theta)
 9     y_theta = -x * sin(theta) + y * cos(theta)
10 
11     H = exp(-1/2. *( (x_theta**2) / (sigma_x**2) + (y_theta**2) / (sigma_y**2) )) * cos(2*pi*f*x_theta)
12 
13     return H
14 #-----------------------------------------------------------------------------
15 def gimaggabor(img,w,m,f,sigma):
16 
17     sigma_x = sigma[0]
18     sigma_y = sigma[1]
19     s = array([w,w])
20 
21     soma_conv = zeros([img.shape[0]+w-1,img.shape[1]+w-1])
22     for k in range(1,m):
23         theta = pi * (k-1)/m
24         h = gifiltrogabor(s,theta,f,sigma_x,sigma_y)
25         conv_aux = iaconv(img,h)
26         soma_conv = soma_conv + conv_aux
27 
28         #iashow(ianormalize(h,[0,255]),title='Filtro Gabor')
29         #iashow(ianormalize(conv_aux,[0,255]),title='conv_aux')
30 
31 
32     g_aux = soma_conv/m
33     g = g_aux[w/2:(g_aux.shape[0]-w/2)+1,w/2:(g_aux.shape[1]-w/2)+1]
34 
35     return g
36 #-----------------------------------------------------------------------------
37 def gistdlocal(f,w):
38 
39     lin,col = f.shape[0],f.shape[1]
40 
41     D = zeros(f.shape)
42     for i in range(0,lin,w):
43         for j in range(0,col,w):
44             D[i:i+w,j:j+w]= std(f[i:i+w,j:j+w])
45 
46     return D
47 #-----------------------------------------------------------------------------

...

Exemplo 01 do Filtro de Gabor no dominio espacial:

1 s = array([100,120])
2 theta = pi/4
3 f = .06
4 sigma_x = 10
5 sigma_y = 25
6 
7 filtro = gifiltrogabor(s,theta,f,sigma_x,sigma_y)
8 
9 iashow(ianormalize(filtro,[0,255]),title='Filtro Gabor - Espacial')
Warning: downcasting image from double to uint16 (may lose precision)

Filtro Gabor - Espacial

Exemplo 02 do Filtro de Gabor no dominio da frequencia:

 1 s = array([100,120])
 2 theta = pi/4
 3 f = .06
 4 sigma_x = 10
 5 sigma_y = 25
 6 
 7 h = gifiltrogabor(s,theta,f,sigma_x,sigma_y)
 8 H = iadft(h)
 9 H_view = iadftview(H)
10 
11 iashow(ianormalize(H_view,[0,255]),title='Filtro Gabor - Frequencia')
12 img_digit = adread('db1_a/1_1.tif')
13 iashow(ianormalize(iadftview(iadft(img_digit)),[0,255]),title='espectro do fingerprint')

Filtro Gabor - Frequencia

espectro do fingerprint

Item 2.

Aplicar o filtro de Gabor em diversas direções e classificar a orientação das regiões do fingerprint.
 1 s = array([100,120])
 2 theta = pi/4
 3 f = .05
 4 sigma_x = 15
 5 sigma_y = 10
 6 
 7 w = 12
 8 m = 8
 9 
10 img_digit = adread('db1_a/1_1.tif')
11 ex1 = ianormalize(gimaggabor(img_digit,w,m,f,[sigma_x,sigma_y]),[0,255])
12 desvpad = ianormalize(gistdlocal(ex1,w),[0,255])
13 classif1 = mmthreshad(desvpad,20)
14 cla_neg = ~classif1
15 
16 iashow(uint16(img_digit),title='Imagem Original')
17 iashow(uint16(ex1),title='Magnitude Gabor')
18 iashow(uint16(desvpad),title='Desvio padrão por janela')
19 iashow(uint16(classif1),title=' Classificação - threshold 20')
20 iashow(uint16(img_digit),cla_neg,title='Resultado da Classificação')
Warning: downcasting image from double to uint16 (may lose precision)
Warning: upcasting image from scalar to uint16

Imagem Original

Magnitude Gabor

Desvio padrão por janela

Classificação - threshold 20

Resultado da Classificação

Referências

[1] http://parati.dca.fee.unicamp.br/media/Attachments/ia636-2009/exercicio10/gaborfingerprint.pdf

[2]A. K. Jain, S. Prabhakar, L. Hong, and S.Pankanti,“Filterbank-based fingerprint matching,” IEEE Transactions on Image Processing, vol. 9, pp. 846–859,May 2000.

[3]LinLin Shen, Alex Kot, and WaiMun Koo, “Quality measures of fingerprint images,” in Proc. 3rd Audio and Video-Based Person Authentication, AVBPA 2001, pp. 266–271.