jailton_ex10

Autor: jailton
Data: 27/05/2009
  1. Implementar o filtro de Gabor, tanto no domínio da frequência como no domínio espacial
  2. Aplicar o filtro de Gabor em diversas direções e classificar a orientação das regiões do fingerprint.
  1 from numpy import mgrid,meshgrid
  2 from numpy.fft import fft2,ifft2,fftshift
  3 def jjnormaliza(fi,Lmax):   #Função normaliza
  4     minf=numpy.min(fi)
  5     delta=numpy.ptp(fi)
  6     fo=(fi-minf)*Lmax/delta
  7     return fo
  8 #--------------------------------------------------
  9 #1. Implementar o filtro de Gabor, tanto no domínio da frequência como no domínio espacial
 10 #--------------------------------------------------
 11 #- Filtro de Gabor 1: Fonte base: http://www.springerlink.com/content/u634617j37737743/fulltext.pdf
 12 #The Gabor function is defined as follows:
 13 #-G(x, y,|W,theta,fase,X,Y)= exp[-0.5*[(x - X)^2 + (y - Y)^2]/desvp^2]*sin(W(xcos(theta)-ysin(theta))+fase)
 14 #where devp is the Gaussian width, theta is the filter orientation,W is its frequency and fase is its phase shift.
 15 #X, Y define the center of the filter.
 16 #and G(x, y,|W,theta,fase,X,Y) the Gabor operator. We find the G * L spectra for various orientations and shifts.
 17 #This spectrum identifies the texture element.
 18 #--------------------------------------------------
 19 def jjgabor1(N,M,X,Y,desvp,w,anggrau,fasegrau):
 20     x, y = numpy.meshgrid(range(N),range(M))
 21     angrad=(anggrau*numpy.pi/180.0)
 22     faserad=(anggrau*numpy.pi/180.0)
 23     W=(2.0*numpy.pi*w/M)
 24     fo = (exp((((x-X)**2+(y-Y)**2))/(-2.0*desvp**2)))*sin(W*(x*cos(angrad)-y*sin(angrad))+faserad)
 25     return fo
 26 g1=jjgabor1(256,256,128,128,20,10,45,0)
 27 iashow(uint16(jjnormaliza(g1,255)),title = "jjgabor1-D. Espacial- anggrau=45,desvp=20,w=10,fase=0")
 28 guv=fft2(g1)
 29 guv1 = iadftview(guv)
 30 iashow(uint16(guv1), title = "jjgabor1-D. Frequência- anggrau=45,desvp=20,w=10,fase=0")
 31 #--------------------------------------------------
 32 g1=jjgabor1(256,256,100,100,20,10,120,0)
 33 iashow(uint16(jjnormaliza(g1,255)),title = "jjgabor1-D. Espacial- anggrau=120,desvp=20,w=10,fase=0")
 34 guv=fft2(g1)
 35 guv1 = iadftview(guv)
 36 iashow(uint16(guv1), title = "jjgabor1-D. Frequência- anggrau=120,desvp=20,w=10,fase=0")
 37 #--------------------------------------------------
 38 #- Fitro de Gabor 2: Fonte base: http://parati.dca.fee.unicamp.br/media/Attachments/ia636-2009/exercicio10/gaborfingerprint.pdf
 39 #--------------------------------------------------
 40 def jjgabor2(N,M,desvpx,desvpy,T,anggrau):
 41     x1, y1 = numpy.meshgrid(range(N),range(M))
 42     x=x1-N/2
 43     y=y1-M/2
 44     angrad=(-anggrau*numpy.pi/180.0)
 45     f=(2.0*pi/T)
 46     xf=(x*cos(angrad)+y*sin(angrad))
 47     yf=(-x*sin(angrad)+y*cos(angrad))
 48     fo = ((exp(-0.5*((xf/desvpx)**2+(yf/desvpy)**2)))*cos(f*xf))
 49     return fo
 50 g1=jjgabor2(256,256,20,20,20,-45)
 51 iashow(uint16(jjnormaliza(g1,255)),title = "jjgabor2-D. Espacial- anggrau=-45,desvpx=desvpy=20")
 52 guv=fft2(g1)
 53 guv1 = iadftview(guv)
 54 iashow(uint16(guv1), title = "jjgabor2-D. Frequência- anggrau=-45,desvpx=desvpy=20")
 55 #--------------------------------------------------
 56 g1=jjgabor2(256,256,20,20,20,-150)
 57 iashow(uint16(jjnormaliza(g1,255)),title = "jjgabor2-D. Espacial- anggrau=-150,desvpx=desvpy=20")
 58 guv=fft2(g1)
 59 guv1 = iadftview(guv)
 60 iashow(uint16((guv1)), title = "jjgabor2-D. Frequência- anggrau=-150,desvpx=desvpy=20")
 61 #--------------------------------------------------
 62 #--------------------------------------------------
 63 #--------------------------------------------------
 64 #2. Aplicar o filtro de Gabor em diversas direções e classificar a orientação das regiões do fingerprint.
 65 #--------------------------------------------------
 66 fxy1 = mmreadgray('db1_a/1_1.tif')
 67 iashow(fxy1, title = "Imagem de Entrada-D. Espacial")
 68 fuv=fft2(fftshift(fxy1))
 69 fuv1 = iadftview(fuv)
 70 iashow(fuv1, title = "Imagem de Entrada-D. Frequência")
 71 ang=0
 72 fo=fxy1*0
 73 guvt=fxy1*0
 74 limiar="sem limiar"
 75 while ang < 180:
 76     gxy1=jjgabor2(388,374,4.0,4.0,12.0,ang)
 77     guv=fft2(gxy1)
 78     guvt=guvt+guv
 79     GuvFuv=guv*fuv
 80     iashow(iadftview((GuvFuv)),title = "F(u,v)*G(u,v)-Ângulo = " + str(ang)+ " graus")
 81     ifxy=abs(ifft2(GuvFuv))
 82     iashow(uint16(jjnormaliza((ifxy),255)),title = "f(x,y)- Após Filtro Gabor-Ângulo = " + str(ang)+ " graus")
 83     ang=ang+45
 84     fo=fo + ifxy
 85 iashow(uint16(jjnormaliza(fo,255)),title = "Saída - f(x,y)-limiar = " + str(limiar))
 86 #--------------------------------------------------
 87 #3. Repetir o exercício de realce, no domínio da frequência em duas opções:
 88 #3.1 fazendo-se a soma de todas as orientações dos filtros de Gabor
 89 #3.2 projetando-se um filtro "anelar" inspirado nas bordas do filtro de Butterworth.
 90 #--------------------------------------------------
 91 iashow(iadftview(guvt),title = "Saída - Soma dos Filtros(Garbor)-guvt")
 92 GFt=fuv*guvt
 93 iashow(iadftview(GFt),title = "Saída - guvt*fuv - (soma filtros)*(imagem)")
 94 ifxy=abs(ifft2(GFt))
 95 iashow(uint16(jjnormaliza((ifxy),255)), title = "I de saída-após Soma Filtro Garbor-limiar = " + str(limiar))
 96 def jjbutterworth(N,M,n,D0):
 97     u, v = numpy.meshgrid(range(N),range(M))
 98     D=((u-N/2)**2+(v-M/2)**2)**0.5
 99     Huv=1.0/(1.0+(D/D0)**(2*n))
100     return Huv
101 n=5
102 D0=70.0
103 filtro1=jjbutterworth(388,374,n,D0)
104 iashow(uint16(jjnormaliza(filtro1,255)),title = "Filtro Butterworth- n= "+ str(n) + " D0= " + str(D0))
105 FGbutter=fftshift(filtro1)*(fuv)
106 iashow(iadftview(FGbutter),title = "Saída - (filtroButterworth)*fuv")
107 ifxy=fftshift(abs(ifft2(FGbutter)))
108 iashow(uint16(jjnormaliza((ifxy),255)), title = "Imag. de saída-após Filtro de Butterworth")

jjgabor1-D. Espacial- anggrau=45,desvp=20,w=10,fase=0

jjgabor1-D. Frequência- anggrau=45,desvp=20,w=10,fase=0

jjgabor1-D. Espacial- anggrau=120,desvp=20,w=10,fase=0

jjgabor1-D. Frequência- anggrau=120,desvp=20,w=10,fase=0

jjgabor2-D. Espacial- anggrau=-45,desvpx=desvpy=20

jjgabor2-D. Frequência- anggrau=-45,desvpx=desvpy=20

jjgabor2-D. Espacial- anggrau=-150,desvpx=desvpy=20

jjgabor2-D. Frequência- anggrau=-150,desvpx=desvpy=20

Imagem de Entrada-D. Espacial

Imagem de Entrada-D. Frequência

F(u,v)*G(u,v)-Ângulo = 0 graus

f(x,y)- Após Filtro Gabor-Ângulo = 0 graus

F(u,v)*G(u,v)-Ângulo = 45 graus

f(x,y)- Após Filtro Gabor-Ângulo = 45 graus

F(u,v)*G(u,v)-Ângulo = 90 graus

f(x,y)- Após Filtro Gabor-Ângulo = 90 graus

F(u,v)*G(u,v)-Ângulo = 135 graus

f(x,y)- Após Filtro Gabor-Ângulo = 135 graus

Saída - f(x,y)-limiar = sem limiar

Saída - Soma dos Filtros(Garbor)-guvt

Saída - guvt*fuv - (soma filtros)*(imagem)

I de saída-após Soma Filtro Garbor-limiar = sem limiar

Filtro Butterworth- n= 5 D0= 70.0

Saída - (filtroButterworth)*fuv

Imag. de saída-após Filtro de Butterworth