121
PROYECTO FIN DE CARRERA ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARA SISTEMAS EMBEBIDOS GNU/LINUX AUTOR: JOAQUÍN DIEGO REYES GONZÁLEZ MADRID, Septiembre 2005 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO INDUSTRIAL

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

PROYECTO FIN DE CARRERA

ALGORITMO DE OBTENCIÓN DECARACTERÍSTICAS EN HUELLAS

DACTILARES PARA SISTEMASEMBEBIDOS GNU/LINUX

AUTOR: JOAQUÍN DIEGO REYES GONZÁLEZ

MADRID, Septiembre 2005

JOAQUÍN DIEGO REYES GONZÁLEZ - 1 -

UNIVERSIDAD PONTIFICIA COMILLASESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)

INGENIERO INDUSTRIAL

Page 2: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

MMEMORIAEMORIA

JOAQUÍN DIEGO REYES GONZÁLEZ - 2 -

Page 3: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Índice de contenidoÍndice de contenido

1.- Prólogo..................................................................................................5

2.- Introducción..........................................................................................7

1 Estudio de los trabajos y tecnologías existentes....................................7

2 Motivación del proyecto........................................................................9

3 Objetivos.............................................................................................10

4 Metodología y solución desarrollada..................................................10

5 Recursos y herramientas empleadas....................................................12

3.- Análisis de la placa MipScale............................................................14

1 Configuración de la máquina base......................................................14

2 Desarrollo de una pequeña aplicación.................................................16

3 Prueba de la unidad de coma flotante.................................................18

4.- Formato utilizado para las imágenes................................................22

1 El formato PBM (Portable BitMap)....................................................22

2 El formato PGM (Portable GrayMap).................................................23

3 El formato PPM (Portable PixMap)....................................................23

5.- Las huellas dactilares y sus características......................................25

6.- Algoritmo de obtención de características.......................................27

1 Lectura del fichero..............................................................................29

2 Atenuación y ajuste de tonalidades.....................................................31

3 Ajuste de negros y blancos fijos por direcciones................................33

4 Búsqueda de direcciones.....................................................................36

5 Binarizado de la imagen o paso a blanco y negro...............................38

6 Proceso de apertura y erosión..............................................................40

7 Proceso de apertura y dilatación..........................................................42

8 Proceso de cerrado y dilatación...........................................................44

9 Proceso de cerrado y erosión...............................................................46

10 Obtención de esqueletos....................................................................48

11 Perfeccionamiento de los esqueletos.................................................50

JOAQUÍN DIEGO REYES GONZÁLEZ - 3 -

Page 4: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

12 Superposición de los esqueletos sobre la imagen original................52

13 Obtención de características..............................................................54

7.- Experimentos y Resultados...............................................................58

8.- Conclusiones.......................................................................................67

9.- Futuros desarrollos............................................................................69

10.- Bibliografía.......................................................................................72

11.- Análisis del mercado........................................................................75

12.- Posibilidades del algoritmo desarrollado.......................................77

13.- Ejecución del algoritmo...................................................................79

14.- Configuración de los parámetros del proceso................................81

JOAQUÍN DIEGO REYES GONZÁLEZ - 4 -

Page 5: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

1.- 1.- PrólogoPrólogo

En la memoria de este proyecto se recogen los trabajos realizados

investigando un nuevo proceso de reconocimiento de huellas dactilares. Todo ser

humano posee varios rasgos propios y únicos, pero no es sencillo obtener un

esquema en el que se muestren todos estos rasgos, de forma que se puedan

comparar entre varios individuos y así poder asegurar la identidad de cada uno.

Sin embargo, el reconocimiento de huellas dactilares no es nuevo, sino que se

lleva usando varios años con éxito, pero no de una forma demasiado fiable. En

los procesos que se están efectuando a día de hoy, existen dos vertientes: en un

caso es necesario una imagen de muy buena calidad y un entorno muy potente

que permita un análisis riguroso de la imagen, mientras que en la otra vertiente

nos encontramos con pequeños dispositivos, dotados de sensores de baja calidad,

que consiguen identificar a cada individuo mediante la comparación de los datos

obtenidos con el propio sensor con los ya almacenados en una base de datos

propia, realizada también con el mismo sensor. La primera opción tiene como

ventaja que los resultados son realmente fiables e independientes de la forma de

obtención de la imagen, pero esto es a cambio de una costosa y elevada

infraestructura, que los convierte en equipos difícilmente transportables y al

alcance de pocos usuarios. La segunda opción, sin embargo, soluciona el elitismo

existente en el ámbito de reconocimiento de huellas dactilares, pero tiene muy

poca diversidad, ya que sólo es posible utilizar los pobres resultados que se

obtienen, con el propio dispositivo y con una base de datos muy reducida, es

decir, capaz de identificar a un escaso abanico de individuos.

En este proyecto, se busca una solución intermedia a los dos casos

presentados. Lo que pretendemos es alcanzar un algoritmo de fácil implantación

que maneje cualquier imagen y detecte algunas de las características importantes

de una huella dactilar, las suficientes como para identificar a un individuo en el

JOAQUÍN DIEGO REYES GONZÁLEZ - 5 -

Page 6: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

menor tiempo posible. En busca de una fácil y, sobre todo, versátil implantación

buscamos un algoritmo que funcione en sistemas embebidos GNU/Linux. Si

utilizamos un sistema operativo libre, como GNU/Linux, los beneficios son

innumerables pero podemos destacar que cada vez son más los pequeños

dispositivos que llevan GNU/Linux embebido y que, al ser un sistema libre,

existen multitud de desarrolladores asegurando un próspero futuro. Además,

utilizando una base estable y probada, nos podemos dedicar a desarrollar

únicamente el algoritmo, sin tener en cuenta la arquitectura sobre la que se va

implantar.

Como punto de inicio del proyecto se pensaba implantar un algoritmo ya

desarrollado en el Instituto de Investigación Tecnológica (IIT), pero éste estaba

optimizado para su uso con un potente software de cálculo y se alejaba de nuestro

propósito de alcanzar un algoritmo sencillo y versátil. Este motivo ha disminuido

las aspiraciones iniciales del proyecto y, aunque los resultados pueden ser

considerados aceptables, podemos decir que éste proyecto puede ser el principio

de un desarrollo largo y siempre mejorable, de un sistema de reconocimiento de

huellas dactilares para sistemas de corta infraestructura.

Finalmente, nos gustaría agradecer la colaboración de la empresa

MicroPowerSoft (MIPSA) que ha cedido una pequeña placa MipScale, con

GNU/Linux embebido, para poder llevar a cabo ciertas pruebas del algoritmo

desarrollado y comprobar la utilidad de éste en dispositivos de pequeño tamaño.

JOAQUÍN DIEGO REYES GONZÁLEZ - 6 -

Page 7: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

2.- 2.- IntroducciónIntroducción

A lo largo de esta memoria vamos a explicar en qué consiste el algoritmo

desarrollado para la obtención de características de una huella dactilar, así como

los trabajos desarrollados para llevar a cabo el desarrollo de éste algoritmo así

como sus pruebas en un sistema con GNU/Linux embebido. En el siguiente

capítulo, el tercero, se analiza la placa que se va a utilizar a modo de banco de

pruebas como dispositivo de bolsillo. En el cuarto capítulo, se presenta el formato

utilizado para manejar las imágenes, de forma que éste manejo sea lo más

sencillo posible, y en el quinto capítulo se muestra qué es una huella dactilar y

cuáles son las características más importantes. El sexto capítulo es el más extenso

y en el que se explica con el máximo detalle posible en qué consiste el algoritmo,

realizando todos los procesos implementados de forma consecutiva y viendo el

resultado que se obtiene después de realizar cada proceso. A continuación, en el

capítulo séptimo, se van a realizar una serie de ensayos y experimentos en los que

vemos cómo podemos mejorar los resultados optimizando el algoritmo para un

tipo concreto de huellas dactilares. En los dos siguientes capítulos, se obtienen las

conclusiones objetivas del algoritmo y se analizan los futuros desarrollos que

podrían mejorar nuestro algoritmo desarrollado.

11 Estudio de los trabajos y tecnologías existentesEstudio de los trabajos y tecnologías existentes

Hasta ahora todos los trabajos desarrollados por el Instituto de

Investigación Tecnológica (IIT) necesitaban el uso de grandes máquinas y

software propietario para poder llevar a cabo el análisis de una huella dactilar. El

proceso seguido para llevar a cabo éste análisis, siempre ha seguido el mismo

patrón, cuya utilidad ha sido ampliamente comprobada en la multitud de

proyectos que se han llevado a cabo ya que, aunque existen ciertas diferencias

entre los proyectos, si que existe un esquema general que siguen todos los

JOAQUÍN DIEGO REYES GONZÁLEZ - 7 -

Page 8: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

proyectos, el cual incluye los siguientes procesos que son siempre realizados de

forma secuencial:

✗ Filtrado de la imagen: En todos los procesos se lleva a cabo un filtrado

de la imagen, buscando siempre utilizar la mejor imagen posible para

asegurar los resultados más fieles a nuestro alcance.

✗ Binarizado de la imagen: La imagen en color o con escala de grises no

mejora los resultados y sí aumenta la carga del proceso, por lo que es

fundamental obtener una imagen en blanco y negro, a partir de la

imagen original, con la que poder llevar a cabo la obtención de

características.

✗ Análisis de las direcciones fundamentales: No todos los procesos

estudiados realizan un análisis acerca de las direcciones fundamentales,

pero sí es común en un gran número de ellos, de forma que se puede

obtener información adicional para el proceso de reconocimiento.

✗ Obtención de contornos o esqueletos: En éste punto es dónde existe la

posibilidad de elegir entre una opción u otra ya que cada una posee sus

ventajas e inconvenientes, siendo ambas válidas para poder encontrar

las características fundamentales de una huella dactilar. En la obtención

de contornos buscaríamos los bordes de las crestas de la huella, mientras

que en la obtención de esqueletos estaríamos buscando la parte central

de la cresta de la huella.

✗ Obtención de características: Es el proceso final y común a todos los

estudiados. En él se averiguan las posiciones de las características para

poder así llegar a completar el proceso de reconocimiento.

✗ Comparación de características entre dos huellas: Éste es el proceso

necesario para asegurar la identidad de un individuo por medio de su

huella dactilar. Sin embargo, éste proceso ya se escapa a los objetivos de

JOAQUÍN DIEGO REYES GONZÁLEZ - 8 -

Page 9: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

éste proyecto, ya que implica la búsqueda del centro de la huella, así

como la translación, rotación y desplazamiento de las características

hasta poder asegurar si dos huellas son exactas, aunque sólo se tenga

una parte de ellas.

Los proyectos estudiados han sido incluidos en la bibliografía, que se

encuentra en el último apartado de ésta memoria.

22 Motivación del proyectoMotivación del proyecto

Éste proyecto pretende mejorar y fusionar varios de los proyectos

desarrollados por el IIT a lo largo de los últimos años. La mejora consiste en

disminuir el tiempo de proceso y la fusión va a analizar los procesos ya utilizados

en otros proyectos y elegir aquéllos que puedan proporcionar el mejor

rendimiento. Una vez analizado el proyecto de Bárbara Carlón Sainz (referencia

[6] en la bibliografía) observamos que el tiempo de proceso que necesita el

algoritmo ronda los 30 minutos en una máquina gobernada por un

microprocesador Intel Pentium IV a 1'6GHz y 521MB de RAM, mientras que

nuestro algoritmo tan sólo necesita 20 segundos en la misma máquina. A la hora

de implantar éste algoritmo en la placa MipScale el tiempo aumenta, como es

lógico, hasta los 6 minutos, siendo todavía un tiempo razonable, sobre todo

teniendo en cuenta que se trata de un dispositivo de bolsillo.

Además, nuestro algoritmo se puede implantar en cualquier máquina que

posea el Sistema Operativo GNU/Linux embebido, tal y como puede ser un

ordenador PC o Macintosh doméstico o cualquier otro dispositivo cuya

arquitectura sea menor, no cerrando las puertas a máquinas más potentes. De esta

forma resulta sencillo, por lo tanto, centrarse en la implantación del algoritmo y

olvidarse del sistema operativo, el cual se encargará de gestionar los recursos del

hardware.

JOAQUÍN DIEGO REYES GONZÁLEZ - 9 -

Page 10: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

33 ObjetivosObjetivos

La idea de llevar a cabo este proyecto surge del deseo de llevar a cabo un

proceso de cálculo sobre un sistema embebido con GNU/Linux. El proceso

elegido es la obtención de características de una huella dactilar, pero éste no es el

único objetivo, sino que existen varios objetivos:

✗ Utilizar dispositivos de pequeño tamaño con GNU/Linux embebidos y

desarrollar aplicaciones que puedan ser ejecutadas de forma autónoma

en el dispositivo.

✗ Realizar un proceso digital de una imagen utilizando el lenguaje de

programación C, uno de los más extendidos y de gran versatilidad.

✗ Programar un algoritmo que obtenga las características de una huella

dactilar en el menor tiempo posible, de forma que sea factible identificar

a un individuo.

✗ Utilizar exclusivamente software libre para el completo desarrollo del

proyecto.

44 Metodología y solución desarrolladaMetodología y solución desarrollada

Para poder llevar a cabo la obtención de características de una huella

dactilar, nuestro algoritmo debe realizar los siguientes procesos:

✗ Lectura de la imagen: El primer proceso es obtener la imagen y, si ésta

se encuentra a color es pasada a escala de grises.

✗ Atenuación: El rango de valores que pueden tener los píxeles de la

imagen va desde el valor 0 (negro) hasta el valor 255 (blanco). Ahora

bien, no todas las imágenes tienen estos valores máximos y mínimos,

por lo que para aprovechar al máximo la información de la imagen, se

JOAQUÍN DIEGO REYES GONZÁLEZ - 10 -

Page 11: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

ajustan los valores de la imagen, de forma que el máximo y mínimo,

coincidan con 255 y 0 respectivamente.

✗ Determinación de direcciones y ajuste de tonalidades: El siguiente

proceso evalúa los píxeles cercanos de cada píxel de forma que si existe

una clara mayoría de píxeles cercanos negros o blancos, el píxel se fija a

blanco o negro, a no ser que no exista una clara mayoría, en cuyo caso

se deja el píxel con el mismo valor que tiene. Además, en éste proceso

conseguimos una matriz que nos indica la dirección en la que existe un

dominio claro de una determinada tonalidad o, si por el contrario, no

existe ninguna dirección dominante.

✗ Binarización de la imagen: Una vez que hemos obtenido la matriz de

direcciones con la mayor información posible, pasamos la imagen a

blanco y negro puros, es decir una imagen binaria, compuesta por ceros

y unos. Si buscáramos las direcciones dominantes con la imagen

binarizada, la matriz obtenida no sería tan precisa.

✗ Procesos de apertura y cierre: También conocidos como opening y

closing, se trata de dos procesos que filtran la imagen y evitan la

permanencia de puntos negros sobre fondo blanco y viceversa, puntos

blancos sobre fondo negro. Estos procesos son necesarios para mejorar

la calidad de la imagen tras la binarización, suavizando los bordes y

eliminado el ruido que pueda aparecer.

✗ Obtención de esqueletos: En este paso hemos tomado un camino

divergente a los procesos estudiados que se han realizado hasta ahora en

el IIT, pero común a muchos procesos de reconocimiento de huellas

dactilares obtenidos de la bibliografía. Este proceso es más complejo

que la búsqueda de contornos, el cual ha sido utilizado por los procesos

desarrollados en el IIT, pero el rendimiento es superior, ya que es

necesario una menor carga de cálculo para obtener los mismos

JOAQUÍN DIEGO REYES GONZÁLEZ - 11 -

Page 12: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

resultados que se pueden obtener con los esqueletos. Como parte

adicional a este proceso, el algoritmo superpone los esqueletos

obtenidos sobre la imagen original.

✗ Obtención de las características: Una vez que tenemos los esqueletos,

se analizan para descubrir dónde se dividen en dos, punto que será

marcado como píxel en el que existe una bifurcación.

Todos estos procesos se analizarán más concretamente en el capítulo 6, en

el que mostraremos las imágenes que el algoritmo va grabando al finalizar cada

uno de los procesos.

55 Recursos y herramientas empleadasRecursos y herramientas empleadas

Como ya hemos mencionado, el proyecto se ha desarrollado en un PC

doméstico, gobernado por un microprocesador Intel Pentium IV a 1'6 GHz con

512 MB de RAM y con la distribución GNU/Linux Debian Sid instalada. Sin

embargo, a la hora de manejar la placa hemos necesitado otra máquina, también

PC, que disponga de puerto serie. Esta máquina se encuentra gobernada por un

microprocesador Intel Pentium III a 450 MHz y con 384 MB de RAM, la cual se

encarga de compilar el código fuente y transferir el ejecutable a nuestra placa

MipScale, gobernada por el microprocesador Intel Xscale PXA255 a 400MHz y

con 32 MB, que podemos ver a continuación:

Placa MipScale

JOAQUÍN DIEGO REYES GONZÁLEZ - 12 -

Page 13: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

La placa MipScale posee unas características idóneas para el desarrollo

del proyecto, tales como un bajo consumo (170mA a 5V), un reducido tamaño

(80x60mm), arquitectura de 32 bits, 32 MB de memoria STRATA Flash, un

puerto USB (slave), un puerto serie (RS-232) y dispone del kernel de GNU/Linux

2.4.19 embebido.

En el apartado del software, se ha utilizado Software Libre para el

completo desarrollo del proyecto, ya que las herramientas utilizadas han sido las

siguientes:

✗ Octave, para la realización de cálculos matemáticos.

✗ The Gimp, para el retoque y conversión de las imágenes.

✗ Bluefish, como editor de texto para el código en C del algoritmo.

✗ GCC, compilador libre utilizado sobre el PC y cruzado para la

compilación del algoritmo de forma que pueda ser implantado en la

placa MipScale.

✗ gThumb, para poder ver las imágenes obtenidas.

✗ OpenOffice.org, para la redacción de éste documento.

✗ Distribución GNU/Linux Debian Sid, instalada en los ordenadores PC

utilizados.

Actuando de esta forma, únicamente se pretende apoyar al desarrollo del

Software Libre y darlo a conocer dentro del ambiente universitario.

JOAQUÍN DIEGO REYES GONZÁLEZ - 13 -

Page 14: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

3.- 3.- Análisis de la placa MipScaleAnálisis de la placa MipScale

La placa con la que se desarrolla el Proyecto posee un puerto serie como

única forma de transmitir información de manera bidireccional, ya que aunque

también dispone de un conector USB, éste sólo funciona en modo esclavo. Por lo

tanto, necesitamos conectar la placa a un ordenador mediante un clave de puerto

serie, 9 hilos, cruzado. Esto es necesario porque la placa no posee ningún tipo de

pantalla ni ningún dispositivo en el que se muestre información acerca de lo que

está ocurriendo, por lo tanto al ordenador al que conectamos la placa será

conocido como máquina base y servirá para controlar los procesos y aplicaciones

que se ejecuten en la placa. Normalmente hemos utilizado conexiones de red,

mediante ssh, para conectarnos a la máquina base y así poder desarrollar el

algoritmo en cualquier máquina.

11 Configuración de la máquina baseConfiguración de la máquina base

Una vez que tenemos conectada la placa al ordenador mediante el cable de

puerto serie, y alimentada con tensión (bien mediante adaptador a la red eléctrica,

bien mediante baterías), necesitamos configurar la máquina para que se

comunique con nuestra placa. Para ello necesitamos una aplicación que sea capaz

de enviar y recibir información a través del puerto serie y, como el sistema

operativo que estamos usando en la máquina base es GNU/Linux Debian, la

elección se llama minicom. Se trata de un programa de uso sencillo a través de

un terminal y para instalarlo bastaría con ejecutar, como superusuario, apt-get

install minicom lrzsz (instalamos el paquete lrzsz para poder utilizar

el protocolo de comunicación zmodem y transmitir archivos a la placa). Si todo

el proceso de instalación ha sido llevado a cabo sin ningún tipo de contratiempo,

al teclear en un terminal o en una consola el comando minicom, deberíamos leer

algo parecido a lo que muestra a continuación:

JOAQUÍN DIEGO REYES GONZÁLEZ - 14 -

Page 15: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Welcome to minicom 2.1

OPCIONES: History Buffer, F-key Macros, Search History Buffer, I18nCompilado en Mar 29 2005, 09:39:09.

Presione CTRL-A Z para obtener ayuda sobre teclas especiales

El siguiente paso sería configurar el minicom para que se pueda entender

con la placa, para lo cual, y según las especificaciones del fabricante, es necesario

configurar los siguientes parámetros:

- Bits por segundo: 115.200

- Bits de datos: 8

- Paridad: ninguna

- Bits de parada: 1

- Control de flujo: ninguno

Para configurar estos parámetros es necesario pulsar simultáneamente las

teclas Control y A, para después pulsar la tecla P (también se puede pulsar la

tecla Z y consultar la ayuda del programa). Veremos una pantalla parecida a esto:

Pantalla de configuración del programa minicom

JOAQUÍN DIEGO REYES GONZÁLEZ - 15 -

Page 16: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Si seleccionamos la opción de Configuración de la puerta serial, podremos

configurar estos parámetros en una pantalla parecida esta:

Configuración necesaria para el correcto funcionamiento del minicom

Pulsamos la tecla Enter para salir, seleccionamos la opción de salir y

volvemos a la interfaz del minicom en la que, si reiniciamos la placa con el

botón de Reset, podemos ver los mensajes de arranque del sistema operativo

que lleva implementado y se pueden apreciar en Apéndice B.

22 Desarrollo de una pequeña aplicaciónDesarrollo de una pequeña aplicación

Para llevar a cabo el desarrollo de una aplicación, lo primero de todo es

elegir un lenguaje apropiado. Nuestra elección ha sido el lenguaje C, debido a

que es de uso común, sencillo y suficientemente extendido. Además de elegir el

lenguaje, es necesario obtener un compilador apropiado para la máquina en la que

se va a implementar la aplicación. En nuestro caso estamos trabajando con una

placa que lleva un procesador Intel XSCALE PXA250 de 400MHz, por lo que

necesitamos un compilador, denominado cruzado, que nos permita compilar el

código deseado de manera apropiada. Este compilador lo conseguimos, entre uno

JOAQUÍN DIEGO REYES GONZÁLEZ - 16 -

Page 17: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

de los posibles sitios, en la web de LART (http://www.lart.tudelft.nl/). Aquí

elegimos el compilador gcc, versión 2.95.3, por ser la más apropiada para nuestra

máquina base y nuestra placa, según las especificaciones de los fabricantes. Las

instrucciones para instalar el compilador vienen detalladas en la propia web.

Por lo tanto, lo siguiente que nos queda por hacer es escribir un código en

C sumamente sencillo, como por ejemplo:

#include <stdio.h>

void main (void){printf("\n Muy Buenas:\n\n");printf("\n Éste es el primer programa que compilo\n\n");printf("\n (d\"_\"b jreyes13)\n\n");}

Éste código lo guardamos como un fichero de texto llamado prueba.c y

lo compilamos. Para llevar a cabo la compilación es necesario usar el compilador

cruzado, ejecutando el siguiente comando:

arm-linux-gcc -o prueba.arm prueba.c

Tras ejecutar este comando, obtenemos el archivo ejecutable,

prueba.arm, el cual podremos llevar a la placa MipScale y ejecutar como

cualquier otro ejecutable, en un máquina GNU/Linux, con el siguiente comando:

./prueba.arm

Como consecuencia de ésta ejecución, podremos ver:

Muy Buenas:

Éste es el primer programa que compilo

(d"_"b jreyes13)

Este proceso de ejecución de nuestro programa de prueba, así como la

transferencia del archivo a la placa, ha sido realizado a través del programa

JOAQUÍN DIEGO REYES GONZÁLEZ - 17 -

Page 18: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

minicom. Con éste programa, lo que hemos tenido que hacer antes de transferir

el archivo ejecutable, es arrancar el sistema operativo GNU/Linux que lleva

integrado la placa MipScale, tal y como viene explicado en el primer apéndice.

33 Prueba de la unidad de coma flotantePrueba de la unidad de coma flotante

Tal y como podemos ver en los mensajes de arranque del sistema

operativo GNU/Linux embebido en la placa MipScale, esta placa no lleva

integrada una unidad de coma flotante, sino que las operaciones en coma flotante

se resuelven mediante rutinas de software, librerías de coma flotante, cuyo

rendimiento puede ser puesto en duda. A esta conclusión hemos llegado tras

apreciar el siguiente mensaje en el arranque del sistema:

NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com

Por este motivo, hemos creído oportuno probar cómo funcionan éstas

librerías de coma flotante y, para evaluar el rendimiento que estas pueden aportar

al algoritmo, compararemos la diferencia del tiempo de proceso de un algoritmo

utilizando variables int (variables de coma fija) y utilizando variables de tipo

float (variables de coma flotante, que necesitarían el correspondiente

coprocesador matemático).

Para llevar a cabo una prueba fiel, hemos decidido programar un sencillo

filtro FIR (Finite Impulse Response, Respuesta Finita de Impulsos) sobre una

señal sinusoidal, a la que le hemos introducido ruido, para que nuestro filtro lo

elimine. Éste filtro consiste en sustituir el valor de la señal para un instante dado

por la media de los instantes anteriores. El número de instantes a tener en cuenta

para realizar el cálculo es variable, por lo que cuanto mayor sea el número de

instantes considerados, mayor será el proceso de filtrado y mejor será

uniformidad y periodicidad de la señal. Sin embargo, parece obvio que cuanto

mayor sea el número de instantes considerados, mayor será la carga de cálculo del

proceso, siendo éste unos de los objetivos de nuestra prueba.

JOAQUÍN DIEGO REYES GONZÁLEZ - 18 -

Page 19: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

El resultado obtenido con el filtro lo podemos observar a continuación:

0 1 2 3 4 5 6 7 8 9 10 11 12 13-2

-1,75

-1,5

-1,25

-1

-0,75

-0,5

-0,25

0

0,25

0,5

0,75

1

1,25

1,5

1,75

2

Señales obtenidas en el filtro de la señal sinusoidal

Este gráfico muestra los resultados obtenidos con el filtro, al que le hemos

introducido la señal que vemos en color magenta y hemos ido aumentando el

tamaño de la ventana de los datos, es decir el número de instantes que se utilizan

al aplicar el filtro. Para una ventana de datos pequeña (del orden de 10 datos)

obtenemos la señal en verde, para una ventana mediana (100 datos) la señal roja y

para una venta grande (1.000 datos) obtenemos la señal azul, perfectamente

filtrada, pero de menor amplitud.

El código del algoritmo utilizando para la prueba en coma fija es:

#include <stdio.h>#define DATOS 13000#define VENTANA 13

main(void) { int i,j,n; int d[DATOS],fir[DATOS],suma; for(i=0;i<DATOS;i++)

JOAQUÍN DIEGO REYES GONZÁLEZ - 19 -

Page 20: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

n=scanf("%d",&d[i]); for(i=0;i<DATOS;i++)

{ suma=0; for(j=0;j<VENTANA;j++) { if((i+j)<(DATOS)) suma+=d[i+j]; else suma+=0; } fir[i]=suma/VENTANA; suma=0; printf("%d\n",fir[i]);}

return 0; }

Y como podemos ver a continuación, el código del mismo algoritmo en

coma flotante, es muy similar:

#include <stdio.h>#define DATOS 13000#define VENTANA 13

main(void) { int i,j,n; float d[DATOS],fir[DATOS],suma; for(i=0;i<DATOS;i++) n=scanf("%f",&d[i]); for(i=0;i<DATOS;i++) { suma=0; for(j=0;j<VENTANA;j++) { if((i+j)<(DATOS)) suma+=d[i+j]; else suma+=0; } fir[i]=suma/VENTANA;

JOAQUÍN DIEGO REYES GONZÁLEZ - 20 -

Page 21: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

suma=0; printf("%f\n",fir[i]); }

return 0; }

La conclusión directa de este experimento es que hay una diferencia

considerable entre utilizar variables de tipo int o tipo float. Concretamente,

si utilizamos variables de tipo int, conseguimos que el mismo algoritmo se

llegue a ejecutar hasta treinta veces más rápido que si utilizamos variables de tipo

float.

Por lo tanto, este experimento ha marcado una premisa a la hora de

implantar el algoritmo desarrollado en este proyecto: se deben utilizar únicamente

variables de tipo int. Esta premisa implica realizar un estudio de la implantación

en coma fija, que tenga en cuenta los problemas de codificación y escalado

adecuados para que la precisión se mantenga dentro de unos límites razonables.

Además, de esta forma se elimina un grado de libertad a la hora de marcar el

estilo a seguir en la programación del algoritmo. Por éste motivo hemos decidido

utilizar variables de tipo short int, de tal forma que no superemos en ningún

momento los 32 bits de los que dispone la placa MipScale, disminuyendo así el

uso de la memoria y aumentando la velocidad del algoritmo.

JOAQUÍN DIEGO REYES GONZÁLEZ - 21 -

Page 22: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

4.- 4.- Formato utilizado para las imágenesFormato utilizado para las imágenes

La primera decisión importante que se ha tomado para el correcto

desarrollo del Proyecto es la elección del formato de las imágenes. Existen

multitud de formatos válidos, pero se busca un formato sencillo y que no lleve

ningún tipo de algoritmo de compresión, por lo que después de investigar acerca

de los posibles formatos se decide utilizar el formato PNM.

Este formato incluye los formatos de imagen PPM, PGM y PBM, los

cuales se utilizan para almacenar imágenes en color, imágenes en escala de grises

e imágenes en blanco y negro respectivamente. Para cada uno de los tres formatos

hay una versión binaria y otra ASCII. En el primer caso, la imagen se codifica

como una secuencia de bits y, en el segundo caso, se codifica en un archivo de

texto donde se listan los valores numéricos de cada píxel, o unidad de

información gráfica. Los archivos de PNM pueden ser identificados

automáticamente por un “código mágico” (P[1-6]) en la cabecera de fichero o

primera línea.

A lo largo del desarrollo del Proyecto se utilizará siempre la versión

ASCII, ya que suele ser la más intuitiva y más sencilla de editar e interpretar, para

el tipo de programación que estamos utilizando, tanto a la hora de leer, como a la

hora escribir imágenes.

11 El formato PBM (Portable BitMap)El formato PBM (Portable BitMap)

Este formato almacena imágenes monocromáticas. En el formato binario

se usa un bit para cada píxel y en el ASCII cada píxel se representa con un 0 ó

con un 1. Podemos ver un ejemplo a continuación en el que si escribimos lo

siguiente en un archivo de texto plano se podría ver la imagen correspondiente de

dimensión 3x3 en la que se aprecia una escalera:

JOAQUÍN DIEGO REYES GONZÁLEZ - 22 -

Page 23: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

P1# Ejemplo 3x3 de PBM3 3 # Ancho y alto0 0 10 1 11 1 0

Ejemplo de PBM

Este será el formato elegido (P1) para el desarrollo del proyecto cuando

utilicemos imágenes binarizadas o en blanco y negro.

22 El formato PGM El formato PGM (Portable GrayMap)(Portable GrayMap)

Este formato, a diferencia del anterior, soporta imágenes en escala de

grises (y no solamente blanco y negro) y cada píxel se representa con un byte (P5)

o con su valor en ASCII (P2). Un ejemplo de este formato podría ser:

P2# Ejemplo 3x3 de PGM3 3 # Ancho y alto15 # Valor máximo 0 3 9 3 9 12 9 12 15 Ejemplo de PGM

33 El formato PPM (Portable PixMap)El formato PPM (Portable PixMap)

Éste último formato almacena imágenes en color según el código RGB. Se

puede usar un número (cabecera P3) o un byte (cabecera P6), para el valor de

cada componente (rojo, verde, azul) de cada píxel. Los valores de cada píxel se

codifican intercalando las tres componentes. Este formato tiene como principal

ventaja su sencillez ya que cada píxel viene representado por tres números. Por

esto, para definir un píxel de color verde, utilizando este código RGB y como

valor máximo el 255 y 0 como valor mínimo, tendremos que escribir: 0 255 0. De

forma análoga definiremos un píxel rojo como 255 0 0 y uno azul como 0 0 255.

Para el caso de lo colores extremos, el negro sería 0 0 0 (ausencia de cualquier

color) y el blanco sería el valor máximo de las tres componentes: 255 255 255.

Comprobaremos esto en el siguiente ejemplo:

JOAQUÍN DIEGO REYES GONZÁLEZ - 23 -

Page 24: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

P3# Ejemplo 3x3 de PPM3 3 # Ancho y alto255 # Valor máximo 0 0 0 0 0 0 255 0 0 0 0 0 0 255 0 255 255 255 0 0 255 255 255 255 255 255 255 Ejemplo de PPM

Como inconveniente general de estos formatos, merece la pena destacar

que aumentan el tiempo de lectura y escritura cuando se utilizan imágenes de

gran resolución (por encima de 300x300). Esto podría ser mejorando utilizando

algún formato que permita la compresión, pero sin pérdida de información como

podría ser el formato PNG. Sin embargo, esta solución complicaría el proceso de

lectura y escritura, alejándose de uno de los intereses del proyecto, que consiste,

precisamente, en obtener un algoritmo sencillo.

JOAQUÍN DIEGO REYES GONZÁLEZ - 24 -

Page 25: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

5.- 5.- Las huellas dactilares y sus característicasLas huellas dactilares y sus características

Las huellas dactilares son una propiedad física propia de cada persona, de

tal forma que es posible identificar a un individuo por sus huellas dactilares. Para

llegar a una identificación exacta, se requiere el uso de métodos sofisticados, pero

es posible identificar el tipo de huella que tenemos cada uno de nosotros a simple

vista, ya que las huellas dactilares de todas las personas se pueden clasificar en

cuatro tipos: espiral, arco, lazo y compuesta. En las siguientes imágenes podemos

ver un ejemplo de cada tipo:

Huella de tipo espiral

Huella de tipo arco

Huella de tipo lazo

Huella de tipo compuesta

Sin embargo, este tipo de huella, que se ve a simple vista es, complicado

de identificar por parte de una máquina, sobre todo porque no siempre se dispone

de la huella completa, por lo que cuando se busca identificar una huella en un

JOAQUÍN DIEGO REYES GONZÁLEZ - 25 -

Page 26: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

proceso automático se descarta, en un principio, averiguar el tipo de la huella, y

nos centramos en algo a menor escala: las crestas y los valles. La cresta de una

huella dactilar es la parte que queda marcada (normalmente la parte que queda

marcada en negro), mientras que el valle es la parte de la huella situada entre dos

crestas. Existen formas típicas en las crestas de una huella dactilar, tal y como

podemos apreciar en la siguiente figura:

Características de una huella según la forma de sus crestas

Estas formaciones singulares que se crean con las crestas de una huella

dactilar, es lo que podemos llamar características de la huella, y son propiedades

que sí se pueden localizar de forma independiente al resto de la huella, al

contrario de lo que ocurría con el tipo de la huella, para el que necesitamos la

huella completa.

JOAQUÍN DIEGO REYES GONZÁLEZ - 26 -

Page 27: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

6.- 6.- Algoritmo de obtención de característicasAlgoritmo de obtención de características

La realización del algoritmo, así como su explicación, implica la

necesidad de tener una imagen con la que probarlo. Para la explicación del

proceso completo que sigue el algoritmo, vamos a elegir una imagen cualquiera

de una recopilación de huellas dactilares, como la siguiente:

Imagen completa a utilizar en la prueba del algoritmo

Imagen recortada

Además, para una mayor claridad, vamos a seleccionar una pequeña

sección en la que podremos ver los efectos del procesamiento digital de la

imagen. En esta sección elegida, podemos ver claramente una característica

importante de la huella: una bifurcación o separación de una cresta en dos, dentro

de la huella. Si el algoritmo funciona correctamente, debería detectarla.

JOAQUÍN DIEGO REYES GONZÁLEZ - 27 -

Page 28: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

El algoritmo desarrollado lleva a cabo una serie de procesos consecutivos

que van variando la apariencia de la imagen y, para poder analizarlos, el

algoritmo va guardando la imagen después de cada proceso. Por esta razón, para

cada uno de los procesos que realizamos, mostraremos el resultado obtenido con

la imagen original y con el pequeño fragmento de la misma que hemos obtenido.

JOAQUÍN DIEGO REYES GONZÁLEZ - 28 -

Page 29: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

11 Lectura del ficheroLectura del fichero

El primer paso es leer la imagen y el algoritmo escribe la primera imagen,

mostrando lo que ha leído. En el caso en el que la imagen sea con color el

algoritmo la transforma en escala de grises.

Imagen recortada leída por el algoritmo

Para poder leer esta imagen tiene que estar en el formato PPM y ASCII, es

decir, tal y como hemos comentado en el capítulo cuatro, la cabecera de la

imagen debe comenzar por P3, que de esta forma para cada píxel lee tres números

y en el caso en el que estos sean distintos (lo cual significaría que la imagen es a

color) realiza la media de estos números, obteniendo así la imagen en escala de

grises que estábamos buscando, ya que para la obtención de características no es

necesaria la información que aporta el color.

Por lo tanto, tras realizar la lectura de la imagen, el algoritmo genera un

vector de dimensión variable y de tantos campos como píxeles tiene la imagen. El

número de píxeles se obtiene multiplicando el ancho por el alto de la imagen,

JOAQUÍN DIEGO REYES GONZÁLEZ - 29 -

Page 30: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

datos que obtenemos de la cabecera de la imagen, según es habitual en todos los

formatos PNM, teniendo en cuenta que los datos se encuentran en ASCII.

Imagen completa leída por el algoritmo

Como vemos en esta imagen, si cogemos la imagen completa, se observa

que el proceso de lectura se ha realizado correctamente ya que la imagen obtenida

es la misma que la original, debido a que la imagen original no tiene color. Cada

uno de los píxeles de la imagen queda, entonces, representado por un valor

numérico comprendido entre 0 (negro) y 255 (blanco).

JOAQUÍN DIEGO REYES GONZÁLEZ - 30 -

Page 31: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

22 Atenuación y ajuste de tonalidadesAtenuación y ajuste de tonalidades

El siguiente paso es variar la intensidad de los píxeles de forma que se

pueda obtener una información más fiable a la hora de realizar los siguientes

procesos. Después de este ajuste, la imagen obtenida es la siguiente:

Imagen recortada tras ajustar tonalidades

Para obtener esta imagen ha sido necesario averiguar cuál es el valor

máximo y cuál el mínimo, lo que indica que si el valor máximo de todos los

píxeles es 255 y el valor mínimo es 0, no se realiza ningún cambio. Sin embargo,

si el valor máximo es inferior a 255, tal y como ocurre en esta imagen en la que el

píxel más claro posee el valor de 241, se ajusta de forma que el valor máximo sea

255. Esto se consigue restando a todos los valores de la imagen el valor del

mínimo, siempre y cuando este sea mayor que cero, para después, multiplicar el

valor de cada píxel por 255 y dividirlo por la diferencia entre el valor máximo y

el valor mínimo.

Con este proceso lo que buscamos es que en las sucesivas operaciones que

realicemos sobre la imagen se pierda la mínima información posible ya que

JOAQUÍN DIEGO REYES GONZÁLEZ - 31 -

Page 32: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

únicamente utilizamos números enteros porque al realizar operaciones con

decimales, perderíamos valores decimales que podrían llegar a ser importantes.

Imagen completa tras ajustar tonalidades

En esta imagen vemos cómo influye este proceso en la imagen completa,

viendo cómo realmente parece una imagen más clara.

JOAQUÍN DIEGO REYES GONZÁLEZ - 32 -

Page 33: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

33 Ajuste de negros y blancos fijos por direccionesAjuste de negros y blancos fijos por direcciones

El tercer proceso consiste en buscar los píxeles que son seguro negro o

que son seguro blanco, de forma que un posterior proceso de binarización o paso

a blanco y negro, éste sea más efectivo, obteniendo lo que vemos a continuación:

Imagen recortada tras buscar blancos y negros por direcciones

Para este proceso hacemos uso de máscaras direccionales, es decir, una

especie de filtros que nos permiten observar los píxeles que hay alrededor de un

píxel concreto, según una dirección en concreto. Esto lo conseguimos gracias

doce imágenes creadas para la ocasión y que nos encargaremos de cargar dentro

del propio algoritmo. Éstas máscaras son doce porque vamos a utilizar los

siguientes ángulos: 0º, 15º, 30º, 45º, 60º, 75º, 90º, 105º, 120º, 135º, 150º y 165º.

A partir de 165º ya no tiene sentido utilizar una máscara porque sería información

repetida, ya que la máscara de 180º sería exactamente igual a la máscara de 0º.

Tampoco sería útil utilizar un mayor número de máscaras, debido a que

aumentaría mucho el tiempo del proceso y no así los resultados obtenidos.

JOAQUÍN DIEGO REYES GONZÁLEZ - 33 -

Page 34: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Las máscaras que el algoritmo carga provienen de doce archivos de

imagen con el formato PBM, que mostramos a continuación:

Máscara de 0º

Máscara de 15º

Máscara de 30º

Máscara de 45º

Máscara de 60º

Máscara de 75º

Máscara de 90º

Máscara de 105º

Máscara de 120º

Máscara de 135º

Máscara de 150º

Máscara de 165º

De esta forma, el proceso que realizamos ahora es ir comprobando píxel a

píxel si existe alguna dirección en la que se observe que predomina el blanco o el

negro sobre todos los demás. En el caso en el que se detecte una dirección con un

tono (negro o blanco) dominante, ese píxel se convierte en blanco puro (255) o

JOAQUÍN DIEGO REYES GONZÁLEZ - 34 -

Page 35: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

negro (0), de forma que no haya ninguna duda en el siguiente proceso de

binarización y, en el caso en el que no haya una ninguna dirección con un tono

dominate, el píxel correspondiente se deja con el valor original.

Imagen completa tras buscar blancos y negros por direcciones

Como se puede ver en esta imagen, la parte central de las crestas de la

huella queda definida como negro, mientras los valles quedan como blancos,

existiendo píxeles dudosos en los bordes de las crestas.

JOAQUÍN DIEGO REYES GONZÁLEZ - 35 -

Page 36: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

44 Búsqueda de direccionesBúsqueda de direcciones

En el tercer proceso, ya comentado, se va evaluando si existe alguna

dirección en la que se pueda afirmar que existe alguna tonalidad dominante y, si

esto ocurre, se graba esta dirección dentro de un vector de la misma dimensión y

características, a partir del cual se obtiene esta imagen, a modo de matriz de

direcciones:

Imagen obtenida de la matriz direcciones de la imagen recortada

En esta imagen se puede ver la dirección dominante, según el color que

posea cada píxel, que se corresponde con la escala que vemos a la derecha de la

imagen. En el caso en el que no exista una dirección dominante, el color elegido

es el amarillo. Como se puede ver en esta imagen, se ha creado un margen en la

misma, necesario para poder aplicar las máscaras, de forma que no se produzcan

errores en los cálculos. El ancho de éste margen se corresponde con la mitad

menos uno del ancho de las máscaras. En nuestro caso, las máscaras poseen un

ancho fijo de 13 píxeles, por lo que el margen necesario debe tener un ancho de 7

píxeles. Como puede quedar claro, a lo largo del margen de la imagen, las

direcciones no van a quedar definidas, por lo que el margen quedará siempre de

JOAQUÍN DIEGO REYES GONZÁLEZ - 36 -

0º15º30º45º60º75º90º105º120º135º150º165º

Page 37: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

color amarillo. Esto puede provocar una pérdida de información importante en

imágenes pequeñas (como es el caso del recorte), pero no así en imágenes

grandes, como la que vemos a continuación:

Imagen obtenida de la matriz direcciones de la imagen completa

Como podemos ver en esta imagen, el resultado queda mucho más claro

cuando la imagen es más grande y hace pensar que los puntos han sido

clasificados de forma correcta.

JOAQUÍN DIEGO REYES GONZÁLEZ - 37 -

0º15º30º45º60º75º90º105º120º135º150º165º

Page 38: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

55 Binarizado de la imagen o paso a blanco y negroBinarizado de la imagen o paso a blanco y negro

Una vez que se han fijado píxeles negros y blancos, según las direcciones

y la información de los píxeles cercanos, llega la hora de definir todos los píxeles,

a negro o blanco, lo cual es necesario para simplificar los siguientes procesos, ya

que no mejoran los resultados utilizando escala de grises y sí aumenta

considerablemente el tiempo de proceso. El resultado de este proceso lo podemos

ver en la siguiente imagen:

Imagen recortada pasada a blanco y negro (binarizada)

El proceso utilizado para la binarización es un proceso reiterativo y muy

utilizado para imágenes en escala de grises. El proceso consiste en realizar un

histograma con la cantidad de valores repetidos en cada franja y estimar un valor

medio (µ), el cuál significará que es el valor mínimo de blanco, es decir,

cualquier píxel por debajo de ese valor será negro y cualquier píxel de un valor

mayor o igual, será blanco. Una vez calculado este valor, realizaremos la media

de los valores blancos (µ1) y la media de los valores negros (µ2), obteniendo un

nuevo valor de mínimo de blanco, según la siguiente ecuación:

JOAQUÍN DIEGO REYES GONZÁLEZ - 38 -

Page 39: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

µ'=12·µ1µ2

Este proceso lo repetimos hasta que el valor de mínimo blanco no varíe o

hasta que alcancemos la reiteración número 13. El resultado sobre la imagen

completa los vemos a continuación:

Imagen completa pasada a blanco y negro (binarizada)

En ésta imagen podemos ver cómo todos los píxeles ya han sido definidos

como negros o como blancos, no existiendo ningún píxel gris.

JOAQUÍN DIEGO REYES GONZÁLEZ - 39 -

Page 40: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

66 Proceso de apertura y erosiónProceso de apertura y erosión

Los siguientes cuatro procesos están relacionados entre sí, ya que el son

muy similares y basados en el mismo principio: contar y estudiar los píxeles de

alrededor. Estos procesos son conocidos como erosión y dilatación. En la

siguiente imagen, vemos el efecto de la erosión:

Imagen recortada erosionada, buscando la apertura

En este proceso de la erosión, solamente se mantiene un píxel negro si está

rodeado por píxeles negros en su totalidad, es decir, cada píxel está rodeado por

otros ocho píxeles, por lo que si un píxel negro, está rodeado por ocho píxeles

negros, el píxel seguirá siendo negro después del proceso de erosión, pero pasará

a ser blanco si no está rodeado es su totalidad por píxeles negros.

Con este proceso, al que se suele conocer como “opening” y del que la

erosión es el primer paso, lo que estamos buscando es una apertura de la imagen,

de forma que aumente el número de espacios en blanco y sólo queden los

espacios negros que sean más densos o completos. Así es posible filtrar pequeños

píxeles negros aislado que puedan aparecer debido a ruido y se pueden limar los

JOAQUÍN DIEGO REYES GONZÁLEZ - 40 -

Page 41: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

apéndices que puedan existir, quedando una imagen más limpia, como podemos

ver a continuación en la imagen completa:

Imagen completa erosionada, buscando la apertura

En esta imagen observamos algo importante, que no es otra cosa que la

pérdida de información que hemos sufrido, especialmente en la parte del recorte

que estamos usando, por lo que no vamos a poder comprobar esa zona, pero sí

vamos a poder apreciar el resultado final y las consecuencias del proceso

completo.

JOAQUÍN DIEGO REYES GONZÁLEZ - 41 -

Page 42: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

77 Proceso de apertura y dilataciónProceso de apertura y dilatación

Tras el proceso de erosión en busca de la apertura de la imagen, le toca el

turno a la dilatación de la imagen, proceso que contrarresta la erosión anterior,

llevando a cabo una cierta reconstrucción de la imagen, tal y como se puede

observar en la siguiente imagen:

Imagen recortada dilatada en el proceso de apertura

En este proceso de dilatación realizamos justo la operación inversa que en

el proceso anterior, ya que únicamente conservamos como píxel blanco, aquel

que está completamente rodeado de píxeles blancos, consiguiendo así volver más

densas las zonas negras cerrando los huecos que se han podido formar.

La dilatación es un procesos tal útil como necesario, ya que es

fundamental volver a recuperar todos los píxeles que se han perdidos durante el

proceso de erosión porque, si las crestas de las huellas quedan demasiado

delgadas, podrían fallar los procesos posteriores de obtención de características.

Es por esto, por lo que cuando hablamos del proceso de apertura (o de “opening”

JOAQUÍN DIEGO REYES GONZÁLEZ - 42 -

Page 43: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

como se suele conocer) estamos hablando de una erosión y su posterior

dilatación. Este proceso también lo podemos ver en la imagen completa:

Imagen completa dilatada en el proceso de apertura

Tras el proceso de dilatación vemos cómo hemos recuperado el grosor de

las crestas de la huella, pero han aparecido nuevos problemas, como son píxeles

blancos rodeados de píxeles negro que solucionaremos en próximos procesos.

JOAQUÍN DIEGO REYES GONZÁLEZ - 43 -

Page 44: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

88 Proceso de cerrado y dilataciónProceso de cerrado y dilatación

Tras el proceso de apertura nos espera un proceso que ayudará a cerrar

aquellos huecos que puedan ser descriptivos y, por lo tanto, necesarios para poder

obtener correctamente las características que estamos buscando. Esto lo

conseguimos repitiendo el proceso de dilatación, como podemos ver la imagen

siguiente:

Imagen recortada dilatada en el proceso de cerrado

En éste proceso estamos completando el binomio apertura-cerrado, de

forma que podamos unir ciertas crestas que pueden haber sido separadas en el

proceso de apertura anterior.

Como cabe esperar, este proceso de cierre, también conocido como

“closing” funciona de forma análoga al proceso de apertura, ya que en este caso

lo que vamos a realizar es una primera dilatación, para una posterior erosión, de

forma que consigamos el efecto contrario al proceso de apertura

JOAQUÍN DIEGO REYES GONZÁLEZ - 44 -

Page 45: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Este primer proceso de dilatación lo podemos apreciar en la siguiente

imagen, en la que observamos cómo, efectivamente, se van cerrando los espacios

en blanco:

Imagen completa dilatada en el proceso de cerrado

Aparentemente, se han perdido muchas crestas, pero no debemos olvidar

que todavía nos queda el posterior proceso de erosión, que sin duda liberará

crestas, aunque no se descarta el haber perdido ciertas crestas dudosas.

JOAQUÍN DIEGO REYES GONZÁLEZ - 45 -

Page 46: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

99 Proceso de cerrado y erosiónProceso de cerrado y erosión

Como noveno proceso del algoritmo, llega el turno de finalizar el binomio

apertura-cierre (“opening-closing”) y, por lo tanto, llega el turno de la segunda

erosión, en que, como podemos ver en la siguiente imagen, se consiguen otra vez

las crestas estilizadas del principio, pero considerablemente mejor perfiladas:

Imagen recortada erosionada en el proceso de cierre

En el caso de la imagen recortada, vemos cómo, efectivamente, las crestas

quedan de forma perfilada y clara y de un ancho aceptable.

Tras observar los resultados de los cuatro últimos procesos se comprende

la necesidad de estos para conseguir eliminar posibles ruidos que pueda tener la

imagen así como para cerrar los huecos o píxeles blancos que puedan aparecer

dentro de las huellas.

Como inconvenientes de estos procesos hemos podido observar que al

dilatar la imagen o al erosionarla, se pueden producir pérdidas de determinadas

crestas, que luego pueden ser fundamentales a la hora de encontrar ciertas

JOAQUÍN DIEGO REYES GONZÁLEZ - 46 -

Page 47: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

características, tal y como podemos ver a continuación en la imagen completa

dilatada:

Imagen completa erosionada en el proceso de cierre

Efectivamente, vemos que en la imagen completa hemos perdido crestas

que han quedado ocultas, pero no debemos olvidar que buscamos características y

de esta forma estamos filtrando las que pueden ser dudosas y aclarando las más

obvias.

JOAQUÍN DIEGO REYES GONZÁLEZ - 47 -

Page 48: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

1010 Obtención de esqueletosObtención de esqueletos

Una vez que tenemos las crestas de la huella lo suficientemente perfiladas,

llega el momento de obtener los esqueletos de las crestas o, lo que es lo mismo,

reducir al máximo posible su grosor, hasta que sea de aproximadamente un píxel,

tal y como se puede ver en la siguiente imagen:

Esqueletos obtenidos de la imagen recortada

Nuestro fin es llegar a encontrar las características importantes de la

huellas y, en especial, las bifurcaciones, por lo que no nos aporta ninguna

información el grosor de las crestas, sino sus direcciones principales, las cuales

ya hemos buscado al realizar la binarización.

Al conseguir adelgazar al máximo las crestas, podemos ver las

bifurcaciones cuando los esqueletos de la imagen se dividan en tres. En un

principio y vistos los resultados que hemos obtenido, no nos centraremos en

encontrar la terminaciones de las huellas, ya que durante el proceso de erosión se

han podido provocar terminaciones que no existen realmente en la huella

JOAQUÍN DIEGO REYES GONZÁLEZ - 48 -

Page 49: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

original. El resultado de la obtención de esqueletos se puede observar a

continuación sobre la imagen completa:

Esqueletos obtenidos de la imagen completa

Al realizar el proceso de búsqueda de esqueletos sobre la imagen

completa, vemos que los resultados no son los esperados debido, posiblemente, al

proceso de dilatación que ha anulado una parte importante de la huella, por lo que

resulta necesario el siguiente proceso.

JOAQUÍN DIEGO REYES GONZÁLEZ - 49 -

Page 50: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

1111 Perfeccionamiento de los esqueletosPerfeccionamiento de los esqueletos

Aunque en la imagen recortada hemos visto que el proceso de obtención

de esqueletos ha sido suficientemente bueno, en la imagen completa no ha sido

así, por lo que se ha visto que resulta necesario perfeccionar los esqueletos, o por

lo menos perfilarlos. Éste proceso no se puede apreciar en la siguiente imagen,

igual a la anterior, debido a que estos esqueletos se encuentran perfectamente

perfilados:

Esqueletos de la imagen recortada, perfeccionados

Sin embargo en la imagen completa si resulta necesario perfeccionarlos de

la mejor manera posible. Al repetir el proceso de obtención de esqueletos, no se

consigue mejorar la calidad de estos, por lo que la decisión tomada ha sido

limitarnos a obtener los contornos de los esqueletos obtenidos.

Con esta solución, no podemos obtener las bifurcaciones interiores, pero sí

podemos aplicar el posterior proceso que buscará puntos en los que se unan tres

ramas de un esqueleto, pudiendo así encontrar ciertas bifurcaciones que han

JOAQUÍN DIEGO REYES GONZÁLEZ - 50 -

Page 51: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

quedado claras en los nuevos esqueletos tal y como podemos apreciar en la

siguiente imagen, resultado de haber perfeccionado los esqueletos anteriores:

Esqueletos de la imagen completa, perfeccionados

En esta imagen vemos como hemos eliminado las zonas en las que no se

distinguía nada y hemos conservado los esqueletos claros, para no eliminar

ninguna posible bifurcación.

JOAQUÍN DIEGO REYES GONZÁLEZ - 51 -

Page 52: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

1212 Superposición de los esqueletos sobre la imagen originalSuperposición de los esqueletos sobre la imagen original

Este proceso, no busca mejorar el algoritmo de reconocimiento, pero sí

busca aclarar un poco cuál ha sido el resultado de la obtención de los esqueletos.

Para lograr esto y demostrar que los esqueletos obtenidos se corresponden con la

imagen de una manera fiel, el algoritmo superpone los esqueletos sobre la imagen

original, tal y como se puede ver en la siguiente imagen:

Esqueletos superpuestos sobre la imagen recortada original

Merece la pena destacar que los esqueletos se han superpuesto sobre la

imagen leída original, pero variando su color para conseguir una imagen más

clara, asignando a cada píxel del esqueleto, el color que le corresponde según la

matriz de direcciones calculada cuando se binarizó la imagen. El valor que le

corresponde a cada color se puede ver en la escala que hemos situado a la derecha

de la imagen y vemos que realmente los resultados conseguidos son lógicos y

aceptables.

También se puede observar cómo se han perdido los datos que se

encuentran dentro del margen de 7 píxeles que se creó al realizar la búsqueda de

JOAQUÍN DIEGO REYES GONZÁLEZ - 52 -

0º15º30º45º60º75º90º105º120º135º150º165º

Page 53: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

direcciones. Ésta es una perdida necesaria para mantener la resolución original de

la imagen y que en un principio no supone una pérdida importante, tal y como se

puede apreciar cuando la imgen es más grande como es el siguiente caso:

Esqueletos superpuestos sobre la imagen completa original

Aquí podemos ver cómo los esqueletos de la imagen completa, quedan

correctamente superpuestos sobre la imagen completa original.

JOAQUÍN DIEGO REYES GONZÁLEZ - 53 -

Page 54: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

1313 Obtención de característicasObtención de características

Tras la binarización, los procesos de apertura y cierre y la obtención de los

esqueletos, llega el momento de alcanzar el objetivo fundamental de éste

algoritmo: Obtener las características y, en concreto las bifurcaciones, tal y como

se puede ver en la siguiente imagen:

Característica encontrada (bifurcación) en la imagen recortada.

Con ayuda del programa de cálculo matemático, octave, vamos a explicar

en qué consiste el proceso de búsqueda de características. Al igual que en caso de

la binarización, se va evaluando píxel a píxel del esqueleto de la imagen, solo que

en este caso nos centraremos únicamente en los píxeles de color negro.

A estos píxeles negros les aplicamos las máscaras ya comentadas en el

proceso de binarización y analizamos los valores mínimos del histograma

obtenido, según el resultado de multiplicar los píxeles del esqueletos por los

valores de la máscara, obteniéndose valores bajos si los píxeles de la máscara

coinciden con el esqueleto y obteniéndose valores altos si esto no ocurre.

JOAQUÍN DIEGO REYES GONZÁLEZ - 54 -

Page 55: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Aquí podemos ver el histograma del píxel con la característica:

Histograma de direcciones en un píxel con una bifurcación

Y en este otro histograma, vemos que no existe ninguna característica:

Histograma de direcciones en un píxel sin ninguna característica

JOAQUÍN DIEGO REYES GONZÁLEZ - 55 -

Page 56: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

El método para encontrar características consiste en analizar los

histogramas de forma que entre el valor máximo del histograma y el valor

mínimo exista una diferencia mayor de 130 unidades, un valor lógico, teniendo

en cuenta que el valor máximo puede ser hasta 255 y el valor mínimo más

pequeño puede ser 0. Una vez que nos hemos asegurado la diferencia mínima, se

debe cumplir que los mínimos estén separados y no sean consecutivos, ni

tampoco estén demasiado dispersos.

El resultado de éste último proceso sobre la imagen completa, sería el

siguiente:

Características encontradas en la imagen completa.

JOAQUÍN DIEGO REYES GONZÁLEZ - 56 -

Page 57: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

En vista de los resultados obtenidos sobre la imagen completa, no queda

ninguna duda que este algoritmo es el primer paso de un largo camino hacia el

reconocimiento de huellas dactilares, pero un paso importante en el que se ha

fijado un método efectivo de forma clara y cuya depuración escapa ya de este

proyecto, pero queda abierta a nuevas pruebas y futuros desarrollos.

JOAQUÍN DIEGO REYES GONZÁLEZ - 57 -

Page 58: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

7.- 7.- Experimentos y ResultadosExperimentos y Resultados

A lo largo del capítulo anterior hemos visto el funcionamiento del

algoritmo, así como los procesos que se llevan a cabo sobre la imagen, pero cabe

destacar que no es necesario realizar todos estos procesos, ya que podemos

mejorar el resultado si no se realizan los procesos de apertura o cierre, o si

evitamos el filtro de tonalidades por direcciones. Volvamos a utilizar la imagen

anterior:

JOAQUÍN DIEGO REYES GONZÁLEZ - 58 -

Page 59: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Huella dactilar binarizada

Si comenzamos a procesar ésta imagen, sin realizar los procesos de

apertura y cierre, podemos ver que no filtraremos los puntos de ruidos que

aparecen alrededor, ni rellenaremos los poros que hay dentro de las huellas, pero,

como podemos ver a continuación, el resultado de los esqueletos obtenidos

mejora considerablemente:

Esqueletos obtenidos de la huellas dactilar

En este caso vemos cómo los esqueletos han salido realmente más fieles

que los que salieron en el capítulo anterior, pero ha sido a cosa de la existencia de

JOAQUÍN DIEGO REYES GONZÁLEZ - 59 -

Page 60: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

ruido. Este ruido queda traducido en los píxeles rojos que se ven entre los

esqueletos, los cuales implican que son píxeles cuya dirección es elevada (a partir

de 135º). siempre y cuando esta tonalidad roja sea aislada, ya que los que no se

encuentran aislados serán píxeles cuya dirección es realmente elevada. A esta

imagen le aplicaremos el proceso en el que descubrimos las bifurcaciones:

Características encontradas en la huella dactilar

Aquí vemos cómo seis bifurcaciones han sido localizadas de forma clara,

aunque también se han detectado puntos como bifurcaciones que no lo son, pero

JOAQUÍN DIEGO REYES GONZÁLEZ - 60 -

Page 61: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

esto puede ser mejorado aumentando la resolución de la imagen o introduciendo

sólo un fragmento de la huella.

A continuación, vamos a utilizar otra imagen en la que veremos que a

pesar de ser de características completamente diferentes, se obtienen resultados

incluso mejores a los ya comentados. La imagen de partida es la siguiente:

Imagen original de la huella dactilar

Como podemos ver en esta nueva imagen, las características son

diferentes, ya que existe una menor diferencia de contraste en la huella y, además,

se puede observar como la parte central o núcleo de la misma, se encuentra peor

diferenciada que la parte periférica. Esto va a provocar que al tratar la imagen

como un todo, ésta parte periférica se desvanezca dentro del fondo, siendo

filtrada a costa de ganar mayor claridad en la parte central. Éste hecho puede

JOAQUÍN DIEGO REYES GONZÁLEZ - 61 -

Page 62: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

anular bifurcaciones importantes del perímetro dándonos lugar a las bifurcaciones

de la parte central, la cual nunca obtiene los mejores resultados, por que la

densidad de las crestas es mayor, es decir, en la parte periférica las crestas están

más separadas, viéndose con más claridad los valles y, por lo tanto, obteniéndose

las bifurcaciones de una forma más fiel y verdadera, mientras que en la parte

interior se detectan algunas bifurcaciones que no son reales y dan, por lo tanto un

resultado incorrecto.

En la siguiente imagen vemos cómo el proceso de atenuación ha

destacado, como era de esperar la parte central de la huella, es decir, su núcleo:

Imagen original atenuada, destacando el núcleo de la huella

Merece la pena destacar que en este caso hemos anulado el proceso de

asignación de tonalidades por direcciones, ya que al existir tanta diferencia entre

JOAQUÍN DIEGO REYES GONZÁLEZ - 62 -

Page 63: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

entre la parte del perímetro de la huella y su parte central, emborronaría este

núcleo de la huella, dejando sólo legible la parte externa de la huella.

Sin embargo, sí puede ser útil obtener la matriz de direcciones de la huella

ya que puede dar lugar a ciertas comprobaciones posteriores, así como ser

necesaria para el proceso de perfeccionamiento de los esqueletos. Esta matriz la

podemos ver reflejada por colores en la siguiente imagen:

Matriz de direcciones obtenida de la huella dactilar

En esta matriz podemos observar cómo se han detectado direcciones de

manera incorrecta en los valles, de forma que si realizásemos la asignación de

tonalidades por direcciones, en el núcleo de la huella los valles sería convertidos

a crestas y las crestas mantendrían su condición de cresta. El resultado sería que

la parte central se haría completamente oscura y borde completamente claro.

JOAQUÍN DIEGO REYES GONZÁLEZ - 63 -

0º15º30º45º60º75º90º105º120º135º150º165º

Page 64: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Es por esto por lo que dejamos el paso a una imagen de blanco y negro al

proceso de binarización, en el que los resultados obtenidos son más aceptables

para estos casos. De esta forma podemos conseguir la siguiente imagen en la que

vemos como las crestas y los vales han sido correctamente diferenciadas:

Huella binarizada de forma independiente a las direcciones

Viendo esta imagen binarizada, nos hace esperar una correcta obtención

de los esqueletos aceptable aunque la presencia de abundantes puntos negros,

deben ser interpretados como ruido y, por lo tanto, deben se filtrados. Para

realizar un correcto proceso de filtrado lo que vamos a realizar es el primer

proceso de la apertura de la imagen, esto es, vamos a llevar a cabo una erosión de

la imagen, pero sin la posterior dilatación, que completaría el proceso de apertura.

JOAQUÍN DIEGO REYES GONZÁLEZ - 64 -

Page 65: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Al prescindir del proceso de dilatación, la siguiente imagen será la

empleada para obtener los esqueletos, y podemos ver que el resultado puede ser

considerado como correcto:

Esqueletos obtenidos superpuestos en la imagen original

Para una mayor claridad, mostramos directamente la imagen en la que

vemos los esqueletos superpuestos sobre la imagen original, viendo cómo,

efectivamente, la parte de la periferia de la huella ha pasado al anonimato,

perdiéndose, tal vez, información importante.

Sin embargo, es importante apreciar cómo la parte central de la huella ha

quedado clara y sin las excesivas zonas rellenas completamente, que ocultan las

bifurcaciones que se pueden encontrar en el núcleo de la huella.

JOAQUÍN DIEGO REYES GONZÁLEZ - 65 -

Page 66: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Por lo tanto, en el último proceso se obtienen unos puntos críticos donde

se señala la existencia de bifurcaciones, tal y como se puede apreciar en la

siguiente imagen:

Características encontradas en la huella dactilar

En esta última imagen, tal vez deberíamos evaluar la posibilidad de que la

característica encontrada sea real si la concentración de los utilizados puntos

verdes es mayor y su distancia relativa muy pequeña.

JOAQUÍN DIEGO REYES GONZÁLEZ - 66 -

Page 67: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

8.- 8.- ConclusionesConclusiones

Como conclusión general del proyecto podemos afirmar que se ha cubierto

el objetivo fundamental que consiste en obtener características de una huella

dactilar. Decimos que hemos obtenido características de una huella dactilar

porque, aunque el algoritmo busca bifurcaciones, el proceso seguido puede ser

empleado para detectar otras características concretas como cruces,

terminaciones, islas o cualquier otra característica que pueda ser interesante.

Este proyecto ha servido como recopilación actual de las últimas técnicas

desarrolladas en Instituto de Investigación Tecnológica (IIT) dentro del campo de

reconocimiento de huellas dactilares. Éste es un campo en el que el IIT lleva

investigado desde hace varios años, pero que durante los dos últimos años no ha

recibido ninguna nueva aportación. Además, todos los desarrollos realizados

hasta ahora, siempre se habían usado grandes infraestructuras, máquinas potentes

y software propietario. Éste proyecto es, por lo tanto, un intento de realizar una

fusión y mejora de los proyectos actuales, así como ampliar el campo de

investigación, abriendo nuevos horizontes, como el software libre y la realización

de reconocimiento de huellas dactilares en pequeños dispositivos. Sin embargo,

está claro que éste proyecto no ha podido abarcar todos los proyectos realizados

hasta ahora en el IIT, pero estos sí han sido un pilar importante en el que apoyar

el algoritmo desarrollado, dando claras orientaciones sobre los procesos a

realizar, así como esclarecer los posibles problemas que puedan surgir, cuando

alguien comienza a estudiar el apasionante campo del reconocimiento de

individuos mediante su huella dactilar.

Como valor añadido, en este proyecto se realiza una introducción al

procesamiento digital de una imagen. Con las tecnologías actuales, cada vez más

potentes, los dispositivos de bolsillo ya son perfectamente capaces de realizar

JOAQUÍN DIEGO REYES GONZÁLEZ - 67 -

Page 68: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

complejos procesos, que hace un par de años no se podían ni imaginar o,

simplemente, parecían utópicos.

Por otra parte, se ha comprobado que el algoritmo puede ser

implementado de forma realmente sencilla en una placa actual, similar a la que

utilizan los ordenadores de bolsillo que muchas veces quedan relegados a ser

utilizados como simples dispositivos en los que apuntar datos y leer algún que

otro archivo, sin llegar a exprimir ni siquiera una cuarta parte de sus

posibilidades.

JOAQUÍN DIEGO REYES GONZÁLEZ - 68 -

Page 69: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

9.- 9.- Futuros desarrollosFuturos desarrollos

La necesidad de desarrollar un nuevo algoritmo, menos dependiente del

uso de grandes dispositivos, así como de cierto software propietario ha diezmado

los objetivos originales del proyecto dejando, por tanto, muchas posibilidades

abiertas.

Hemos comprobado que los resultados obtenidos pueden ser claramente

mejorados, ya que no son realmente fiables al cien por cien, aunque sí pueden ser

útiles si se utilizan con precaución. Por lo tanto, éste proyecto es, como ya se ha

comentado, el primer escalón de una larga escalera en constante construcción.

Esto es debido a que hemos comenzado un proceso de reconocimiento de huellas

dactilares, pero nos hemos quedado en la obtención de características. Si

observamos la bibliografía, vemos cómo todavía quedan procesos por

implementar dentro del algoritmo, o consecutivos a éste, en los que, una vez

obtenidas las características de la huella, es necesario rotar, trasladar y comparar

dichas características para poder indicar si la huella analizada corresponde o no a

un determinado individuo.

Por lo tanto, además de ampliar el algoritmo con nuevos procesos que

permitan completar el reconocimiento de una huella dactilar, hay varios procesos

ya programados que podrían ser mejorados, para así obtener resultados más

fiables. El primer proceso que debería ser mejorado, sería el proceso de filtrado

de tonalidades por direcciones, en el que se decide si un píxel es negro o blanco

en función de las direcciones dominantes de los píxeles de su alrededor.

Hablando del proceso de determinación de direcciones, éste también podría ser

mejorado drásticamente, de forma que pudiera cargar mascaras de dimensión

variable o que incluso genere y cargue la máscaras más apropiadas para el tipo de

huella que se esté analizando. También hemos observado cómo el proceso de

obtención de esqueletos no es del todo satisfactorio, por lo que podría ser

JOAQUÍN DIEGO REYES GONZÁLEZ - 69 -

Page 70: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

mejorado, junto con el proceso de detección de características. Además, el

resultado de estos dos procesos depende de la conveniencia de realizar los

procesos de apertura y cierre. En la versión actual del algoritmo, estos procesos

se realizan a juicio del usuario, pero podría darse el caso de que fuera el propio

algoritmo el que decidiera si se deben realizar o no estos procesos, ya que según

hemos visto en nuestros experimentos estos procesos pueden mejorar o empeorar

los resultados finales.

Dentro del proceso de obtención de características, hemos utilizado un

formato para las imágenes que no lleva integrado ningún algoritmo de

compresión. La razón por la que se ha tomado ésta decisión es que uno de los

objetivos del proyecto busca, sobre todo, la sencillez en el algoritmo. Sin

embargo, es posible que el uso de algún algoritmo de compresión pueda aminorar

el tiempo que el algoritmo invierte en la lectura del fichero, a costa de tiempo de

proceso, algo que puede reducir el tiempo total del proceso de obtención de

características de huellas dactilares.

Como parte final del proceso de reconocimiento de huellas dactilares,

sería interesante disponer de una base de datos con huellas dactilares del mayor

número posible de individuos. Sin embargo, esto ya escapa del uso de

dispositivos pequeños, ya que sería necesario una alta capacidad, la cual es el

talón de alquiles de los dispositivos de bolsillo debido, fundamentalmente, al alto

precio que las unidades de almacenamiento portátiles poseen. Sería, por tanto

necesario, realizar algún tipo de comunicación del pequeño dispositivo con un

gran servidor de datos donde se almacenarán las huellas dactilares, clasificadas

siempre que sea posible. De esta forma se podría utilizar el pequeño dispositivo

para recopilar la huella dactilar y analizarla, obteniendo las características y

enviándolas al servidor de huellas dactilares, obteniendo a cambio la posible

identidad del dueño de la huella analizada.

Extrapolando los procesos utilizados en este proyecto, podemos romper

los límites impuestos y utilizarlos para otras aplicaciones centradas en el

JOAQUÍN DIEGO REYES GONZÁLEZ - 70 -

Page 71: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

procesamiento digital de una imagen, como pueden ser el reconocimiento de

caracteres o la detección de movimiento, investigando diferencias entre imágenes

o detectando objetos definidos previamente.

JOAQUÍN DIEGO REYES GONZÁLEZ - 71 -

Page 72: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

10.- 10.- BibliografíaBibliografía

[1] Rafael C. González, Richard E. Woods. Digital Image Procesing.

PEARSON, Prentice Hall. 2001.

[2] Rafael C. González, Richard E. Woods, Steven L. Eddins. Digital Image

Procesing Using MATLAB. PEARSON, Prentice Hall. 2004.

[3] Mónica Arias Parra. Desarrollo de Algoritmos de Filtrado de Imágenes de

Huellas Dactilares. Proyecto Fin de Carrera, IIT. 2001.

[4] Ismael Corrales Toribio. Extracción de Características Descriptivas de

Huellas Dactilares. Proyecto Fin de Carrera, IIT. 2001.

[5] Daniel Gutiérrez Rodríguez. Algoritmo de Comparación de

Características para el Reconocimiento de Huellas Dactilares. Proyecto

Fin de Carrera, IIT. 2001.

[6] Bárbara Carlón Sainz. Extracción de Características Singulares de

Huellas Dactilares. Proyecto Fin de Carrera, IIT. 2002.

[7] Víctor Manuel Sombría Rodríguez. Identificación y Clasificación de

Huellas Dactilares. Proyecto Fin de Carrera, IIT. 2003.

[8] Página web de LART (http://www.lart.tudelft.nl/): Herramientas de

compilación.

[9] Página web de MicroPowerSoft (http://www.micropowersoft.com/):

Empresa fabricante de la placa MipScale.

JOAQUÍN DIEGO REYES GONZÁLEZ - 72 -

Page 73: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

[10] Página web de FVC (Fingerprint Verification Competition ó Competición

de verificación de huellas dactilares, http://bias.csr.unibo.it/fvc2004/):

Web del laboratorio de sistemas biométricos de la universidad de Bolonia,

que organiza una competición de reconocimiento de huellas dactilares.

[11] Página web de la Interpol sobre el reconocimiento de huellas dactilares:

http://www.interpol.int/public/Forensic/fingerprints/WorkingParties/IEEG

FI/ieegfiEs.asp

[12] Página web de VeriFinger (http://www.ex-cle.com/ESSdkVf.htm):

Aplicación comercial para realizar el reconocimiento de huellas dactilares.

Merece la pena destacar el listado de precios de las licencias de cada

programa: http://www.ex-cle.com/ESVFPrecios.htm

[13] Página web de GNU/Linux (http://www.linux.org/): Abundante

información y manuales sobre GNU/Linux.

[14] Página web oficial de GNU/Linux Debian (http://www.debian.org/):

Distribución GNU/Linux Debian e instrucciones de instalación.

JOAQUÍN DIEGO REYES GONZÁLEZ - 73 -

Page 74: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

EESTUDIOSTUDIO ECONÓMICOECONÓMICO

JOAQUÍN DIEGO REYES GONZÁLEZ - 74 -

Page 75: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

11.- 11.- Análisis del mercadoAnálisis del mercado

Hemos buscado algún tipo de software que realice reconocimiento de

huellas dactilares, pero los resultados obtenidos no han sido muy alentadores. En

mundo del software libre y código abierto, no hemos encontrado nada destacable,

mientras que en el ambiente comercial se encuentran programas complejos de

utilizar y todavía en pleno desarrollo. El precio de los programas comerciales de

desarrollo oscilan alrededor de los 500€ por una licencia y para uso no comercial.

Si queremos tener ánimo de lucro con el uso del software, el precio de una

licencia profesional asciende a unos 1.000 ó 1.500 €. En estos casos lo que

recibimos es un conjunto de archivos ejecutables que llevan a cabo el proceso de

reconocimiento de huellas dactilares, sin que el usuario pueda llegar a

comprender cómo funciona éste software ni cuáles son los procesos que sigue la

acción del reconocimiento.

Sin embargo, si queremos disponer del código fuente de algún programa

comercial, hay ciertas empresas que lo ofrecen a cambio de elevadas cantidades

de dinero (por encima de los 3.000€) y siempre y cuando no haya el más mínimo

ánimo de lucro con los posibles beneficios o conocimientos que se puedan

adquirir a partir del código de fuente suministrado, por lo que sólo se admite su

uso para fines educativos y docentes, tal y como figura en el contrato que

usualmente es necesario aceptar al recibir el código fuente.

En otro ambiente completamente distinto, se encuentra los dispositivos

con sensores de huellas dactilares integrados. Estos dispositivos usan su propio

lector integrado y almacenan una serie de estampaciones de un mismo usuario.

Lo normal es que le pidan al usuario una media de diez estampas de un mismo

dedo, para que éstas sean almacenadas en el propio dispositivo, y hasta un

máximo de diez dedos, pudiendo ser así ser compartido por hasta diez usuarios,

siempre y cuando cada usuario utilice únicamente un dedo. Por lo tanto, estos

JOAQUÍN DIEGO REYES GONZÁLEZ - 75 -

Page 76: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

pequeños dispositivos se limitan a aceptar o denegar el acceso a un usuario al

dispositivo si este posee o no posee, respectivamente, su huella grabada dentro

del dispositivo. La consecuencia de estos procesos utilizados por los dispositivos

pequeños, cuyo precio oscila entre los 100 y los 300€, es que son demasiados

permisivos, dándose el caso de que acceda un usuario no autorizado, o que son

demasiado estrictos, denegando el acceso a un usuario válido porque no ha

colocado la huella con la misma orientación, o porque su huella ha sufrido alguna

herida leve.

JOAQUÍN DIEGO REYES GONZÁLEZ - 76 -

Page 77: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

12.- 12.- Posibilidades del algoritmo desarrolladoPosibilidades del algoritmo desarrollado

Las posibilidades que puede tener un algoritmo de reconocimiento de

huellas dactilares son muy elevadas, sobre todo si disponemos del código fuente.

Dado que las tecnologías aumentan de manera exponencial, ya estamos en un

momento en el que se puede implantar el reconocimiento de huellas dactilares en

casi cualquier dispositivo, como por ejemplo una simple lavadora (recientemente

ha aparecido un modelo que se asegura que varios miembros de la familia la

pongan en funcionamiento de forma alternada, para que no sea siempre la misma

persona la que pone a lavar la colada).

Sin embargo, no solo se puede utilizar la huella dactilar para acceder o no

acceder a un dispositivo, sino que una posible utilidad puede ser asegurar la

identidad de un usuario a la hora de realizar una compra a través de Internet,

acceder al mercado de la banca electrónica o para hacer realidad de una vez por

todas el popular y siempre lejano DNI electrónico. Incluso puede llegar a sustituir

a la ineficaz firma gráfica, la cual carece de validez al utilizar tarjetas de crédito o

de débito, ya que nunca suele ser comprobada de manera fiable.

Por lo tanto, estamos en un momento en el que los pequeños dispositivos

con sensores para huellas dactilares se están abriendo mercado de manera real y

esto está provocando que la sociedad lo empiece a ver como algo útil y natural,

algo que siempre ha estado a nuestro servicio y que hasta ahora la técnica no nos

ha permitido disfrutar.

En resumen, este proyecto puede tener múltiples usos con ánimo de lucro

siempre y cuando sea apoyado y desarrollado, ahora que la tecnología actual

permite su uso de forma eficaz.

JOAQUÍN DIEGO REYES GONZÁLEZ - 77 -

Page 78: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

MMANUALANUAL DEDE USUARIOUSUARIO

JOAQUÍN DIEGO REYES GONZÁLEZ - 78 -

Page 79: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

13.- 13.- Ejecución del algoritmoEjecución del algoritmo

Para ejecutar el algoritmo es necesario compilarlo primero, utilizando el

compilador apropiado para la arquitectura que se va a utilizar. Para el caso de un

equipo con GNU/Linux Debian instalado, el comando es sencillo (suponiendo

que el código del algoritmo se encuentra en el archivo img.c):

gcc -o img img.c

Una vez que tenemos el ejecutable, basta con indicarle qué archivo es el

que queremos que analice, mediante el siguiente comando:

./img < nombredelarchivo.ppm

Como consecuencia veremos cómo van apareciendo mensajes

informándonos de los procesos que el algoritmo va siguiendo, los valores

máximo y mínimo, el valor de blanco y el número de iteraciones que realiza hasta

depuerar los esqueletos:

ALGORITMO DE RECONOCIMIENTO DE HUELLAS DACTILARES (v1.05)

Leyendo fichero... ...fichero leido (300x300, 90000 píxeles)

Calculando Maximo y Minimo... ... Maximo: 255 y Minimo: 71

Atenuando la imagen... ...imagen atenuada... ...fichero grabado

Calculando Maximo y Minimo... ... Maximo: 255 y Minimo: 0

Buscando direcciones... ... direcciones calculadas ......ficherograbado

Calculando Maximo y Minimo... ... Maximo: 255 y Minimo: 0

Calculando el valor de minimo blanco... Propuesta inicial de blanco: 139 Propuesta n1 de NUEVO blanco: 119 Propuesta n2 de NUEVO blanco: 113 Propuesta n3 de NUEVO blanco: 111

JOAQUÍN DIEGO REYES GONZÁLEZ - 79 -

Page 80: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Propuesta n4 de NUEVO blanco: 110 Propuesta n5 de NUEVO blanco: 110... Valor blanco: 110

Generando imagen binarizada... ...imagen binarizada... ...ficherograbado

INICIO DEL OPENING Erosionando imagen... ...imagen erosionada... ...fichero grabado Dilatando imagen... ...imagen dilatada... ...fichero grabado FIN DEL OPENING

INICIO DEL CLOSING Dilatando imagen... ...imagen dilatada... ...fichero grabado Erosionando imagen... ...imagen erosionada... ...fichero grabado FIN DEL CLOSING

Buscando esqueletos... 1-> 2429: 0 2-> 1803: 2429 3-> 1305: 1803 4-> 1027: 1305 5-> 843: 1027 6-> 744: 843 7-> 664: 744 8-> 610: 664 9-> 569: 610 10-> 539: 569 11-> 520: 539 12-> 501: 520 13-> 489: 501 14-> 471: 489 15-> 464: 471 16-> 453: 464 17-> 444: 453 18-> 442: 444 19-> 441: 442 20-> 436: 441 21-> 435: 436 22-> 434: 435 23-> 430: 434 24-> 426: 430 25-> 424: 426 26-> 422: 424 27-> 419: 422 28-> 418: 419 29-> 417: 418 30-> 416: 417 31-> 416: 416 32-> 414: 416 33-> 414: 414 34-> 415: 414 35-> 416: 415 36-> 414: 416 37-> 412: 414 38-> 412: 412 39-> 412: 412 40-> 411: 412 41-> 411: 411 42-> 411: 411 43-> 410: 411 44-> 410: 410 45-> 410: 410 46-> 410: 410 ...esqueletos encontrados... ...fichero grabado

Perfilando esqueletos... ...esqueletos perfilados... ...ficherograbado

Buscando caracteristicas... ...caracteristicas encontradas... ...fichero grabado

Fin del programa... ... y memoria liberada

JOAQUÍN DIEGO REYES GONZÁLEZ - 80 -

Page 81: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

14.- 14.- Configuración de los parámetros del procesoConfiguración de los parámetros del proceso

En la cabecera del algoritmo se definen una serie de parámetros que

permiten modificar el algoritmo anulando procesos, que hemos podido ver que

mejoran, en cierta medida, los resultados obtenidos:

#define FILTRADO_DIRECCION 0 /* Poner a 1 si se quiere filtrar porlas direcciones */

Con esta primera opción anulamos la definición de la tonalidad de un

píxel en función de los píxeles que posea a su alrededor y dejamos el proceso de

binarización únicamente al cálculo del valor de blanco.

#define OPEN_ERO 0 /* Poner a 1 si se erosionar en el procesode opening */

Con esta segunda opción anulamos la erosión del proceso de apertura.

#define OPEN_DIL 0 /* Poner a 1 si se dilatar en el proceso deopening */

Con esta tercera opción la dilatación del proceso de apertura.

#define CLOSE_DIL 0 /* Poner a 1 si se dilatar en el proceso declosing */

Con esta cuarta opción anulamos la dilatación en el proceso de cierre.

#define CLOSE_ERO 0 /* Poner a 1 si se erosionar en el procesode closing */

Con esta quinta y última opción anulamos el proceso de erosión en el

proceso de cierre.

Sabemos que esta no es la mejor manera de modificar los procesos, pero

afectan los suficiente al resultado, como para que sólo alguien que sepa realmente

lo que está haciendo pueda modificarlos. Se podrían haber configurado de forma

JOAQUÍN DIEGO REYES GONZÁLEZ - 81 -

Page 82: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

que estos parámetros los leyera de una archivo, pero se ha descartado esta opción

debido a que puede llegar a provocar confusión y problemas en la ejecución del

algoritmo, siendo más fiable el método elegido, tratándose de un algoritmo

todavía en desarrollo.

JOAQUÍN DIEGO REYES GONZÁLEZ - 82 -

Page 83: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

AAPÉNDICEPÉNDICE A: U A: USOSO DEDE LALA PLACAPLACA M MIPIPSSCALECALE

JOAQUÍN DIEGO REYES GONZÁLEZ - 83 -

Page 84: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Para arrancar el sistema operativo GNU/Linux que lleva embebido la

placa MipScale es necesario teclear el comando boot en el sencillo interfaz de

comandos que aparece al resetear la placa con el botón que ésta posee, algo que

no siempre es necesario, pero si recomendable si no vemos nada en la pantalla del

minicom. Al arrancar la placa, podemos ver los siguientes mensajes:

UFF

F

0STP

1STP

2STP 3STP 4STP 5STP 6STP MTST 00000001 00000002 00000004 00000008 00000010 00000020 00000040 00000080 00000100 00000200 00000400 00000800 00001000 00002000 00004000 00008000 00010000

JOAQUÍN DIEGO REYES GONZÁLEZ - 84 -

Page 85: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

00020000 00040000 00080000 00100000 00200000 00400000 00800000 01000000 02000000 04000000 08000000 10000000 20000000 40000000 80000000 A0000000 DEADBEEF 48000000 000009A9 48000004 0005B018 48000008 7FF07FF0 4800000C 7FF07FF0 48000010 7FF07FF0 ENDM DUCK STKP A19F3FF0 &_start=00000000 FLASH_BASE=00000000 boot_flags_ptr=A19F3FFC *boot_flags_ptr= Make DRAM section cacheable: A0400000Make DRAM section cacheable: A0500000Make DRAM section cacheable: A0600000Make DRAM section cacheable: A0700000Make DRAM section cacheable: A0800000Make DRAM section cacheable: A0900000Make DRAM section cacheable: A0A000Make DRAM section cacheable: A0B00000Make DRAM section cacheable: A0C00000Make DRAM section cacheable: A0D00000Make DRAM section cacheable: A0E00000Make DRAM section cacheable: A0F00000

JOAQUÍN DIEGO REYES GONZÁLEZ - 85 -

Page 86: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Make DRAM section cacheable: A1000000Make DRAM section cacheable: A1100000Make DRAM section cacheable: A1200000Make DRAM section cacheable: A1300000Make DRAM section cacheable: A1400000Make DRAM section cacheable: A1500000Make DRAM section cacheable: A1600000Make DRAM section cacheable: A1700000Make DRAM section cacheab Make DRAM section cacheable: A1900000Make DRAM section cacheable: A1A00000Make DRAM section cacheable: A1B00000Make DRAM section cacheable: A1C00000Make DRAM section cacheable: A1D00000Make DRAM section cacheable: A1E00000Make DRAM section cacheable: A1F00000Map Flash virtual section to DRAM at: A1E0000000000000 A1E00C0A 00000040 04000C02 00000080 08000C02 00000100 10000C02 00000140 14000C02 00000000 A1E00C0A 00000500 00000C02 00000A00 A0000C0E 00000A40 A4000C02 00000E00 E0000C02 Flash style = 2x16 queryFlash(0x13) returns 0x00000001verify flash size... btflash_init: mfrid=00890089 devid=00180018 walking flash descriptors (2x16) btflash_init: found flash 28F128J3A flashDescriptor=00020DE4 flashSectors=00020BC4 nsectors=00000080 flash_size=02000000 flash_address_mask=01FFFFFF Machine type--> iPAQ 3900 mach_type ->000000CB allocated partition_table defining partition: bootldr defining partition: root defining partition: asset Probing bank0 memory size... bank0 memory size=02000000

JOAQUÍN DIEGO REYES GONZÁLEZ - 86 -

Page 87: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

SDRAM size: 0x020 in megs: 32M >> Compaq OHH BootLoader, Rev 2-19-40 [BIG_KERNEL] [MD5] [MONO]>> 02-11-06_12:09 >> Last link date: Wed Nov 6 12:09:17 CET 2002>> Contact: [email protected]

Cpu company: INTEL Cpu Architecture: XScale Cpu Part: PXA250 (Cotulla) >> ARM Processor Rev=00050000 >> (c) 2000-2001 Compaq Computer Corporation, provided with NOWARRANTY under the terms of the GNU General Public License.>> See http://www.handhelds.org/bootldr/ for full license andsourcesPress Return to start the OS now, any other k DEBUG BOOT: not evaluating params DEBUG BOOT: use `params eval' to evaluate parameters.boot> boot booting jffs2... booting boot/zImage from partition >root<Scanning all of flash for your JFFS2 convenience. Est Time: 6-12seconds!build_list: max = 01F7FFBC . dir entries = 00000310 frag entries = 0000096F +4 increments = 00000000 +file_offset increments = 00000CBFloaded file of size = 0x0007F000 at location 0xA0008000kernel partition base A0008000 kernel_magic=E1A00000 kernel_region_words[9]=016F2818 Linux ELF flash_imgstart=50040000 size=01F80000 dest=A0000000offset=00008000MMU Control=00000079 MMU PIDVAM=00000000 Skipping kernel copy by request. A0008000: E1A00000 A0008004: E1A00000 A0008008: E1A00000 A000800C: E1A00000 A0008010: E1A00000 A0008014: E1A00000 A0008018: E1A00000 A000801C: E1A00000 A0008020: EA000002

JOAQUÍN DIEGO REYES GONZÁLEZ - 87 -

Page 88: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

A0008024: 016F2818 root_filesystem_name=ramdisk Grabbed linuxargs, argc = 00000001Using mach_type 000000CB setting boot parameters to noinitrd root=/dev/mtdblock1 init=/linuxrc console=ttySA0Making core tag at A0000100 Making cmdline tag at A0000114 Making mem32 tag at A00001D4 command line is: mtdparts=ipaq:0x00040000@0x00000000(bootldr)ro,0x01F80000@0x00040000(root),0x00040000@0x01FC0000(asset) noinitrdroot=/dev/mtdblock1 init=/linuxrc console=ttySA0 rootfstype=jffs2linuxEntryPoint=A0008000 Booting Linux image CP15 r0=69052903 CP15 r1=00000079 CP15 r2=A19F4000 CP15 r3=FFFFFFFF CP15 r5=0000040C CP15 r6=F533FFFF CP15 r7=FFFFFFFF CP15 r8=FFFFFFFF CP15 r9=FFFFFFFF CP15 r10=FFFFFFFF CP15 r13=00000000 CP15 r14=7DF7FF9F CP15 r15=FFFFFFFF Uncompressing Linux...................................... done,booting the kernel. Linux version 2.4.19-rmk2-pxa2 (tomas@viento) (gcc version 2.95.320010315 (release)) #5 Mon Nov 11 16:43:20 CET 2002CPU: Intel XScale-PXA250 revision 3Machine: Intel DBPXA250 Development PlatformIgnoring unrecognised tag 0x00000000Memory clock: 99.53MHz (*27) Run Mode clock: 199.07MHz (*2) Turbo Mode clock: 398.13MHz (*2.0, inactive)On node 0 totalpages: 8192 zone(0): 8192 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: mem=32M rw root=/dev/mtdblock1console=ttyS0,115200n8Calibrating delay loop... 99.32 BogoMIPSMemory: 32MB = 32MB total

JOAQUÍN DIEGO REYES GONZÁLEZ - 88 -

Page 89: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

Memory: 31128KB available (966K code, 245K data, 44K init)Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)Inode cache hash table entries: 2048 (order: 2, 16384 bytes)Mount-cache hash table entries: 512 (order: 0, 4096 bytes)Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)Page-cache hash table entries: 8192 (POSIX conformance testing by UNIFIXLinux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039Initializing RT netlink socket Starting kswapd JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by AxisCommunications AB.Keyboard interface test failed[1]: 5fffbff7Keyboard interface test failed[2]: 08Keyboard interface test failed[3]: 0ainitialize_kbd: Keyboard reset failed, no ACKpty: 256 Unix98 ptys configured Serial driver version 5.05c (2001-07-08) with no serial optionsenabledKeyboard timed out[1] keyboard: Timeout - AT keyboard not present?Keyboard timed out[1] keyboard: Timeout - AT keyboard not present?ttyS00 at 0x0000 (irq = 14) is a PXA UARTttyS01 at 0x0000 (irq = 13) is a PXA UARTttyS02 at 0x0000 (irq = 12) is a PXA UARTSA1100 Real Time Clock driver v1.00Probing Lubbock flash at physical address 0x00000000Using buffer write method Using static partition definition Creating 3 MTD partitions on "Lubbock flash":0x00000000-0x00040000 : "bootldr" mtd: Giving out device 0 to bo 0x00040000-0x01fc0000 : "root" mtd: Giving out device 1 to root 0x01fc0000-0x02000000 : "asset"mtd: Giving out device 2 to assetNET4: Linux TCP/IP 1.0 for NET4.0IP Protocols: ICMP, UDP, TCPIP: routing cache hash table of 512 buckets, 4KbytesTCP: Hash tables configured (established 2048 bind 2048)NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.comVFS: Mounted root (jffs2 filesystem).Freeing init memory: 44KINIT: version 2.78 bootingMounting local filesystems...Setting the System Clock using the Hardware Clock as reference...

JOAQUÍN DIEGO REYES GONZÁLEZ - 89 -

Page 90: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

INIT: Entering runlevel: 2Configuring network interfaces: done.Not recalculating module dependenciesLoading modules:Starting OpenBSD Secure Shell server: sshd.Starting syslogd/klogd: done

thechangers login:

Al llegar a éste punto, nos pide un nombre de usuario y una

password, que según viene explicado por el fabricante de la placa, el nombre

de usuario por defecto, según viene de fábrica, es root y el password rootme.

Si accedemos al sistema, podremos ver lo siguiente:

login[108]: root login on `ttyS0'

~ #

Una vez que hemos alcanzado la shell de la placa sólo queda indicar

que con el comando rz, la placa se queda a la espera de archivos que podemos

transferir a través del programa minicom, utilizando el protocolo zmodem, así

como que con el comando sz <nombredelarchivo>, recibimos el archivo

que se encuentra en la placa.

JOAQUÍN DIEGO REYES GONZÁLEZ - 90 -

Page 91: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

AAPÉNDICEPÉNDICE B: C B: CÓDIGOÓDIGO DELDEL PROGRAMAPROGRAMA

JOAQUÍN DIEGO REYES GONZÁLEZ - 91 -

Page 92: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

#include <stdio.h>#include <string.h>#include <stdlib.h>

#define MINIMO_ESQUELETO 169#define MAXIMO_ESQUELETO 169

#define FILTRADO_DIRECCION 0 /* Poner a 1 si se quiere filtrar porlas direcciones */#define OPEN_ERO 0 /* Poner a 1 si se erosionar en el procesode opening */#define OPEN_DIL 0 /* Poner a 1 si se dilatar en el proceso deopening */#define CLOSE_DIL 0 /* Poner a 1 si se dilatar en el proceso declosing */#define CLOSE_ERO 0 /* Poner a 1 si se erosionar en el procesode closing */

short int *imagen,*direcciones,*imagenOriginal;int i=0,j=0,ancho,alto,mancho,malto,mn,melemento;long int n;

void LeerFichero(void){ char a; short int elemento; int elementos; i=0;

a=getchar(); /* Tenemos que leer una P, 80 en ASCII */ if(a!=80)

{ printf("\nError en el formato de la imagen (debe

empezar por P)\n\n"); exit(0); }

a=getchar(); /* Tenemos que leer una 3, 51 en ASCII */ if(a!=51) { printf("\nError en el formato de la imagen (debe

empezar por P3)\n\n"); exit(0); }

a=getchar(); /* Tenemos que leer un salto de linea, 10 enASCII */

if(a!=10) {

JOAQUÍN DIEGO REYES GONZÁLEZ - 92 -

Page 93: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

printf("\nError en el formato de la imagen (debeempezar por P3, mas un salto de linea)\n\n");

exit(0); }

a=getchar(); /* Tenemos que leer una almohadilla (#), 35 enASCII */

if(a!=35) { printf("\nError en el formato de la imagen (la segunda

linea debe ser un comentario)\n\n"); exit(0); }

do /* Lectura de la cabecera PPM, segunda lineacomentada */

{ a=getchar();

i++; } while(a!=10);

scanf("%d %d",&ancho,&alto); /* Leemos dimensiones dela imagen */

n=ancho*alto; /* Calculamosel numero de elementos del archivo */

imagen=(short int *)calloc(n,sizeof(short int)); /*

Reservamos memoria para leer la imagen */ if(!imagen) { printf("\nError al reservar la memoria para abrir la

imagen\n\n"); exit(0); } imagenOriginal=(short int *)calloc(n,sizeof(short int));/* Reservamos memoria para leer la imagen */ if(!imagen) { printf("\nError al reservar la memoria para almacenar

la imagen original\n\n"); exit(0); } scanf("%d",&elemento); /* Leemos un 255 que hay al

principio */

for(i=0;i<n;i++) /* Leemos los elementos de la imagen,almacenandolos en un puntero */

{ elementos=0; for(j=0;j<3;j++)

JOAQUÍN DIEGO REYES GONZÁLEZ - 93 -

Page 94: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

{ scanf("%d",&elemento); elementos+=elemento; }

elemento=elementos/3; imagen[i]=elemento; imagenOriginal[i]=elemento;}

direcciones=(short int *)calloc(n,sizeof(short int)); /*Reservamos memoria para leer la matriz de direciones */

if(!direcciones) { printf("\nError al reservar la memoria para crear la

matriz de direciones\n\n"); exit(0); }

for(i=0;i<n;i++) /* Inicialización de la imagen temporal avalor de blanco */

direcciones[i]=255;

}

short int CalculaMaximo(void){ short int valor=0; for(i=0;i<n;i++) if(imagen[i]>valor) valor=imagen[i]; if(valor>255)

valor=255; return valor;}

short int CalculaMinimo(void){ short int valor=255; for(i=0;i<n;i++) if(imagen[i]<valor) valor=imagen[i];

if(valor<0)valor=0;

JOAQUÍN DIEGO REYES GONZÁLEZ - 94 -

Page 95: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

return valor;}

short int Histograma(short int maximo,short int minimo){ short int

blanco=0,blancoNUEVO=0,blancoABAJO=0,blancoARRIBA=0; long int contador=0,sumatorio=0; long int *valores; FILE *fhist;

/* maximo=255; minimo=0;

*/ valores=(long int *)calloc(256,sizeof(long int)); if(!valores) { printf("\nError al reservar la memoria para crear los

valores del histograma\n\n"); exit(0); } if(!(fhist=fopen("hisblanc.txt","w+"))) /* Abrimos el

archivo para almacenar el histograma */ { printf("\nError al abrir el archivo para el

histograma\n\n"); exit(0); }

for(i=minimo;i<=maximo;i++) {

for(j=0;j<=n;j++) if(imagen[j]==i) valores[i]++;

fprintf(fhist,"Valor %3d: %d\n",i,valores[i]);}

fprintf(fhist,"\n------------------------------------------\n"); fprintf(fhist," TABLA RESUMEN: Valores mayores que cero\n");

fprintf(fhist,"------------------------------------------\n");

for(i=minimo;i<=maximo;i++) if(valores[i]>0) {

contador=contador+valores[i];

JOAQUÍN DIEGO REYES GONZÁLEZ - 95 -

Page 96: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

fprintf(fhist,"Valor %3d: %8d, %8d de %d\n",i,valores[i],contador,n);

if(contador>n/2 && blanco==0) {

fprintf(fhist,"------------------------------------------\n");

blanco=i; }

} fprintf(fhist,"------------------------------------------\n");

fprintf(fhist,"\n------------------------------------------\n"); fprintf(fhist," Comando para la representación enOctave\n");

fprintf(fhist,"------------------------------------------\n");

fprintf(fhist,"bar(["); for(i=minimo;i<=maximo;i++)

if(valores[i]>0) fprintf(fhist," %d ",i);

fprintf(fhist,"],["); for(i=minimo;i<=maximo;i++)

if(valores[i]>0) fprintf(fhist," %d ",valores[i]);

fprintf(fhist,"])\n"); fprintf(fhist,"------------------------------------------

\n");

blancoNUEVO=blanco;

printf("\n\t Propuesta inicial de blanco: %d",blancoNUEVO); j=1; do { blanco=blancoNUEVO; contador=0; sumatorio=0;

for(i=minimo;i<blanco;i++) { contador=contador+valores[i]; sumatorio=sumatorio+i*valores[i]; } blancoABAJO=sumatorio/contador;

for(i=blanco;i<=maximo;i++) { contador=contador+valores[i];

JOAQUÍN DIEGO REYES GONZÁLEZ - 96 -

Page 97: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

sumatorio=sumatorio+i*valores[i]; } blancoARRIBA=sumatorio/contador;

blancoNUEVO=(blancoABAJO+blancoARRIBA)/2; printf("\n\t Propuesta n%d de NUEVO blanco: %d",j,blancoNUEVO); j++;

} while (blancoNUEVO!=blanco && j<13);

if(fclose(fhist)==EOF) /* Cerramos el archivo en el quese almacena el histograma */

{ printf("\nError al cerrar el archivo para el

histograma\n\n"); exit(0); } free(valores); return blanco;}

void Atenuacion(short int maximo,short int minimo){ int elemento; if(minimo>0) for(i=0;i<=n;i++) imagen[i]=imagen[i]-minimo;

if((maximo-minimo)<255) for(i=0;i<=n;i++) imagen[i]=imagen[i]*255/(maximo-minimo);}

short int *CargaMascara(void){ short int *mascara, nmascara; FILE *mascaras; char letra; char nombre[9]="m01.ppm";

mascara=(short int *)calloc(169*12,sizeof(short int));/* Reservamos memoria para las direcciones de la imagen */ if(!imagen)

{ printf("\nError al reservar la memoria para la

máscara\n\n"); exit(0);}

JOAQUÍN DIEGO REYES GONZÁLEZ - 97 -

Page 98: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

for(nmascara=1;nmascara<13;nmascara++) { if(nmascara<10) nombre[2]=48+nmascara; else if(nmascara<13) { nombre[1]=49; nombre[2]=48+nmascara-10; }

mascaras=fopen(nombre,"r"); if (!mascaras) {

printf("Error al abrir el archivo de lamáscara");

exit(0); }

letra=fgetc(mascaras); /* Tenemos que leer una P,80 en ASCII */ if(letra!=80)

{ printf("\nError en el formato de la imagen (debe

empezar por P)\n\n"); exit(0); }

letra=fgetc(mascaras); /* Tenemos que leer una 1, 51en ASCII */

if(letra!=49) { printf("\nError en el formato de la imagen (debe

empezar por P3)\n\n"); exit(0); }

letra=fgetc(mascaras); /* Tenemos que leer un salto delinea, 10 en ASCII */

if(letra!=10) { printf("\nError en el formato de la imagen (debe

empezar por P1, mas un salto de linea)\n\n"); exit(0); }

letra=fgetc(mascaras); /* Tenemos que leer unaalmohadilla (#), 35 en ASCII */

JOAQUÍN DIEGO REYES GONZÁLEZ - 98 -

Page 99: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

if(letra!=35) { printf("\nError en el formato de la imagen (la

segunda linea debe ser un comentario)\n\n"); exit(0); }

do /* Lectura de la cabecera PPM, segunda lineacomentada */

{ letra=fgetc(mascaras); } while(letra!=10);

fscanf(mascaras,"%d",&mancho); /* Leemosdimensiones de la mascara */

fscanf(mascaras,"%d",&malto); /* Leemosdimensiones de la mascara */

mn=mancho*malto;// printf("\n %2d || Ancho: %d, Alto: %d, Total: %d",nmascara,mancho,malto,mn);

for(i=0;i<mn;i++) { fscanf(mascaras,"%d",&melemento); mascara[(nmascara-1)*mn+i]=melemento; } } return mascara;}

short int BuscaDirecciones(long int valores[24],short int opcion){ int

maximo=0,minimo=255,minimo2=255,indicemin=0,indicemin2=0,indicemax=0;

/* printf("\n");

for(i=0;i<24;i++) printf("%d:%d ",i,valores[i]);

*/ for(i=1;i<13;i++) { if(valores[2*i-2]==13) {

if(valores[2*i-1]>=maximo) { maximo=valores[2*i-1]; /* Valor de

blanco */

JOAQUÍN DIEGO REYES GONZÁLEZ - 99 -

Page 100: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

indicemax=i; }

if(valores[2*i-1]<=minimo) { minimo=valores[2*i-1]; /* Valor de

negro */ indicemin=i; } }}

switch(opcion) { case 1:

if(maximo>169 || minimo<130) { if(((255*7)/10-maximo)<(minimo-(255*3)/10)) return indicemax*10+3; /* BLANCO: El

resto entero de 10 es 1 */ else

return indicemin*10+1; /* NEGRO: Elresto entero de 10 es 3 */

} break; case 2: if((maximo-minimo)>130) {

for(i=1;i<13;i++) { if(valores[2*i-2]==13) {

if(valores[2*i-1]<=minimo2 &&i!=indicemin)

{ minimo2=valores[2*i-1];

/* Valor de negro */ indicemin2=i;

} }}

if((indicemin-indicemin2)>3 && (indicemin-indicemin2)<9)

return 20; /* Hay una característica*/

else {

if((indicemin2-indicemin)>3 &&(indicemin2-indicemin)<9)

return 20; /* Hay unacaracterística */

JOAQUÍN DIEGO REYES GONZÁLEZ - 100 -

Page 101: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

else return 240; /* No hay una

característica */}

} else return 240; /* No hay una característica */ break;

default: if(minimo<MINIMO_ESQUELETO) return indicemin*10+1; /* NEGRO: El resto

entero de 10 es 3 */ break;

} return 255;}

void BinarizaImagen(int blanco){ for(i=0;i<n;i++) /* Filtro blanco y negro */ { if(imagen[i]>blanco) imagen[i]=255; else imagen[i]=0;

}}

long int Coordenadas(int x,int y){ long int coordenada; coordenada=y*ancho+x; return coordenada;}

long int *Alrededor(long int coordenada,short int campo){ long int *cercano; int x,y;

y=coordenada/ancho; x=coordenada%ancho;

// printf("\n (%d,%d)=%d",x,y,coordenada);

switch(campo) {

JOAQUÍN DIEGO REYES GONZÁLEZ - 101 -

Page 102: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

case 1: cercano=(long int *)calloc(8,sizeof(long int));

if(!cercano){ printf("\nError al reservar la memoria para

crear el alrededor del píxel\n\n"); exit(0);

} cercano[0]=Coordenadas(x-1,y-1); cercano[1]=Coordenadas( x ,y-1); cercano[2]=Coordenadas(x+1,y-1); cercano[3]=Coordenadas(x-1, y ); cercano[4]=Coordenadas(x+1, y ); cercano[5]=Coordenadas(x-1,y+1); cercano[6]=Coordenadas( x ,y+1); cercano[7]=Coordenadas(x+1,y+1); break; case 6: cercano=(long int *)calloc(2*campo+1,sizeof(long

int));if(!cercano)

{ printf("\nError al reservar la memoria para

crear el alrededor del píxel\n\n"); exit(0);

}for(i=1;i<=13;i++)

for(j=1;j<=13;j++)cercano[13*(i-1)+j-1]=Coordenadas(x-

7+j,y-7+i); break;

}

return cercano;}

void ProcesaImagen(short int opcion){ long int *cercano,coordenada,valor,valorNUEVO,valorN,valores

[24]; int x,y; short int *mascara,*imagenTMP,suma; FILE *fpíxel;

imagenTMP=(short int *)calloc(n,sizeof(short int)); /*Reservamos memoria para leer la imagen */

if(!imagen) {

JOAQUÍN DIEGO REYES GONZÁLEZ - 102 -

Page 103: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

printf("\nError al reservar la memoria para crear laimagen temporal\n\n");

exit(0); }

for(i=0;i<n;i++) /* Inicialización de la imagen temporal avalor de blanco */

imagenTMP[i]=255;

switch(opcion) { case 1: /* Proceso de erosión */ for(y=1;y<(alto-1);y++)

for(x=1;x<(ancho-1);x++){

coordenada=Coordenadas(x,y); cercano=Alrededor(coordenada,1); suma=0; for(i=0;i<8;i++) suma=suma+imagen[cercano[i]]/

255; if(suma>0) imagenTMP[coordenada]=255; else imagenTMP[coordenada]=0;

free(cercano); }

break; case 2: /* Proceso de dilatación */ for(y=1;y<(alto-1);y++)

for(x=1;x<(ancho-1);x++){

coordenada=Coordenadas(x,y); cercano=Alrededor(coordenada,1); suma=0; for(i=0;i<8;i++) suma=suma+imagen[cercano[i]]/

255; if(suma>7) imagenTMP[coordenada]=255; else imagenTMP[coordenada]=0;

free(cercano); }

break; case 3: /* Búsqueda de direcciones */ mascara=CargaMascara(); for(y=7;y<(alto-7);y++)

JOAQUÍN DIEGO REYES GONZÁLEZ - 103 -

Page 104: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

for(x=7;x<(ancho-7);x++){

coordenada=Coordenadas(x,y); cercano=Alrededor(coordenada,6); for(i=1;i<13;i++) { valores[2*i-2]=0; valores[2*i-1]=0; for(j=0;j<169;j++) { valor=mascara[(i-1)

*169+j]*imagen[cercano[j]]; if(mascara[(i-1)*169+j]!

=0) { valores[2*i-1]

=valores[2*i-1]+valor; valores[2*i-2]++; } }

valores[2*i-1]=valores[2*i-1]/valores[2*i-2];

} direcciones[coordenada]

=BuscaDirecciones(valores,1); if(FILTRADO_DIRECCION==1) { if(direcciones[coordenada]%

10==1) imagenTMP[coordenada]=0; else { if(direcciones

[coordenada]%10==3) imagenTMP

[coordenada]=255; else imagenTMP

[coordenada]=imagen[coordenada]; }}

else imagenTMP[coordenada]=imagen

[coordenada]; free(cercano);

}free(mascara);

break; case 4: /* Contornos al descubierto */ j=0;

JOAQUÍN DIEGO REYES GONZÁLEZ - 104 -

Page 105: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

do { i=0; j++;

for(y=1;y<(alto-1);y++)for(x=1;x<(ancho-1);x++)

{ coordenada=Coordenadas(x,y); cercano=Alrededor

(coordenada,1); if(imagen[coordenada]==0) { suma=0; for(i=0;i<8;i++) suma=suma+imagen

[cercano[i]]/255; if(suma<1) { i++; imagenTMP

[coordenada]=255; } else imagenTMP

[coordenada]=0; } else imagenTMP[coordenada]

=imagen[coordenada]; free(cercano);

} suma=i;

for(i=0;i<n;i++)imagen[i]=imagenTMP[i];

}while(suma!=8&&j<169); break; case 5: /* Esqueletos al descubierto */ j=0; valor=0; valorNUEVO=0; valorN=0; printf("\n"); do { valorNUEVO=valor; valor=0; j++;

for(y=1;y<(alto-1);y++)for(x=1;x<(ancho-1);x++)

JOAQUÍN DIEGO REYES GONZÁLEZ - 105 -

Page 106: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

{ coordenada=Coordenadas(x,y); cercano=Alrededor

(coordenada,1); if(imagen[coordenada]==0) { suma=0; for(i=0;i<8;i++) if(imagen[cercano

[i]]==0) suma=suma+1; switch(suma) { case 8: imagenTMP

[coordenada]=imagen[coordenada]; break; case 7: imagenTMP

[coordenada]=imagen[coordenada]; break; case 6: imagenTMP

[coordenada]=imagen[coordenada]; break; case 5: if(imagen

[cercano[0]]==255&&imagen[cercano[1]]==255&&imagen[cercano[3]]==255)

imagenTMP[coordenada]=255;

else if(imagen[cercano[1]]==255&&imagen[cercano[2]]==255&&imagen[cercano[4]]==255)

imagenTMP[coordenada]=255;

else if(imagen[cercano[3]]==255&&imagen[cercano[5]]==255&&imagen[cercano[6]]==255)

imagenTMP[coordenada]=255;

else if(imagen[cercano[4]]==255&&imagen[cercano[6]]==255&&imagen[cercano[7]]==255)

imagenTMP[coordenada]=255;

else

imagenTMP[coordenada]=imagen[coordenada]; break; case 4:

JOAQUÍN DIEGO REYES GONZÁLEZ - 106 -

Page 107: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

if(imagen[cercano[0]]==0&&imagen[cercano[2]]==0&&imagen[cercano[5]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[1]]==0&&imagen[cercano[6]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[3]]==0&&imagen[cercano[4]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[0]]==0&&imagen[cercano[1]]==0&&imagen[cercano[4]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[1]]==0&&imagen[cercano[2]]==0&&imagen[cercano[3]]==0&&imagen[cercano[5]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[2]]==0&&imagen[cercano[4]]==0&&imagen[cercano[6]]==0&&imagen[cercano[5]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[0]]==0&&imagen[cercano[3]]==0&&imagen[cercano[6]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else

imagenTMP[coordenada]=255; break; case 3: if(imagen

[cercano[0]]==0&&imagen[cercano[5]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];else if(imagen

[cercano[2]]==0&&imagen[cercano[5]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];else if(imagen

[cercano[0]]==0&&imagen[cercano[2]]==0&&imagen[cercano[5]]==0)

imagenTMP[coordenada]=imagen[coordenada];else if(imagen

[cercano[0]]==0&&imagen[cercano[2]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

JOAQUÍN DIEGO REYES GONZÁLEZ - 107 -

Page 108: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

else if(imagen[cercano[0]]==0&&imagen[cercano[1]]==0&&imagen[cercano[2]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[5]]==0&&imagen[cercano[6]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[0]]==0&&imagen[cercano[3]]==0&&imagen[cercano[5]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[2]]==0&&imagen[cercano[4]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[0]]==0&&imagen[cercano[1]]==0&&imagen[cercano[6]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[1]]==0&&imagen[cercano[2]]==0&&imagen[cercano[6]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[1]]==0&&imagen[cercano[5]]==0&&imagen[cercano[6]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[1]]==0&&imagen[cercano[6]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[2]]==0&&imagen[cercano[3]]==0&&imagen[cercano[4]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[0]]==0&&imagen[cercano[3]]==0&&imagen[cercano[4]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[3]]==0&&imagen[cercano[4]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[3]]==0&&imagen[cercano[4]]==0&&imagen[cercano[5]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[0]]==0&&imagen[cercano[3]]==0&&imagen[cercano[6]]==0)

JOAQUÍN DIEGO REYES GONZÁLEZ - 108 -

Page 109: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[1]]==0&&imagen[cercano[3]]==0&&imagen[cercano[5]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[2]]==0&&imagen[cercano[4]]==0&&imagen[cercano[6]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[1]]==0&&imagen[cercano[4]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[1]]==0&&imagen[cercano[2]]==0&&imagen[cercano[3]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[0]]==0&&imagen[cercano[1]]==0&&imagen[cercano[4]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[3]]==0&&imagen[cercano[6]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[4]]==0&&imagen[cercano[5]]==0&&imagen[cercano[6]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else

imagenTMP[coordenada]=255; break; case 2: if(imagen

[cercano[1]]==0&&imagen[cercano[3]]==0)

imagenTMP[coordenada]=imagen[coordenada]; else if(imagen

[cercano[1]]==0&&imagen[cercano[4]]==0)

imagenTMP[coordenada]=imagen[coordenada]; else if(imagen

[cercano[3]]==0&&imagen[cercano[6]]==0)

imagenTMP[coordenada]=imagen[coordenada]; else if(imagen

[cercano[4]]==0&&imagen[cercano[6]]==0)

imagenTMP[coordenada]=imagen[coordenada]; else if(imagen

[cercano[1]]==0&&imagen[cercano[6]]==0)

JOAQUÍN DIEGO REYES GONZÁLEZ - 109 -

Page 110: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[3]]==0&&imagen[cercano[4]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[0]]==0&&imagen[cercano[7]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else if(imagen[cercano[2]]==0&&imagen[cercano[5]]==0)

imagenTMP[coordenada]=imagen[coordenada];

else

imagenTMP[coordenada]=255; case 1:

imagenTMP[coordenada]=imagen[coordenada];

break; case 0: imagenTMP

[coordenada]=255; break; }

if(imagenTMP[coordenada]==255&&suma!=1)

valor++;}

else imagenTMP[coordenada]

=imagen[coordenada]; free(cercano);

} for(i=0;i<n;i++)

imagen[i]=imagenTMP[i]; printf("%3d->%5d:%5d ",j,valor,valorNUEVO); if(j%5==0) printf("\n");

for(i=0;i<n;i++) imagenTMP[i]=imagen[i];

for(y=7;y<(alto-7);y++) for(x=7;x<(ancho-7);x++)

{ coordenada=Coordenadas(x,y);

if(imagen[coordenada]==0) {

JOAQUÍN DIEGO REYES GONZÁLEZ - 110 -

Page 111: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

cercano=Alrededor(coordenada,1);

suma=0; for(i=0;i<8;i++)

if(imagen[cercano[i]]==0)

suma=suma+1; switch(suma) {

case 3: if(imagen

[cercano[0]]==0&&imagen[cercano[3]]==0&&imagen[cercano[7]]==0)

imagenTMP[cercano[4]]=0; else if(imagen[cercano[2]]==0&&imagen[cercano[4]]==0&&imagen[cercano[5]]==0)

imagenTMP[cercano[3]]=0; else if(imagen[cercano[0]]==0&&imagen[cercano[4]]==0&&imagen[cercano[7]]==0)

imagenTMP[cercano[3]]=0; else if(imagen[cercano[2]]==0&&imagen[cercano[3]]==0&&imagen[cercano[5]]==0)

imagenTMP[cercano[4]]=0;

else if(imagen[cercano[2]]==0&&imagen[cercano[5]]==0&&imagen[cercano[6]]==0)

imagenTMP[cercano[4]]=0; else if(imagen[cercano[0]]==0&&imagen[cercano[6]]==0&&imagen[cercano[7]]==0)

imagenTMP[cercano[3]]=0; else if(imagen[cercano[0]]==0&&imagen[cercano[1]]==0&&imagen[cercano[7]]==0)

imagenTMP[cercano[6]]=0; else if(imagen[cercano[1]]==0&&imagen[cercano[2]]==0&&imagen[cercano[5]]==0)

imagenTMP[cercano[6]]=0;

break; case 2: if(imagen

[cercano[1]]==0&&imagen[cercano[5]]==0)

imagenTMP[cercano[3]]=0; else if(imagen[cercano[2]]==0&&imagen[cercano[6]]==0)

imagenTMP[cercano[1]]=0;

JOAQUÍN DIEGO REYES GONZÁLEZ - 111 -

Page 112: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

else if(imagen[cercano[1]]==0&&imagen[cercano[7]]==0)

imagenTMP[cercano[4]]=0; else if(imagen[cercano[0]]==0&&imagen[cercano[6]]==0)

imagenTMP[cercano[1]]=0;

else if(imagen[cercano[4]]==0&&imagen[cercano[5]]==0)

imagenTMP[cercano[6]]=0; else if(imagen[cercano[2]]==0&&imagen[cercano[3]]==0)

imagenTMP[cercano[4]]=0;

else if(imagen[cercano[3]]==0&&imagen[cercano[7]]==0)

imagenTMP[cercano[4]]=0; else if(imagen[cercano[0]]==0&&imagen[cercano[4]]==0)

imagenTMP[cercano[1]]=0;

else if(imagen[cercano[0]]==0&&imagen[cercano[7]]==0) {

imagenTMP[cercano[3]]=0;

imagenTMP[cercano[4]]=0;

} else if(imagen[cercano[2]]==0&&imagen[cercano[5]]==0) {

imagenTMP[cercano[3]]=0;

imagenTMP[cercano[4]]=0;

}

break; } free(cercano);

} }

for(i=0;i<n;i++) imagen[i]=imagenTMP[i];

JOAQUÍN DIEGO REYES GONZÁLEZ - 112 -

Page 113: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

if(valor==valorNUEVO) valorN++; else valorN=0; }while(valorN<3&&j<MAXIMO_ESQUELETO);

break; case 6: /* Búsqueda de Características */ mascara=CargaMascara(); for(y=7;y<(alto-7);y++)

{ for(x=7;x<(ancho-7);x++)

{ coordenada=Coordenadas(x,y); if(imagen[coordenada]==0) { cercano=Alrededor

(coordenada,6); for(i=1;i<13;i++) { valores[2*i-2]=0; valores[2*i-1]=0; for(j=0;j<169;j++) { valor=mascara[(i-1)

*169+j]*imagen[cercano[j]]; if(mascara[(i-1)

*169+j]!=0) { valores[2*i-

1]=valores[2*i-1]+valor; valores[2*i-

2]++; } }

valores[2*i-1]=valores[2*i-1]/valores[2*i-2];

}

/* printf("\n (%3d,%3d):%3d=%3d >bar([" ,x,y,coordenada,imagen[coordenada]); for(i=1;i<13;i++)

printf("%d ",i); printf("],["); for(i=1;i<13;i++) printf("%d ",valores[2*i-

1]); printf("])");

*/ direcciones[coordenada]

=BuscaDirecciones(valores,2);

JOAQUÍN DIEGO REYES GONZÁLEZ - 113 -

Page 114: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

free(cercano); } else direcciones[coordenada]=240; } }

free(mascara); break; case 7: /* Perfilado de esqueletos */ for(i=0;i<n;i++) { if(imagen[i]==255) direcciones[i]=240; imagenTMP[i]=imagen[i]; } break;

} for(i=0;i<n;i++)

imagen[i]=imagenTMP[i];

free(imagenTMP);}

void GeneraFichero(char nombre[13],char px[2],char comentario[39]){ FILE *fhuella; if(!(fhuella=fopen(nombre,"w+"))) /* Abrimos el

archivo para almacenar la matriz */ { printf("\nError al abrir el archivo para la

imagen\n\n"); exit(0); }

fprintf(fhuella,"%s\n# %s\n%d %d\n",px,comentario,ancho,alto);

if(px[1]==49) /* Formato P1 de PPM */ { for(i=0;i<n;i++) { if(imagen[i]>0) fprintf(fhuella,"0 "); else fprintf(fhuella,"1 "); }

JOAQUÍN DIEGO REYES GONZÁLEZ - 114 -

Page 115: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

}

if(px[1]==51) /* Formato P3 de PPM */ { fprintf(fhuella,"255\n"); for(i=0;i<n;i++) for(j=0;j<3;j++) fprintf(fhuella,"%d\n",imagen[i]); }

if(fclose(fhuella)==EOF) /* Cerramos el archivo enel que se almacena la matriz */

{ printf("\nError al cerrar el archivo para la

matriz\n\n"); exit(0); }}

void GeneraFicheroDireccion(char nombre[13]){ FILE *fhuella; short int angulo; if(!(fhuella=fopen(nombre,"w+"))) { printf("\nError al abrir el archivo para las

direcciones\n\n"); exit(0); }

fprintf(fhuella,"P3\n# Imagen de direcciones\n%d %d\n255\n",ancho,alto);

for(i=0;i<n;i++) { angulo=direcciones[i]/10; switch (angulo) { case 1: fprintf(fhuella," 64 192 0\n"); break; case 2: fprintf(fhuella," 0 255 0\n"); break; case 3: fprintf(fhuella," 0 192 64\n"); break;

JOAQUÍN DIEGO REYES GONZÁLEZ - 115 -

Page 116: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

case 4: fprintf(fhuella," 0 128 128\n"); break; case 5: fprintf(fhuella," 0 64 192\n"); break; case 6: fprintf(fhuella," 0 0 255\n"); break; case 7: fprintf(fhuella," 64 0 192\n"); break; case 8: fprintf(fhuella,"128 0 128\n"); break; case 9: fprintf(fhuella,"192 0 64\n"); break; case 10: fprintf(fhuella,"255 0 0\n"); break; case 11: fprintf(fhuella,"192 64 0\n"); break; case 12: fprintf(fhuella,"128 128 0\n"); break; case 24: fprintf(fhuella,"%d %d %d\n",imagenOriginal

[i],imagenOriginal[i],imagenOriginal[i]);// fprintf(fhuella,"255 0 255\n");

break; default: fprintf(fhuella,"255 255 0\n"); break; } }

if(fclose(fhuella)==EOF) /* Cerramos el archivo enel que se almacena la matriz */

{ printf("\nError al cerrar el archivo para las

direcciones\n\n"); exit(0); }}

void GeneraFicheroCaracteristica(char nombre[13])

JOAQUÍN DIEGO REYES GONZÁLEZ - 116 -

Page 117: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

{ FILE *fhuella; if(!(fhuella=fopen(nombre,"w+"))) { printf("\nError al abrir el archivo para las

caracteristicas\n\n"); exit(0); }

fprintf(fhuella,"P3\n# Imagen con caracteristicas\n%d %d\n255\n",ancho,alto);

for(i=0;i<n;i++) { switch (imagen[i]) { case 13: fprintf(fhuella," 0 255 0\n"); break; case 169: fprintf(fhuella," 255 0 0\n"); break; case 69: fprintf(fhuella," 0 0 255\n"); break; default: fprintf(fhuella," %d %d %d\n",imagen[i],

imagen[i],imagen[i]); break; } }

if(fclose(fhuella)==EOF) /* Cerramos el archivo enel que se almacena la matriz */

{ printf("\nError al cerrar el archivo para las

direcciones\n\n"); exit(0); }}

void GeneraMatriz(void){ FILE *fmatriz;

if(!(fmatriz=fopen("matriz.txt","w+"))) /* Abrimos elarchivo para almacenar la matriz */

{

JOAQUÍN DIEGO REYES GONZÁLEZ - 117 -

Page 118: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

printf("\nError al abrir el archivo para la matriz"); exit(0); }

j=0; for(i=0;i<n;i++) /* Grabamos los datos de la matriz en

el archivo matriz.txt */ { if(j==ancho) { fprintf(fmatriz,"\n"); j=0; } j++;

fprintf(fmatriz,"%2d:%3d ",i,imagen[i]); }

if(fclose(fmatriz)==EOF) /* Cerramos el archivo enel que se almacena la matriz */

{ printf("\nError al cerrar el archivo para la matriz");

exit(0); }}

void SobrescribeOriginal(void){ for(i=0;i<n;i++) imagenOriginal[i]=imagen[i]; }

int main (void){ short int maximo,minimo,blanco;

printf("\n ALGORITMO DE RECONOCIMIENTO DE HUELLAS DACTILARES(v1.05)\n");

printf("\n Leyendo fichero... "); LeerFichero(); /* Leemos la imgen que nos entra al programa

*/ GeneraFichero("01leidosd.pnm","P3","Imagen original"); printf("...fichero leido (%dx%d, %d píxeles)

\n",ancho,alto,n);

printf("\n Calculando Maximo y Minimo... "); maximo=CalculaMaximo(); printf("... Maximo: %d",maximo); minimo=CalculaMinimo();

JOAQUÍN DIEGO REYES GONZÁLEZ - 118 -

Page 119: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

printf(" y Minimo: %d\n",minimo); printf("\n Atenuando la imagen... "); Atenuacion(maximo,minimo); printf("...imagen atenuada... "); GeneraFichero("02atenuad.pnm","P3","Imagen atenuada"); printf("...fichero grabado \n");

printf("\n Calculando Maximo y Minimo... "); maximo=CalculaMaximo(); printf("... Maximo: %d",maximo); minimo=CalculaMinimo(); printf(" y Minimo: %d\n",minimo);

printf("\n Buscando direcciones... "); ProcesaImagen(3); /* Buscar direcciones */ printf("... direcciones calculadas ..."); GeneraFichero("03direccn.pnm","P3","Imagen de direcciones"); printf("...fichero grabado \n",direcciones[13],direcciones

[169]); GeneraFicheroDireccion("04colodir.pnm");

printf("\n Calculando Maximo y Minimo... "); maximo=CalculaMaximo(); printf("... Maximo: %d",maximo); minimo=CalculaMinimo(); printf(" y Minimo: %d\n",minimo);

printf("\n Calculando el valor de minimo blanco... "); blanco=Histograma(maximo,minimo); printf("... Valor blanco: %d\n",blanco);

printf("\n Generando imagen binarizada... "); BinarizaImagen(blanco); printf("...imagen binarizada... "); GeneraFichero("05binary.pnm","P3","Imagen binarizada");

// GeneraMatriz(); printf("...fichero grabado \n");

printf("\n INICIO DEL OPENING"); printf("\n Erosionando imagen... "); if(OPEN_ERO==1)

ProcesaImagen(1); /* Erosión */ printf("...imagen erosionada... "); GeneraFichero("06openero.pnm","P3","Imagen erosionada

(OPENING)"); printf("...fichero grabado");

JOAQUÍN DIEGO REYES GONZÁLEZ - 119 -

Page 120: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

printf("\n Dilatando imagen... "); if(OPEN_DIL==1)

ProcesaImagen(2); /* Dilatación */ printf("...imagen dilatada... "); GeneraFichero("07opendil.pnm","P3","Imagen dilatada

(OPENING)"); printf("...fichero grabado \n"); printf(" FIN DEL OPENING \n");

printf("\n INICIO DEL CLOSING"); printf("\n Dilatando imagen... "); if(CLOSE_DIL==1)

ProcesaImagen(2); /* Dilatación */ printf("...imagen dilatada... "); GeneraFichero("08closdil.pnm","P3","Imagen dilatada

(CLOSING)"); printf("...fichero grabado");

printf("\n Erosionando imagen... "); if(CLOSE_ERO==1)

ProcesaImagen(1); /* Erosión */ printf("...imagen erosionada... "); GeneraFichero("09closero.pnm","P3","Imagen erosionada

(CLOSING)"); printf("...fichero grabado \n"); printf(" FIN DEL CLOSING \n");

// SobrescribeOriginal(); /* Sobrescrimos la imagenoriginal con la actual */

printf("\n Buscando esqueletos... "); ProcesaImagen(5); /* Descubrimos los esqueletos */ printf("...esqueletos encontrados... "); GeneraFichero("10esqelet.pnm","P3","Imagen con esqueletos"); printf("...fichero grabado \n");

printf("\n Perfilando esqueletos... "); ProcesaImagen(4); /* Buscamos los contornos */ ProcesaImagen(7); /* Perfilamos los esqueletos */ printf("...esqueletos perfilados... "); GeneraFichero("11esqperf.pnm","P3","Imagen con esqueletos

perfilados"); GeneraFicheroDireccion("12colodir.pnm"); printf("...fichero grabado \n");

printf("\n Buscando caracteristicas... "); ProcesaImagen(6); /* Descubrimos las características */ printf("...caracteristicas encontradas... "); GeneraFicheroDireccion("13caractr.pnm");

JOAQUÍN DIEGO REYES GONZÁLEZ - 120 -

Page 121: ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS ... · obtienen, con el propio dispositivo y con una base de datos muy reducida, es decir, capaz de identificar a un escaso

ALGORITMO DE OBTENCIÓN DE CARACTERÍSTICAS EN HUELLAS DACTILARES PARASISTEMAS EMBEBIDOS GNU/LINUX

printf("...fichero grabado \n");

printf("\n Fin del programa..."); free(imagen); /* Liberamos la memoria de

la imagen */ free(imagenOriginal); /* Liberamos la memoria de la imagen

original */ free(direcciones); /* Liberamos la memoria de las

direcciones */ printf(" ... y memoria liberada\n\n");

return 0;}

JOAQUÍN DIEGO REYES GONZÁLEZ - 121 -