Escolar Documentos
Profissional Documentos
Cultura Documentos
SUMRIO
Introduo
Instalao
2.1
Obtendo o cdigo-fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2
Pacotes necessrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3
Compilando o sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4
10
3.1
10
3.2
4
12
Utilizao e exemplos
13
4.1
Diretrios do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
4.2
Comandos do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
4.2.1
Subsistema de classicao . . . . . . . . . . . . . . . . . . . . . . .
14
4.2.2
Subsistema de comparao . . . . . . . . . . . . . . . . . . . . . . . .
19
4.2.3
Programas auxiliares . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
Bibliotecas auxiliares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
4.3.1
25
4.3.2
26
4.3.3
28
4.3.4
Biblioteca de la de prioridades . . . . . . . . . . . . . . . . . . . . .
29
4.3
4.3.5
5
30
32
Referncias Bibliogrcas
33
Apndice A -- Licenciamento
35
36
36
INTRODUO
As impresses digitais constituem-se no identicador biomtrico mais amplamente utilizado, tanto por sua aceitao no meio jurdico, forense e civil, quanto por sua praticidade,
segurana e baixo custo. Entidades como agncias de polcia utilizam o reconhecimento de
impresses digitais para diversos ns, incluindo o auxlio investigao criminal pela identicao de indivduos atravs de impresses latentes.
Essa identicao no entanto no pode ser feita manualmente, visto que tais entidades dispem de largas bases de dados. O processo automatizado, ento, por um Sistema Automtico
de Identicao de Impresses Digitais (AFIS - Automatic Fingerprint Identication Systems).
Notou-se que: o tema pouco explorado no Brasil (em especial na Bahia); h demanda
pela utilizao de tais sistemas (inclusive da Secretaria de Segurana Pblica do Estado da
Bahia); trata-se de um tema atual e com vrias questes a serem solucionadas; h carncia de
ferramentas livres que auxiliem seu estudo.
Estas consideraes levaram necessidade de implementao de um AFIS, mesmo que
incompleto e em forma de prottipo, para ns acadmicos. Este texto documenta a implementao de tal sistema pelo grupo Grupo de Engenharia de Algoritmos e Programao Distribuda
(Gaudi) (http://gaudi.dcc.ufba.br/) do DCC/UFBA, no contexto do projeto BIOMTRICA, sob
auxlio da Fundao de Amparo Pesquisa do Estado da Bahia (Fapesb).
Agradeo ao Prof. Perlino Jr., orientador do projeto de iniciao cientca que originou
este trabalho, ao colega Amadeu Jnior por sua colaborao em diversas etapas, Profa . Fabola Greve (co-orientadora do referido projeto) pelos sbios conselhos e FAPESB pelo apoio
nanceiro. A todos que de alguma forma contriburam, em especial ao Deus de Abrao, Isaque
e Jac pelo Seu constante auxlio.
INSTALAO
Este captulo descreve a instalao do sistema Gaudi-AFIS em um sistema Debian GNU/Linux1 e foi testada na verso Lenny RC2. A instalao em outras distribuies do GNU/Linux
ou em sistemas Microsoft Windows no foi testada. Para instalaes em Microsoft Windows
necessrio o uso de sistemas como Cygwin2 ou MinGW3 .
2.1
OBTENDO O CDIGO-FONTE
http://wiki.dcc.ufba.br/Gaudi/ProjetoICMuriloBiometrica
2.2
PACOTES NECESSRIOS
4 http://www.tecgraf.puc-rio.br/im/
2.3
COMPILANDO O SISTEMA
Para compilar o sistema, extraia o pacote para um diretrio, por exemplo, /usr/local/gaudi-afis/:
cd /usr/local
tar -zxvf gaudi-afis.tar.gz
5 http://www.gimp.org/
6 http://fingerprint.nist.gov/NFIS/
7 Membros
8 http://www.openoffice.org/product/calc.html
Entre no diretrio onde o sistema foi extrado, abra o arquivo Makefile com um editor de
texto simples. Altere a varivel PROJDIR para o diretrio no qual o sistema foi extrado:
...
SHELL=/bin/sh
PROJDIR= /usr/local/gaudi-afis
...
Caso queira compilar o sistema para Microsoft Windows, altere tambm a varivel EXEEXT
para o valor .exe:
...
CFLAGS =
CDEFS =
EXEEXT = .exe
...
Para compilar o sistema, execute os comandos:
make install
Os arquivos executveis sero disponibilizados na pasta bin. Para que os mesmos estejam acessveis no terminal, edite o arquivo .bash_profile no seu diretrio pessoal (diretrio
"home"), adicionando a seguinte linha no nal do arquivo:
export PATH=$PATH:/usr/local/gaudi-afis
Novamente, substitua /usr/local/gaudi-afis pelo diretrio no qual voc instalou o sistema.
Nota para futuro mantenedor: Na verso atual, o comando make est com problemas,
uma vez que as bibliotecas recm-compiladas ainda no estaro na pasta lib. Por isso apenas
o comando make install deve ser executado. O futuro mantenedor deve corrigir isto.
2.4
Alguns scripts de teste necessitam que seja congurado o diretrio no qual o sistema est
instalado.
Especicamente, para realizar testes no console do Octave, necessrio acrescentar varivel LOADPATH os caminhos que contm cdigo a ser utilizado. Algumas funes no diretrio
share/octave/peter_kovesi/ so utilizadas por diversos scripts de teste, portanto em alguns diretrios h um arquivo inicializa.m que atualiza a varivel LOADPATH da seguinte
forma:
LOADPATH=strcat(LOADPATH, "/usr/local/gaudi-afis/share/octave/peter_kovesi/");
Novamente, substitua /usr/local/gaudi-afis/ pelo diretrio no qual o sistema est
instalado. Para utilizar tais funes no console do Octave, execute o cdigo acima ou crie um
link simblico do arquivo test/inicializa.m para o diretrio no qual voc est trabalhando
e execute inicializa();. Para executar um script Octave (utilizando o comando octave -q)
que utilize as funes acima, necessrio que o arquivo inicializa.m esteja no diretrio
corrente.
Eis uma listagem dos arquivos de teste que devem ter o diretrio do sistema congurado:
share/octave/example_scripts/kovesi_script.m
share/octave/example_scripts/pankanti_script
test/inicializa.m
test/script_exec.sh
test/script_exec_kovesi.sh
test/teste.sh
test/nfis/script_exec.sh
test/performance/script_exec_kovesi.sh
test/performance/script_exec.sh
test/performance/teste.sh
test/performance/comparativo/script_exec*.sh
test/performance/novo_teste/teste.sh
Alguns scripts de teste supem que o usurio possui o sistema NFIS instalado no diretrio
/usr/local/nfis/. Caso o usurio queira utilizar tais scripts e tenha o sistema NFIS instalado
em outro diretrio, deve congurar os seguintes arquivos:
test/script_exec.sh
test/script_exec_kovesi.sh
test/nfis/script_exec.sh
test/performance/script_exec_kovesi.sh
test/performance/script_exec.sh
test/performance/comparativo/script_exec*.sh
Os scripts de teste na pasta test/performance/comparativo/ supem que existem imagens de teste na pasta test/performance/comparativo/imgs/ no formato WSQ (formato
do NFIS). Essas imagens no so fornecidas com o sistema. Uma opo copiar algumas
imagens da base de imagens fornecida com o NFIS. Para os resultados que so apresentados no
arquivo test/performance/comparativo/comparativo.ods, foram utilizadas 198 imagens
(200 menos 2 que no puderam ser classicadas).
Nota para futuro mantenedor: para facilitar a congurao do diretrio do sistema, podese criar um arquivo no diretrio raiz do projeto que centralize a congurao. Os demais scripts
utilizariam o dado desse arquivo.
10
RECONHECIMENTO DE
IMPRESSES DIGITAIS:
MTODOS UTILIZADOS
Este captulo descreve os elementos bsicos de um AFIS e os mtodos que foram implementados no Gaudi-AFIS.
O trabalho de um AFIS consiste em identicar um indivduo atravs de sua impresso
digital. O sistema compara uma digital com uma massa de digitais disponibilizadas em um
banco de dados. Dois problemas bsicos precisam ser resolvidos: (1) como comparar se duas
imagens so do mesmo dedo e (2) como classicar as imagens de forma a otimizar a busca em
grandes bases de dados. Os mtodos apresentados neste captulo so agrupados em torno desses
dois problemas.
Para uma abordagem completa sobre reconhecimento de impresses digitais, consulte (MALTONI et al., 2003).
3.1
O mtodo de classicao empregado no Gaudi-AFIS baseado na anlise de pontos singulares (KARU; JAIN, 1999; COSTA, 2001). As imagens so classicadas em uma das classes
de Henry (THE. . . , 2003). Os resultados foram apresentados em (LIMA; FERREIRA JNIOR,
2007).
A classicao utiliza a arquitetura exibida na Figura 3.1. Obtm-se a imagem direcional
da imagem, dos quais so identicados os pontos singulares com base no clculo do ndice
de Poincar. Segmenta-se a imagem do plano de fundo, removendo pontos singulares falsos.
Classica-se ento a impresso digital com base em avaliaes geomtricas das coordenadas
dos pontos singulares.
Foram implementados os mtodos de segmentao de Maio (MAIO; MALTONI, 1997;
11
12
3.2
13
UTILIZAO E EXEMPLOS
Este captulo descreve os recursos do Gaudi-AFIS, sua utilizao e alguns exemplos. Apresenta-se uma descrio de cada comando, dos parmetros identicados como bons, assim como
das bibliotecas auxiliares.
O sistema Gaudi-AFIS executa em uma arquitetura do tipo canos e ltros (do ingls pipe
and lter1 ), em que cada etapa do processamento consiste em um programa individual, que
utiliza arquivos (geralmente imagens) como entrada, executa algum processamento e devolve
outro arquivo como sada. Para automatizar a execuo de vrios ltros, o usurio pode utilizar
cdigo ShellScript2 ; ver, por exemplo, o arquivo test/script_exec.sh.
4.1
DIRETRIOS DO SISTEMA
14
res_testes_src - contm resultados de testes de implementao; especicamente, contm o resultado de testes comparativos (visuais) dos algoritmos de clculo da imagem
direcional (ver Seo 3.1)
share - contm arquivos a serem utilizados nos testes no Octave. Note que o Octave
aceita apenas imagens no formato JPG ou em formato de matriz (ver na Seo 4.2.3 a
descrio do programa tiff2octave).
src - contm o cdigo-fonte do sistema
test - contm scripts de teste e os resultados de alguns testes, funcionando tambm como
uma espcie de sandbox. Nos diretrios test/performance e test/performance/novo_teste
esto os testes de tempo de execuo e no diretrio test/performance/comparativo
esto os testes de taxa de acerto na classicao. No diretrio test/performance/problematicas
h uma cpia das imagens do NFIS que no puderam ser classicadas pelo sistema, devido grande quantidade de rudo
thinning - contm arquivos auxiliares ao algoritmo de anamento e podamento (ver
Seo 4.2.2)
4.2
COMANDOS DO SISTEMA
Esta seo descreve o funcionamento de cada comando do sistema. Ao executar um programa com parmetros incorretos, exibida uma mensagem com o formato correto do mesmo.
O cdigo-fonte dos programas tambm contm informao relevante sobre seu funcionamento.
Parmetros entre maior e menor (<>) devem ser substitudos por um valor (numrico ou
textual); parmetros entre colchetes ([]) so opcionais.
4.2.1
SUBSISTEMA DE CLASSIFICAO
15
<tam_bloco> deve ser um inteiro informando o tamanho do bloco de segmentao: a imagem dividida em blocos, e cada bloco analisado se pertence imagem ou ao plano de fundo.
Na literatura recomenda-se blocos de tamanho 16.
<metodo> deve ser karu, kovesi, pankanti ou hong (ver Seo 3.1). Os PARAMETROS
dependem do mtodo:
Karu: <num_direcoes> <dim_bloco> <tipo_suaviz>
16
direcional (ver Seo 3.1): a cada bloco atribuda uma nica direo, com base nas
direes dos pixeis no bloco. Recomenda-se 16; recomenda-se tambm utilizar o mesmo
tamanho de bloco da segmentao.
<tipo_suaviz> deve ser 1 para mtodo da moda, 2 para mtodo do seno-cosseno, 3 para
borramento gaussiano e 4 para ltros sequenciais alternados. Nota: Esta ltima opo
ainda no est implementada; ao selecion-la, ser realizado borramento gaussiano.
Kovesi: <desv_gradiente> <desv_momento> <desvio_suaviz>
Os trs parmetros so inteiros e indicam desvios em borramentos gaussianos; consultar
o arquivo share/octave/peter_kovesi/ridgeorient.m. O autor do mtodo recomenda utilizar os valores 1 3 3.
Pankanti e Hong: <dim_bloco> <lim_cons>
<lim_cons> deve ser um decimal, dene o limite superior para a consistncia das orientaes em uma regio (valor de Tc em (JAIN; PANKANTI, 1999, p. 10), valor em graus).
Recomenda-se 50.0.
O parmetro octave, caso presente, indica que o programa deve gerar um arquivo no formato de matriz do Octave com a imagem direcional (opcionalmente, com o mapa de consistncia tambm; ver nota abaixo).
O parmetro verbose, caso presente, indica que o programa deve exibir mensagens indicando a situao da execuo.
Como sada gerado o arquivo direcoes.dat contendo a imagem direcional num formato
interno ao sistema. O formato descrito no arquivo src/bin/direction/direction.c, linhas 1722. Nota para futuro mantenedor: Esse formato grava cada direo como um double
inteiro, o que consome muito espao em disco. Utilizar um nmero xo de direes e fazer uma
aproximao no funciona, seria necessrio utilizar um processo de quantizao (GOMES;
VELHO, 1994).
Note que o formato da estrutura de dados para a imagem direcional est no arquivo include/direction
de forma que a imagem direcional possa ser utilizada em outros programas.
Parmetros em tempo de compilao: Alguns parmetros podem ser modicados apenas
em tempo de compilao. Obviamente, sua alterao requer que o sistema seja recompilado
(ver Seo 2.3).
17
src/bin/direction/pankanti.c, linha 61, alterando seu valor de 0 para 1. No entanto, a impresso s ocorre se a opo verbose for indicada.
No mtodo de Pankanti possvel denir o mximo de melhoras que o programa deve
tentar. Por padro utiliza-se 100. Para alterar modique a varivel LIM_MELHORAS no
arquivo src/bin/direction/pankanti.c, linha 60.
Nos mtodos de Pankanti e Hong, possvel denir o tamanho da vizinhana local
(tamanho de D em (JAIN; PANKANTI, 1999, p. 10)). Por padro utiliza-se 5, conforme indicado pelos autores. Para alterar modique a varivel TAM_VIZ nos arquivos
<imagem_original> deve ser o caminho para a imagem original (formato TIFF sem alpha;
ver descrio de conv_jpgtiff na Seo 4.2.3), de preferncia segmentada.
18
<vizinhanca> deve ser 2x2 ou 3x3. Recomenda-se utilizar 2x2; ver Seo 3.2.
O parmetro sem_blocos, caso presente, indica que o clculo do ndice de Poincar (ver
Seo 3.2) deve ser feito pixel a pixel. Recomenda-se utilizar esta opo. Caso no esteja
presente, o clculo feito por blocos (isto , s considerada a direo do bloco inteiro), o que
s deve ser feito se a vizinhana for do tipo 2x2.
O parmetro verbose, caso presente, indica que o programa deve exibir mensagens indicando a situao da execuo.
O parmetro saida_pts, caso presente, indica que o programa deve gerar um arquivo texto
singular_points.txt contendo a informao dos pontos singulares identicados (coordenadas e tipo), juntamente com uma imagem singularity.tiff, que consiste na imagem original
com os pontos singulares pintados (ncleos de vermelho, deltas de verde e verticilos em azul
verticilos, no entanto, no foram encontrados nos testes).
Como sada, o programa imprime na sada-padro o nmero da classe da impresso digital
(0 = arco, 1 = presilha esquerda, 2 = presilha direita, 3 = cicatriz, 4 = arco angular, 5 = verticilo).
Imagens com alto nvel de rudo, que no puderem ser classicadas como uma das classes
padro, sero classicadas como cicatriz (classe 3).
Parmetros em tempo de compilao: Alguns parmetros podem ser modicados apenas
em tempo de compilao. Obviamente, sua alterao requer que o sistema seja recompilado
(ver Seo 2.3).
Caso o clculo do ndice de Poincar seja realizado por blocos, o sistema supe blocos de
tamanho 16 16. Para alterar isto, modique o valor inicial da varivel TAM_BLOCO na
linha 73 do arquivo src/bin/classification/classification.c.
possvel modicar o nmero de mximo suavizaes que o programa deve tentar (pa-
dro = 10): modique o valor comparado com a varivel num_suaviz no arquivo src/bin/classifi
linha 187.
possvel imprimir o nmero de suavizaes que o programa tentar realizar (isto til
19
4.2.2
SUBSISTEMA DE COMPARAO
<media> e <variancia> devem ser inteiros no intervalo [0, 255]. Ver referncias na Seo
3.2.
O parmetro verbose, caso presente, indica que o programa deve exibir mensagens indicando a situao da execuo.
Como sada, o programa gera a imagem normalizada normalized.tiff.
20
gabor <imagem>
H tambm um diretrio octave com funes para teste no Octave. Para execut-los, edite
o arquivo inicializa.m, substituindo o diretrio /usr/local/gaudi-afis pelo diretrio no
qual o sistema foi instalado. Execute octave e, no terminal do Octave, digite os seguintes
comandos:
inicializa();
imgs = enh_gabor('<imagem>');
imagem deve ser o nome do arquivo de uma imagem no formato JPG. A varivel imgs
contm uma matriz de imagens ltradas. Cada imagem pode ser visualizada com o comando
21
<passo_a_passo> deve ser 0 ou 1. Caso seja selecionado 1, o programa gera uma srie de
imagens com nomes no formato temp<i>-<j>.tiff (sendo i e j inteiros) com o passo-a-passo
do processo de anamento. Uma animao pode ser gerada utilizando o comando convert do
pacote ImageMagick5 (consultar documentao referente).
Como sada, o programa gera a imagem binarizada binarizado.tiff, a imagem anada
22
<passo_a_passo> deve ser 0 ou 1. Caso seja selecionado 1, o programa gera uma srie de
imagens com nomes nos formatos original.tiff, temp<i>-<j>.tiff e dilata<i>.tiff
(sendo i e j inteiros) com o passo-a-passo do processo de podamento. Uma animao pode
ser gerada utilizando o comando convert do pacote ImageMagick (consultar documentao
referente).
O parmetro verbose, caso presente, indica que o programa deve exibir mensagens indicando a situao da execuo.
Aps o fornecimento dos parmetros, o programa aguarda na entrada-padro por um inteiro
informando o nmero de passos a ser utilizado no podamento. Recomenda-se utilizar o nmero
de passos fornecido pelo programa de anamento.
Note-se aqui que o usurio pode automatizar o processo de anamento-podamento redirecionando a sada-padro do anamento para um arquivo x e em seguida redirecionar a entradapadro do podamento para x. Por exemplo, supondo que o usurio se encontra no diretrio base
do sistema:
4.2.3
PROGRAMAS AUXILIARES
23
conv_cjpegb - converte uma imagem RAW (gerada pelo comando dwsq do NFIS) numa
imagem no formato JPEGB (ver documentao do NFIS), utilizando o comando cjpegb
do NFIS. Parmetros: <qualidade> <formato> <imagem> <arquivo NCM> (sugere-se
utilizar os valores 95 para a qualidade e jpg para o formato). A imagem convertida gerada com o mesmo nome da fornecida e com o formato especicado. Para utilizar a imagem resultante no sistema, converta-a em seguida utilizando o comando conv_jpgtiff
(ver abaixo).
conv_jpgtiff - converte uma imagem JPEG em uma imagem no formato TIFF aceito
pelo sistema (sem alpha), utilizando o modo Batch do programa GIMP7 . Note que o comando convert da ferramenta ImageMagick no produz o formato desejado. Parmetro:
imagem de entrada. A imagem de sada gerada com o nome digital.tiff.
edit_res - edita o resultado de um arquivo gerado pelo programa testa (ver descrio
abaixo). Limpa o resultado, exibindo apenas o valor de tempo de cada teste. Ao nal,
exibe o valor da mdia e do desvio padro dos dados fornecidos. Parmetros: arquivo de
resultados. O resultado gravado num arquivo com nome idntico ao arquivo de entrada
mais o suxo _ed.
gaussian - efetua um borramento gaussiano sobre uma imagem no formato aceito pelo
sistema (ver descrio de conv_jpgtiff acima). Este programa s deve ser utilizado
para testes, por ser acoplado e ter baixo desempenho; o sistema deve utilizar as funes
da biblioteca de manipulao de sinais (ver Seo 4.3.2). Parmetros: imagem a ser borrada e desvio da funo gaussiana (nmero decimal). O resultado gravado na imagem
gaussian.tiff.
testa - executa testes de desempenho de um programa. Executa o comando 30 vezes,
testando seu tempo de execuo (30 o mnimo necessrio para obter-se uma distribuio
normal das medidas8 ). Para alterar o nmero de testes, modique a varivel NUM_TESTES
na linha 40 do arquivo src/etc/testa.c e recompile o sistema (ver Seo 2.3). Parmetros: arquivo no qual os resultados sero gravados, caminho para o comando a ser
executado nos testes (pode apenas o nome do comando, se o mesmo estiver nos diretrios
do PATH do sistema) e os argumentos para o programa a ser testado. Recomenda-se nalizar todos os aplicativos em execuo (inclusive, se possvel, o gerenciador de janelas)
durante a execuo dos testes, a m de obter-se medidas conveis.
7 http://www.gimp.org/tutorials/Basic_Batch/
8 http://www.ufpa.br/dicas/biome/bionor.htm
24
conv_jpgtiff acima) no formato de imagem-matriz do Octave (que pode ser lido utilizando a funo loadimage. Parmetros: imagem a ser convertida, caminho para o
arquivo a ser gerado. Consultar documentao do Octave para maiores informaes.
xor - calcula a funo ou exclusivo entre duas imagens em tons de cinza (no formato
TIFF sem alpha; ver comando conv_jpgtiff acima) (GONZALEZ; WOODS, 2002).
Parmetros: caminhos para as duas imagens a serem comparados. O resultado gravado
no arquivo xor.tiff.
connected_componentes (executvel no diretrio inutil) - calcula o maior componente conectado de uma imagem (SERRA, 1982, p. 4142). Em seguida, recorta a imagem, deixando apenas a rea do maior componente conectado. Este programa no est
funcionando bem, principalmente por ter um desempenho intratvel. Parmetros: imagem. gravado um arquivo lista_pts.dat com a lista dos pixels da regio calculada;
a imagem recortada gravada no arquivo recorte.tiff.
H ainda, no diretrio src/etc/plota_min, o incio da implementao de um programa
para pintar um conjunto de mincias em uma imagem de impresso digital (arquivo plota.c).
As mincias devem estar descritas em um arquivo no formato XYT do NFIS com o nome
finger.xyt, e a imagem deve estar no formato TIFF sem alpha com o nome finger.tiff
(ver acima descrio de conv_jpgtiff). No se sabe se as coordenadas no arquivo XYT esto
sendo interpretadas corretamente. O resultado gravado no arquivo finger+min.tiff. Para
compilar o programa, execute o script compila_plota.sh. H ainda uma tentativa de obter-se
o mesmo resultado utilizando a ferramenta GNUPlot9 no arquivo combina.sh, no entanto h
uma translao entre a imagem das mincias e a imagem da impresso digital. Mantenedor:
aps obter um resultado razovel e correto, o programa deve ser modicado para receber o
nome dos arquivos de entrada como parmetro.
4.3
BIBLIOTECAS AUXILIARES
Esta seo apresenta uma descrio das bibliotecas do sistema. Para uma descrio da
biblioteca IM, consulte http://www.tecgraf.puc-rio.br/im/.
9 http://www.gnuplot.info/
25
4.3.1
unsigned char), Imagem e MapaCinza e as consantes PRETO, CINZA, BRANCO (cores) e tam_pal_cinza
(tamanho da paleta e tons de cinza).
Funes:
int abrirImagem (Imagem *img, char *nome_arq);
abre a imagem do arquivo nome_arq. A estrutura img j deve estar alocada, mas no
inicializada. Retorna 0 se obteve sucesso.
Tcor corImagem (Imagem *img, int x, int y, int tipo_ext);
obtm a cor da imagem img no pixel [x, y]. tipo_ext indica o tratamento para pixels
alm das bordas: se 0, retorna PRETO; se 1, retorna BRANCO. Retorna -1 em caso de erro.
void apagarImagem (Imagem *img);
desaloca contedo da estrutura img. No desaloca a estrutura em si.
void inicializa_paleta (void);
inicializa a paleta de tons de cinza.
int criaMapaCinza (MapaCinza *img, int larg, int alt);
cria um mapa de tons de cinza com as dimenses larg e alt. A estrutura img j deve
estar alocada, mas no inicializada. Retorna 0 se obteve sucesso.
Tcor corMapaCinza (MapaCinza *img, int x, int y, int tipo_ext);
obtm a cor do mapa de tons de cinza img no pixel [x, y].tipo_ext indica o tratamento
para pixels alm das bordas: se 0, retorna PRETO; se 1, retorna BRANCO. Retorna -1 em
caso de erro.
int mudaCorMapaCinza (MapaCinza *img, int x, int y, Tcor cor);
altera a cor do mapa de tons de cinza img no pixel [x, y]. Retorna 0 se obteve sucesso.
int gravaMapaCinza (MapaCinza *img, char *nome_arq);
grava o mapa de tons de cinza img no arquivo nome_arq. Retorna 0 se obteve sucesso.
void apagaMapaCinza (MapaCinza *img);
desaloca contedo da estrutura img. No desaloca a estrutura em si.
26
4.3.2
y, int tipo_ext);
obtm o valor do mapa de sinal 2D img no ponto [x, y]. tipo_ext indica o tratamento
para pontos alm das bordas: se 0, retorna 0.0; se 1, retorna +; se 2, retorna o valor do
ponto da borda mais prximo. Retorna + em caso de erro.
int setaMapaSinal2d(MapaSinal2d img, int x, int y, double valor);
altera o valor do mapa de sinal 2D img no ponto [x, y] para valor. Retorna 0 se obteve
sucesso.
int copiaMapaSinal2d(MapaSinal2d img_in, MapaSinal2d img_out);
copia os valores do mapa de sinal 2D img_in para img_out. Supe que ambas as imagens
j esto inicializadas. Retorna 0 se obteve sucesso.
void apagarMapaSinal2d(MapaSinal2d img);
desaloca contedo da estrutura img e a estrutura em si (mantenedor: problema de vazamento de memria tambm se aplica aqui).
27
MapaSinal2d outp);
calcula o gradiente do mapa img em relao varivel var (que deve ser 'x' ou 'y'. So
utilizadas mscaras de Sobel10 para o clculo. Se outp estiver inicializado, a sada ser
gravada nele; seno, ser alocada uma nova estrutura (passe NULL para sempre alocar).
Caso outp esteja inicializado, deve ter as mesmas dimenses de img. Retorna NULL em
caso de erro.
MapaSinal2d opAritMS2d(MapaSinal2d op1, MapaSinal2d op2,
'-', '*', ou '/'. Se outp estiver inicializado, a sada ser gravada nele; seno, ser alocada uma nova estrutura (passe NULL para sempre alocar). Caso outp esteja inicializado,
deve ter as mesmas dimenses de op1 e op2. Retorna NULL em caso de erro.
MapaSinal2d multEscalarMS2d(MapaSinal2d op, double
28
estrutura (passe NULL para sempre alocar). Caso outp esteja inicializado, deve ter as
mesmas dimenses de op. Retorna NULL em caso de erro.
MapaSinal2d aplicaFuncMS2d(MapaSinal2d op, double
op1 e op2 de mesma posio. O elemento de op1 fornecido como primeiro parmetro da funo; o elemento de op2 como o segundo. Note que a funo fornecida deve
considerar y como sendo o primeiro parmetro. op1 e op2 devem estar inicializados e
devem ter as mesmas dimenses. Se outp estiver inicializado, a sada ser gravada nele;
seno, ser alocada uma nova estrutura (passe NULL para sempre alocar). Caso outp esteja inicializado, deve ter as mesmas dimenses de op1 e op2. Retorna NULL em caso de
erro.
MapaSinal2d filtroGabor(MapaSinal2d img, int nscale, int
4.3.3
ListaLigada.
Funes:
29
4.3.4
30
NULL.
int aumentaChaveFP(FilaPrioridades f, long i, ElemFP elem);
substitui o elemento na posio i da la f por elem. A substituio, no entanto, s ocorre
se a prioridade de elem for maior que a prioridade antiga na posio i. Retorna 0 se
obteve sucesso.
4.3.5
Arquivo-cabealho: include/erros.h.
Funes:
void erro_img(void);
Mensagem de erro informando imagem no inicializada.
31
void erro_memoria(void);
Mensagem de erro informando erro com alocao de memria.
void erro_escreve_arq(void);
Mensagem de erro informando erro na gravao de arquivo.
void erro_le_arq(void);
Mensagem de erro informando erro na leitura de arquivo.
32
DIFICULDADES ASSOCIADAS AO
DESENVOLVIMENTO
A principal diculdade no desenvolvimento do Gaudi-AFIS foi a no-utilizao de bibliotecas de manipulao de imagens e de processamento de sinais prontas. Tentou-se ainda utilizar
GSL1 , no entanto boa parte do cdigo j estava implementado, logo no valia a pena refazer
tudo.
O fato de a verso utilizada da biblioteca IM (2.6) s funcionar com imagens TIFF sem
alpha tambm foi um incoveniente, j que um bom tempo foi gasto em pesquisa sobre converso
de formatos.
O sistema foi reestruturado diversas vezes, a m de se obter uma estrutura melhor, mas
principalmente (e infelizmente) para obter melhor desempenho, principalmente relacionado a
uso de memria (o que, infelizmente, no foi alcanado por completo).
Uma coisa que ajudou bastante foi o uso de Makeles2 . Alm disso, o fato de sistemas AFIS
terem uma arquitetura bem denida na literatura (do tipo canos e ltros, do ingls pipe and
lter3 ) e de tal tipo de arquitetura ser inerente ao Linux (herdado do UNIX) facilitou bastante o
projeto do sistema.
Pequenos detalhes tambm implicaram em melhorias absurdas de desempenho; a principal
foi a troca da ordem dos fors durante laos em imagens ou mapas de sinais: devido utilizao
de uma matriz, colocar a segunda dimenso (y) no for mais externo leva a um desempenho
melhor, j que o vetor acessado sequencialmente. Problemas em associar as dimenses com
o formato cartesiano xado na mente tambm ocorreram. Outro exemplo: um pequeno erro no
programa de segmentao de imagens (que foi corrigido) levava a uma pssima taxa de acerto
na classicao inteira.
1 http://www.gnu.org/software/gsl/
2 http://www.hsrl.rutgers.edu/ug/make_help.html
3 http://www.dossier-andreas.net/software_architecture/pipe_and_filter.html
33
REFERNCIAS BIBLIOGRFICAS
AMENGUAL, J. C. et al. Real-time minutiae extraction in ngerprint images. In: Sixth
International Conference on Image Processing and Its Applications. Washington, DC, USA:
IEEE Computer Society, 1997. v. 2, p. 871875.
CORMEN, T. H. et al. Algoritmos: teoria e prtica. Rio de Janeiro: Elsevier, 2002. Traduo
da 2a edio americana.
COSTA, S. M. F. Classicao e Vericao de Impresses Digitais. Dissertao (Mestrado)
Universidade de So Paulo, 2001.
FACON, J. Algoritmo de Anamento de Holt. 2004. Pontifcia Universidade Catlica do Paran.
Disponvel em <http://www.ppgia.pucpr.br/~facon/Afinamento/AfinamentoHolt3.
pdf>.
GOMES, J.; VELHO, L. Computao Grca: Imagem. Rio de Janeiro, Brasil: IMPA:
Instituto de Matemtica Pura e Aplicada e SBM: Sociedade Brasileira de Matemtica, 1994.
ISBN 85-244-0088-9.
GONZALEZ, R. C.; WOODS, R. E. Digital Image Processing. 2nd. ed. New York: Prentice
Hall, 2002.
HONG, L.; WAN, Y.; JAIN, A. K. Fingerprint image enhancement: Algorithms and
performance evaluation. IEEE Transactions on Pattern Analysis and Machine Intelligence,
v. 20, n. 8, p. 777789, 1998. ISSN 0162-8828.
JAIN, A.; PANKANTI, S. Fingerprint Classication and Matching. Department of Computer
Science, Michigan State University, East Lansing, MI, USA, 1999. Technical Report
MSU-CPS-99-5.
JAIN, A. K.; HONG, L.; BOLLE, R. On-line ngerprint verication. IEEE Transactions on
Pattern Analysis and Machine Intelligence, v. 19, n. 4, p. 302313, 1997.
KARU, K.; JAIN, A. K. Fingerprint Classication. Department of Computer Science,
Michigan State University, East Lansing, MI, USA, 1999. Technical Report MSU-CPS-99-21.
KOVESI, P. Matlab Functions for Image Processing. 2005. University of Western Australia.
Acessado em: Julho de 2007. Disponvel em: <http://www.csse.uwa.edu.au/~pk/
research/matlabfns/>.
LIMA, M. S. de; FERREIRA JNIOR, P. E. Classicao de impresses digitais via anlise
de pontos singulares. In: Workshop of Undergraduate Work, XX Brazilian Symposium
on Computer Graphics and Image Processing. Belo Horizonte, MG, Brazil: Sociedade
Brasileira de Computao, 2007. Disponvel em <http://wiki.dcc.ufba.br/pub/Gaudi/
Publicacoes/wuw-sibgrapi2007-published.pdf>.
34
MAINTZ, T. Digital and Medical Image Processing. 2007. Utrecht University. Disponvel em
<http://www.cs.uu.nl/docs/vakken/imgp/>.
MAIO, D.; MALTONI, D. Direct gray-scale minutiae detection in ngerprints. IEEE
Transactions on Pattern Analysis and Machine Intelligence, v. 19, n. 1, p. 2740, 1997.
MALTONI, D. et al. Handbook of Fingerprint Recognition. New York: Springer-Verlag, 2003.
MYLER, H. R.; WEEKS, A. R. Computer Imaging Recipes in C. Englewood Cliffs, NJ, USA:
Prentice-Hall, 1993.
SERRA, J. Image Analysis and Mathematical Morphology. Orlando, FL, USA: Academic
Press, 1982.
THE Henry Classication System. 2003. International Biometric Group. Disponvel em
<http://www.biometricgroup.com/Henry%20Fingerprint%20Classification.pdf>.
WATSON, C. I. NIST Special Database 14, Fingerprint Database. National Institute of
Standards and Technology, 1993.
35
APNDICE A -- LICENCIAMENTO
Projeto Biometrica
Grupo de Engenharia de Algoritmos e Programao Distribuda
Departamento de Cincia da Computao
Instituto de Matemtica
Universidade Federal da Bahia
http://gaudi.dcc.ufba.br/
under support of Fundao de Amparo Pesquisa do Estado da Bahia
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the
36
A.1
A.2
37
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
The software is provided "as is", without warranty of any kind, express or
implied, including but not limited to the warranties of merchantability, fitness
for a particular purpose and noninfringement. In no event shall the authors or
copyright holders be liable for any claim, damages or other liability, whether
in an action of contract, tort or otherwise, arising from, out of or in
connection with the software or the use or other dealings in the software.