lionisEX11

Autor: lionis
Data: 04/06/2009

Filtro de Gabor

Erro no exercício 10

O erro no exercício 10 foi a falta de ajuste do filtro de Gabor com a região das papilas, no domínio da frequência. E as origens do filtro e da imagem devem ser as mesmas, para evitar deslocamentos inesperados da imagem.

Implementação no domínio espacial

 1 def gaborFilterSpatial(size, theta, f, sigma):
 2     h,w = size[0], size[1]
 3     x,y = meshgrid(arange(-w/2,w/2), arange(-h/2,h/2))
 4 
 5     xtheta = x*cos(theta) + y*sin(theta)
 6     ytheta = -x*sin(theta) + y*cos(theta)
 7 
 8     return iafftshift(exp(-0.5*((xtheta/sigma[0])**2+(ytheta/sigma[1])**2)) * cos(2*pi*f*xtheta))
 9 
10 #h_spatial = gaborFilterSpatial([250,250], pi/4, 0.02, [20, 20])

Implementação no domínio de frequência

1 def gaborFilterFrequency(size, theta, f, sigma):
2     h = gaborFilterSpatial(size, theta, f, sigma)
3     return iadft(h)
4 
5 #h_frequency = gaborFilterFrequency([250,250], pi/4, 0.05, [10, 10])
1 #adshow(ianormalize(h_spatial, [0,255]),title='Filtro de Gabor no domínio espacial')
2 #adshow(ianormalize(iadftview(h_frequency), [0,255]),title='Filtro de Gabor no domínio de frequência')

Aplicação na impressão digital

 1 imgFingerPrint = mmreadgray('db1_a/1_1.tif')
 2 F_fingerprint = iadft(imgFingerPrint)
 3 
 4 adshow(imgFingerPrint,title='Impressão digital original')
 5 adshow(ianormalize(iadftview(F_fingerprint), [0,255]),title='Transformada da imagem')
 6 
 7 HF_sum = zeros(imgFingerPrint.shape)
 8 for i in range(0,180,15):
 9     H = gaborFilterFrequency(imgFingerPrint.shape, pi*i/180, 0.09, [9, 9])
10     HF = H * F_fingerprint
11     HF_sum += HF
12     I = iaidft(HF)
13 
14     adshow(iadftview(HF),title='Imagem transformada no domínio da frequência')
15     adshow(ianormalize(abs(I),[0,255]),title='Impressão digital: ângulo=' + str(i))
16 
17 I = iaidft(HF_sum)
18 adshow(iadftview(HF_sum),title='Filtro de Gabor rotacionado e somado')
19 adshow(ianormalize(abs(I),[0,255]),title='Impressão digital com o filtro totalizado')

Impressão digital original

Transformada da imagem

Imagem transformada no domínio da frequência

Impressão digital: ângulo=0

Imagem transformada no domínio da frequência

Impressão digital: ângulo=15

Imagem transformada no domínio da frequência

Impressão digital: ângulo=30

Imagem transformada no domínio da frequência

Impressão digital: ângulo=45

Imagem transformada no domínio da frequência

Impressão digital: ângulo=60

Imagem transformada no domínio da frequência

Impressão digital: ângulo=75

Imagem transformada no domínio da frequência

Impressão digital: ângulo=90

Imagem transformada no domínio da frequência

Impressão digital: ângulo=105

Imagem transformada no domínio da frequência

Impressão digital: ângulo=120

Imagem transformada no domínio da frequência

Impressão digital: ângulo=135

Imagem transformada no domínio da frequência

Impressão digital: ângulo=150

Imagem transformada no domínio da frequência

Impressão digital: ângulo=165

Filtro de Gabor rotacionado e somado

Impressão digital com o filtro totalizado

Filtro de Butterworth

O filtro anelar será implementado através da composição de 2 filtros de Butterworth: um menor e central, e outro maior que abrange mais a periferia da região anelar. O menor será passa-alta, e o maior será passa-alta.

 1 def butterworthLowPass(filter_size,D0,n):
 2     w,h = filter_size[0], filter_size[1]
 3     (u, v) = meshgrid(range(h), range(w))
 4     D = sqrt((u-h/2)**2 + (v-w/2)**2)
 5     return (1 / ( 1 + (D/D0)**(2*n) ))
 6 
 7 def butterworthHighPass(filter_size,D0,n):
 8     filter = butterworthLowPass(filter_size,D0,n)
 9     filter = 1 - filter
10     return filter
11 
12 H_low = butterworthLowPass(imgFingerPrint.shape,50,3)
13 H_high = butterworthHighPass(imgFingerPrint.shape,10,3)
14 H_diff = H_low - (-1)*H_high
15 
16 HF = iafftshift(H_diff) * F_fingerprint
17 I = iaidft(HF)
18 
19 adshow(ianormalize(H_low,[0,255]),title='Filtro butterworth passa-baixa')
20 adshow(ianormalize(H_high,[0,255]),title='Filtro butterworth passa-alta')
21 adshow(ianormalize(iadftview(F_fingerprint), [0,255]),title='Transformada da imagem')
22 adshow(ianormalize(H_diff,[0,255]),title='Diferença dos filtros')
23 adshow(imgFingerPrint,title='Impressão digital original')
24 adshow(ianormalize(abs(I), [0,255]),title='Transformada da imagem')

Filtro butterworth passa-baixa

Filtro butterworth passa-alta

Transformada da imagem

Diferença dos filtros

Impressão digital original

Transformada da imagem

Conclusão

Nota-se que mesmo somando várias orientações do filtro de Gabor, o resultado e o desempenho foram inferiores ao filtro de Butterworth anelar.