Академический Документы
Профессиональный Документы
Культура Документы
(1,0)
(1,1)
(1, 1)
] (1)
El nivel de brillo, o valor de cada pixel, es cuantizado a cdigos
binarios enteros positivos. El nmero de niveles de cuantizacin est
determinado por la relacin (2).
L = 2
B
(2)
Donde B representa el nmero de bits necesarios para cada muestra.
Esto es, con 6 bits de cuantizacin en la intensidad se pueden
representar 64 niveles de gris (2
6
= 64).
Para tener una buena imagen de buena calidad para el ojo humano
es necesario tener como mnimo 64 niveles de gris(Gonzalez &
Woods, 2003). Para una apreciacin fina se usa una cuantizacin
estndar de 8 bits, esto es, 256 niveles de gris. A una imagen
cuantizada de esta manera se conoce como imagen en tonos de gris.
Una imagen binaria es una imagen monocromtica a 1 bits por pixel,
esto es, dos niveles, blanco o negro.
Como ya se dijo, el valor f, denotar el color, tono o nivel de gris de
un elemento de imagen (Pixel) en cierta coordenada (x, y). Un tono
muy claro (el ms claro), denotar una cantidad de luz alta (tono
blanco), mientras que un tono muy obscuro (el menos claro),
denotar una cantidad de luz baja (tono negro).
20
c) Pre-procesamiento
Por lo general, cuando se trabaja con imgenes se debe realizar una
etapa previa llamada pre-procesamiento, ya que hay que considerar
ciertos factores que podran afectar directamente en el xito o el
fracaso de nuestro sistema de reconocimiento.
Por otra parte, el tamao del iris generalmente varia en diferentes
imgenes debido a la contraccin o a la dilatacin del iris causada
por diferentes niveles de iluminacin; tambin que se pueden tener
diferentes distancias entre el ojo y la cmara, rotacin del ojo y otros
factores. Debido a todo esto, es necesario aplicar un procesamiento
a las imgenes antes de utilizarlas en las siguientes etapas del
proceso.
Estiramiento del histograma.- El mtodo de Estiramiento de
Histograma se aplica con la finalidad de mejorar el contraste de
las imgenes, es decir, obtener imgenes que no sean ni muy
oscuras ni muy claras, ya que el contraste representa la diferencia
entre niveles de gris claros y oscuros de una imagen. Al aplicar la
funcin de mejoramiento de contraste sobre una imagen con poco
contraste, la imagen resultante obtiene una mejora en la
apreciacin visual de la imagen, que se ve reflejada en una mayor
expansin de los valores a lo largo de todo el histograma. El
Histograma de una imagen digital con niveles de gris en el rango
[0, L-1] es una funcin discreta P=nr donde r representa un nivel
21
de gris y nr representa el nmero de pixeles que tienen ese valor
de gris. Al proceso de extender los valores de los pixeles a lo largo
del histograma se le cono como estiramiento del histograma.
En lafigura 7 se muestra las formas de contraste en una imagen,
la cual nos muestra el problema que pueden tener las imgenes
originales si no tienen un buen contraste.
Figura N 07: Histogramas que ejemplifican el problema de contraste en
una imagen
La expresin empleada en el mecanismo del estiramiento del
histograma se muestra en la expresin (3)
pixelSalida =
( 1)( )
( )
(3)
Dnde: L-1 es el nivel mximo permitido de un pixel y determinado
por el nmero de bits por pixel. L son los niveles de gris.
PixelEntrada es el tono de gris del pixel a modificar. PixelSalida es
el tono de gris del pixel modificado. NivelMax es el tono mximo
22
existente en la imagen de entrada. NivelMin es el tono mnimo
existente en la imagen de entrada.
El algoritmo que empleamos para la implementacin se muestra
en la figura 8.
Como se puede observar en la figura 4 el estiramiento del
histograma consiste en que a partir de la matriz de pixeles que
trae implcitamente la imagen se obtiene su histograma, el cual es
una representacin del nmero de pixeles que tienen un
determinado valor de 0 a 255, donde 0 representa el negro y 255
representa el blanco. Este primer resultado nos puede arrojar por
resultado una imagen muy clara o una imagen muy oscura. Aqu
es donde se aplica el mdulo de estiramiento de histograma, que
distribuye los pixeles en todo el rango de 0 a 255 para obtener una
imagen con un mejor contraste.
Figura N 08: Algoritmo para el estiramiento de histograma
23
Ecualizacin.- Este es otro mecanismo de pre-procesamiento que
al igual que el anterior va a generar la mejora del contraste de las
imgenes obtenidas de la Base de datos.
La ecualizacin permite adoptar el mismo nmero de muestras
para cada valor de pixel, y esto se logra a travs de la obtencin
del histograma de las imgenes a analizar. Consiste en encontrar
una transformacin en la cual el histograma tenga una
representacin uniforme, es decir, con la ecualizacin trataremos
de igualar lo ms posible el histograma de una imagen al
histograma ideal.
Considerando funciones de tipo contino y sea r la variable que
representa los niveles de gris de la imagen. Primeramente
asumimos que nuestro histograma ha sido normalizado en el
intervalo [0,1], donde r=0 representa el negro y r=1 el blanco.
Figura N 09: proceso de ecualizacin de histograma
24
Filtrado Espacial.- Este mtodo de pre-procesamiento de
imgenes se basa en la operacin de convolucin, utilizando una
mscara que consiste en una matriz cuadrada de dimensiones m x
n impares. De esta manera, se realiza la convolucin entre la
mscara y matriz de pixeles de la imagen que se est analizando.
Con este proceso se genera una nueva matriz con caractersticas
mejoradas que ayudaran a mejorar los resultados de los mdulos
posteriores como la segmentacin y la codificacin.
Es importante mencionar que dependiendo de los valores que se
coloquen en la mscara es el resultado que se va obtener a partir
de la convolucin, por ejemplo, se pueden detectar bordes
verticales, horizontales o diagonales u obtener los valores
promedio de la matriz, entre otros resultados. Esta mscara se
escoge a partir del resultado que deseamos obtener. El proceso
de convolucin se ejemplifica en la figura 10.
Figura N 10: Proceso de convolucin.
25
2.6.2 Segmentacin
La segmentacin es una etapa imprescindible en diversos procesos
de tratamiento de imgenes y se puede decir que es el proceso que
consiste en subdividir o particionar una imagen en sus regiones,
componentes, partes u objetos. Tambin puede ser definida como el
encontrar, por medio de un algoritmo numrico, sus regiones
homogneas y sus bordes. La segmentacin automtica de
imgenes es, en general, una de las tareas ms difciles de realizar
en el anlisis de imgenes debido a que tiene una influencia
determinante en el correcto desempeo del mecanismo de
reconocimiento. (Sossa, 2006)
Para llevar a cabo la segmentacin pueden usarse ndices visuales,
que son partes locales de un objeto, con significado y que pueden
ser detectados. Estos tiene significado porque se encuentran
asociados con algn elemento interesante de la escena al momento
de obtener la imagen del objeto y al ser detectables implica que debe
existir al menos un algoritmo para su localizacin, ya que de otra
manera dichos ndices visuales no seran tiles.
Para este proyecto, la segmentacin es la etapa donde se localiza la
imagen del iris. La etapa de segmentacin es muy importante ya que
si el iris nos es localizado correctamente las etapas posteriores
utilizaran datos errneos, por lo tanto el cdigo generado contendr
errores y el rendimiento de sistema ser muy bajo.
26
Existen diferentes mecanismos de segmentacin con distintos
niveles de dificultad, entre lo que podemos mencionar:
Umbralizacin.
Deteccin de Bordes
Deteccin de Regiones.
Clustering.
Segmentacin de Texturas.
Morfologa Matemtica.
Redes Neuronales.
A continuacin se describen algunos de estos mtodos:
Umbralizacin.- La forma ms sencilla de segmentar una
imagen es en el caso de que los distintos objetos se caractericen
por niveles de gris diferentes. Para ello se puede emplear el
histograma que indica el nmero de puntos en la imagen que
posee un determinado nivel de gris. La umbralizacin a partir de
histogramas consiste en elegir el punto de nivel de gris que
separa los valores correspondientes al objeto y al fondo. En este
mtodo, a partir del lbulo principal, es decir, del valor mximo,
se Adems del clculo de histogramas, existen otras tcnicas
para calcular el umbral, tales como como, el ajuste del lbulo
principal, mtodo de la mxima distancia, entropa y el algoritmo
Isodata.
27
Deteccin de Bordes.-Un borde en una imagen es un cambio
local significativo, normalmente asociado con una discontinuidad,
ya sea en la imagen de intensidad o la primera derivada de dicha
imagen (Sossa, 2006). La deteccin de bordes consiste
bsicamente en realizar la operacin de Convolucin
Bidimensional entre la matriz de pixeles de la imagen original y
ciertas mscaras previamente establecidas y posteriormente se
realiza el clculo del gradiente digital de la imagen, as como el
Angulo.
Para detectar los bordes, se calcula el modulo del gradiente obtenido
en cada pixel de la imagen. Como resultado, se ver que los valores
grandes corresponden a pixeles del borde, dado que un pixel
pertenece a un borde si se produce un cambio brusco entre niveles
de grises con sus vecinos. Este tipo de filtro es el recomendado, a
falta de informacin del tipo de ruido que afecta a una imagen. Esta
etapa de suavizado debe llevarse a cabo de manera gradual ya que
de realizarse de manera excesiva, se podran perder detalles
importantes de la imagen (y por consiguiente de la regin de iris) y de
gran importancia en este trabajo. Este suavizado se obtiene
promediando los valores de intensidad de los pixeles en el entorno
de vecindad con una mscara de convolucin de media cero y
desviacin estndar .
28
Sea f(x,y) una imagen corrompida con ruido y sea h(x,y) un filtro
gaussiano con media cero y desviacin estndar , determina el
tamao del filtro y es seleccionado con base en el nivel deseado de
detalle (bordes finos o gruesos) y en el nivel de ruido contenido en la
imagen, calculado mediante la ecuacin:
(, ) =
1
2
2
2
+
2
2
2
Mascaras de Sobel. La convolucin se realizar con las
siguientes mscaras de 3 x 3 en la direccin x y en la direccin y,
las cuales se muestran en las matrices 5 y 6.
=
... (5)
=
(6)
Mascaras de Prewitt. Es el mismo caso anterior, solo que las
mscaras 7 y 8.
= [
1 1 1
0 0 0
1 1 1
] (7)
= [
1 0 1
1 0 1
1 0 1
](8)
Laplaciano. En este caso se utiliza la misma mascara para las
componentes X y para las componentes Y, mostrada en la matriz
(9).
29
, = [
0 1 0
1 4 1
0 1 0
](9)
Segmentacin de Texturas. Se puede decir que una
caracterstica de textura de una imagen es un valor que
cuantifica alguna caracterstica de la variacin de la variacin del
nivel gris del objeto a segmentar en base a una disposicin
geomtrica especfica. Para segmentar una imagen de textura
buscamos una caracterstica que defina la textura, que tendr
valores diferentes en cada una de las texturas de la imagen. De
esta forma, calculamos una imagen nueva, en la que el valor en
cada pixel corresponde al valor del parmetro en ese punto.
Existen dos tipos de mtodos para el anlisis de texturas:
Estadsticos. Basados en el histograma a partir de la media, la
desviacin o varianza de los niveles de gris. Tambin se utiliza la
matriz de co-ocurrencia, que mide la probabilidad de que dos
pixeles a una distancia determinada tengan el mismo valor.
Espectrales. Basados en el clculo de la transformada de
Fourier.
30
2.7 FUNCIONES PARTICULARES.
En algunos puntos del desarrollo, se necesita el uso de alguna funcionalidad
los cuales se detallan a continuacin:
2.7.1 Detector circular de Hough.
La transformada de Hough es un algoritmo estndar en la visin por
computador, usado para determinar los parmetros espaciales de
objetos de diversa forma que estn incluidos dentro de una imagen
(Wikipedia, Hough_transform). Esta transformada se puede utilizar
para detectar automticamente las coordenadas y el radio del iris y
de la pupila.
El proceso bsico de detector de Hough empieza partiendo de la
imagen completa del ojo, sobre la que se aplica inicialmente algn
algoritmo de deteccin de contornos, como por ejemplo el detector
de Canny (Wikipedia, Canny_edge_detector). La figura 11 muestra
un ejemplo de la capacidad de este detector.
Figura N 11: Detector de contornos Canny
31
A partir de la imagen de contornos, se procede a crear el llamado
espacio de Hough, que contiene crculos que pasan sobre cada
punto de contorno (figura 12). Estos crculos se definen con la
ecuacin general:
x
2
+ y
2
r
2
=0
Siendo x e y las coordenadas del centro de circulo, y r el radio. Una
vez creados todos los crculos posibles, el mximo dentro del espacio
de Hough proporciona el crculo mejor definido.
Figura N 12: Cada punto de contorno (Izq.) en la imagen real sirve de centro
para un crculo creado en el espacio de Hough (Der)
2.7.2 Transformada de Gabor
La aplicacin de wavelets de Gabor es el tratamiento matemtico que
se le dar a la informacin de iris para convertirla en plantilla
biomtrica. Este mtodo es el elegido por Daugman en su
implementacin (J.Daugman, 2004).
32
Para aplicar este mtodo, se debe partir de la informacin del iris en
su forma normalizada. Un iris normalizado forma una matriz 2D como
se muestra en la figura 13.
Figura N 13: Resultado de normalizacin de un iris. A la derecha, la matriz
2Dresultante
Una vez normalizado el iris, el siguiente paso consiste en aplicar
wavelets Gabor. Estos wavelets estn formados por dos
componentes:
Una onda sinusoidal compleja definida por la ecuacin:
(, ) =
(2(
0
+
0
)+)
Donde
0
, , , ) = {
1 (
) (, )
0
2
L. Masek, Recognition of human iris patterns for biometric identification, Masters thesis, School of
Computer Science and Software Engineering, University of Western Australia, 2003
52
Una vez calculados los bordes, se crea un espacio discretizado
tridimensional H que va a acumular los votos para cada uno de los
tres parmetros (
, , , )
(
)
Finalmente, los parmetros
, )
(
, )
En forma similar, la transformada de hough se puede modificar
fcilmente para detectar parbolas en vez de crculos, con el fin de
segmentar los parpados.
Sin embargo, este mtodo presenta algunos problemas:
1.- El resultado de la transformada de Hough est condicionado por
los parmetros del algoritmo de deteccin de bordes. En el caso de
las imgenes del iris, es necesario ajustar los parmetros de este
algoritmo de forma tal que los crculos de la pupila y el iris se
encuentren bien marcados en la imagen resultante.
2.- Dichos parmetros son poco flexibles: si existe una modificacin
en las condiciones de captura, el detector de bordes puede dar
muchos falsos positivos. Con parmetros incorrectos es normal que
la imagen resultante o bien no contenga ningn borde til, o bien,
ms comnmente, que se encuentren demasiados bordes en la
53
imagen. Esto ltimo es producto de la naturaleza misma del iris, que
tiene patrones complicados que pueden aparecer en el algoritmo de
deteccin de bordes.
3.- El tiempo de procesamiento del algoritmo es directamente
proporcional a la cantidad de puntos de borde detectados en la
imagen. Si la imagen tiene muchos bordes, como suelen aparecer en
las pestaas y los parpados cuando la imagen est bien enfocada, el
algoritmo resulta muy lento.
4.- una imagen con demasiados bordes ocasiona tanto una
degradacin en el tiempo de ejecucin de la transformada de Hough
como en el resultado de la misma (es posible que se encuentren
crculos que en realidad no existen, por lo que es necesario recurrir
a heursticas que permitan comprobar si un circulo detectado
realmente se corresponde con la pupila o el iris).
b) Segmentacin de la pupila
La pupila se distingue fcilmente en la imagen como un crculo
negro, en la figura 22, las imgenes c y d corresponden al mismo ojo.
Se puede ver como varia el tamao de ojo en funcin de la distancia
a la cmara, y el dimetro de la pupila por motivos naturales.
54
Figura N 22: Capturas tpicas del iris humano
En la figura 23: (a) Extraccin de un aro de la imagen, se puede ver
en amarillo de un aro de la imagen a extraer, rodeando el crculo de
la pupila (en rojo).
(b): efecto de considerar a la pupila como un crculo: en algunos
casos, la pupila no es perfectamente circular, por lo que al utilizar un
modelo circular de segmentacin algunas partes de la pupila son
consideradas parte del iris
(a) (b)
Figura N 23: Segmentacin de la pupila
55
c) Segmentacin del iris
Una vez localizada la pupila, el iris es relativamente fcil de ubicar ya
que es casi concntrico al crculo de la pupila (aunque este ltimo
suele poseer una desviacin hacia el lado de la nariz respecto al
crculo del iris).
4.2.3 OBTENCIN DEL IRIS
a) Extraccin de la zona de inters
El objetivo principal de este mdulo es localizar exactamente la
situacin del iris, el cual el detalle del proceso a seguir es:
Carga y redimensin
El proceso comienza cargando la imagen indicada por el usuario. A
continuacin, se redimensiona la imagen a un tamao del 25% de
original. Esta reduccin de tamao, de 320x280 a 80x70, es til para
aumentar el rendimiento del detector circular de Hough.
Figura N 24: Redimensin de la Imagen
Tratamiento previo a la deteccin de contornos. (Figura 25)
56
El primer paso consiste en aplicar un suavizado Gaussiano a la
imagen, con el fin de eliminar los bordes e irregularidades menores y
mantener nicamente los contornos fuertes.
El segundo paso consiste en hacer una correccin del contraste, una
prctica comn en el tratamiento de imgenes, que nos sirve para
corregir en la medida de lo posible una iluminacin irregular.
Figura N 25: Imagen Original (Izq), Imagen con tratamiento previo (Der)
Deteccin de contornos
Despus del tratamiento previo, ya se puede aplicar un algoritmo que
nos proporcione la imagen de contornos. Por los resultados y el
rendimiento, se decide aplicar el mtodo de Canny Edge para
resaltar los contornos.
57
Figura N 26: Imagen de contornos resultante de la aplicacin de Canny Edge
Deteccin de la regin de iris mediante Hough
La imagen de contornos se pasa como parmetro a la funcin
detector de Hough. Esta funcin localiza el iris dentro de la imagen y
retorna sus coordenadas espaciales: centro y radio.
Extraer la regin del iris
Una vez localizado el iris, el siguiente paso es localizar la pupila.
Para ello resulta necesario volver a aplicar el detector de Hough,
pero con la ventaja de que esta vez no se aplica sobre toda la
imagen sino sobre la regin del iris que justo se ha encontrado en la
figura 27, ya que aprovechamos el hecho de saber que la pupila est
incluida en esa zona.
Figura N 27: Regin de la pupila obtenida a partir de la regin del iris
58
Histograma
El histograma de una imagen es la representacin de cmo se
reparten los niveles de intensidad en una imagen. Es una
herramienta que se puede utilizar para ayudar al detector circular de
Hough en el momento de localizar la pupila.
En la figura 28 se muestra un ejemplo de aplicacin del histograma.
Figura N 28: Imagen original (Izq.), su histograma (centro) y la deteccin Canny
(der.)
La regin de iris se pasa como parmetro a la funcin que realiza el
histograma, que retornara el valor ideal para determinar el centro de
iris que es lo mismo que hallar el centro de la pupila ya son crculos
concntricos.
Por medio de un histograma, se puede determinar con bastante
exactitud la regin de la pupila.
Deteccin de contornos y deteccin de la regin de la pupila
mediante Hough
Estos pasos son exactamente iguales que los seguidos para detectar
la regin del iris.
59
Localizar prpados
En el siguiente paso, se debe analizar la regin de iris en busca de
zonas que estn ocluidas por los parpados. Estas zonas se deben
marcar como ruido figura 29 ya que es informacin no valida de cara
a la codificacin. Para ello, utilizamos funciones (localizar prpados
superior e inferior), que forman el detector de prpados.
Los resultados de la implementacin de esta funcin se pueden
apreciar en la siguiente figura.
Figura N 29: Zona ocluida por los parpados marcados como ruido
La idea bsica es utilizar un sistema muy parecido al detector circular
de Hough, con la diferencia de que no buscamos detectar crculos, si
no lneas, correspondientes a los prpados superior e inferior.
60
Figura N 30: Imagen original (izq.) lnea detectada (centro) lnea de interseccin (Der.)
Marcar pestaas y reflejos como ruido
El siguiente tratamiento que se le da a la imagen es el de eliminar los
elementos menores de ruido, tales como las pestaas y las
reflexiones especulares causadas, por ejemplo, por el flash de una
cmara. Esto se consigue aplicando una funcin que, dado una
umbral, marca a 0 (ruido) los pixeles que sobrepasen o que no
lleguen a un valor determinado de iluminacin (en un rango de 0-
255).
Para pestaas pixeles valor < 90
Para reflejos Pixeles valor > 240
En el caso de las pestaas, cabe destacar que resulta imposible
eliminar todo el ruido (marcar toda la pestaa como ruido), ya que si
bien es sencillo eliminar la parte ms gruesa (figura 31), la parte del
extremo tiende a ser tan fina que se pierde entre el resto de
irregularidades del iris.
61
Figura N 31: Detalle de pestaas marcadas como ruido. Imagen original
(Izq.) imagen ruido (Der.)
Se han invertido los colores para que resulte ms sencillo comprobar la
existencia de ruido eliminado.
4.3 RECONOCIMIENTO (Codificacin y matching)
La codificacin del iris es el proceso por el cual se analiza la textura del iris y
se extrae informacin, mientras que el matching es la comparacin de la
informacin extrada con el fin de tomar una decisin acerca de la identidad
del usuario.
4.3.1 METODOS DE CODIFICACIN Y MATCHING EXISTENTES
La codificacin debe ser capaz de extraer aquella informacin del iris
que permita discriminar una persona de otra. El resultado de la
codificacin es por lo general un vector de caractersticas o feactures
que describen la textura del iris. Dicho vector debe poder ser
comparado contra otros vectores generados a partir de otros iris o del
mismo iris. En la literatura existen muchos mtodos propuestos para
62
extraer caractersticas del iris, y cada uno de estos mtodos tiene
asociado un mtodo de matching.
La codificacin de iris es probablemente el rea que ms se ha
estudiado y sobre el que existen mayor cantidad de trabajos. Entre
todos los mtodos existentes, los ms comunes y aquellos en los que
se han obtenido mejores resultados son los que utilizan filtros de
Gabor o Log-Gabor y los que utilizan wavelets para codificar la
textura de iris. A continuacin se explicara de los mtodos ms
utilizados y los ms interesantes desde el punto de vista de la
originalidad y eficacia.
a) Filtros de Gabor
En su sistema original, Daugman utilizo los filtros de Gabor
bidimensionales como mtodo de codificacin del iris. Los filtros de
Gabor son un tipo de filtro pasabanda (filtro que deja pasar un
determinado rango de frecuencias de una seal) que determina el
rango de frecuencias utilizando una funcin gaussiana. Estos filtros
surgen del anlisis del funcionamiento de las neuronas en la corteza
visual primaria. Dichas neuronas reaccionan detectando la
orientacin de los objetos.
En dominio de las frecuencias, el filtro de Gabor
(, ) se define
como una funcin Gaussiana:
(, ) = exp ,((
0
)
2
2
+(
0
)
2
2
)-
63
Donde (
0,
0
) representa la modulacin (es decir, el punto donde la
respuesta del filtro es maxima) y y representan la desviacin de
la funcin Gaussiana bidimensional (el cociente define la
relacin de aspecto de filtro). En el dominio espacial, el filtro de
Gabor centrado en el origen est dado por:
(, ) =
1
{
} = exp ( (
2
+
2
))exp (2(
0
+
0
))
El filtro resultante es entonces una onda sinusoide compleja (llamada
carrier) modulada por una funcin Gaussiana (llamada envolvente).
La frecuencia espacial del filtro es
0
=
0
2
+
0
2
y su orientacin es
0
= arctan (
0
0
), mientras que el ancho de banda est dado por el
radio de la Gaussiana (definido por y ).
Este filtro se puede separar en dos componentes, una real y una
compleja:
(, ) =
,
(, ). cos(2(
0
+
0
))
(, ) =
,
(, ). cos (2(
0
+
0
))
Siendo
,
(, ) = exp( .
2
+
2
/) el envolvente Gaussiano. Este
par de filtros estn en cuadratura, lo que quiere decir que tienen la
misma amplitud pero estn desfasados 90
0
. El filtro
se denomina
filtro simtrico par y
,,-
=
*,+
(, ) exp((
0
))
. exp ((
(
0
)
2
2
+
(
0
)
2
2
))
3
Una wavelet de Gabor es una familia de wavelets que utiliza la funcin de Gabor descripta como una funcin
madre e incluye translaciones y cambios de tamao.
66
El cdigo resultante es el conjunto de bits obtenidos al aplicar este
procedimiento a varios puntos con varias wavelets en distintas
escalas y frecuencias, obteniendo un total de 2048 bits.
Ademas del cdigo de iris, se genera una matriz binaria que marca
aquellos puntos que fueron afectados por ruidos provenientes de las
pestaas o los prpados y que por lo tanto no pertenecen al iris. Esta
matriz funcionara como mascara en la etapa de matching.
Matching
El matching consiste en comparar dos cdigos de iris y decidir si
ambos fueron generados por el mismo iris o no. En el sistema
descripto por Daugman, cada cdigo de iris es una matriz binaria que
tambin tiene asociada una mscara de ruido que marca aquellos
bits que fueron afectados por las pestaas y/o parpados. Para
comparar dos cdigos, se calcula la distancia de Hamming entre
ambos cdigos, C1 y C2, teniendo en cuenta sus respectivas
mscaras, M1 y M2:
(
1
,
1
,
2
,
2
) =
(
1
2
) (
1
2
)
1
2
Donde es el operador binario XOR y es el operador binario AND,
y . representa la norma 1.
Esencialmente, la distancia de Hamming mide la cantidad de bits en
ambos cdigos que son desiguales entre s. Este valor es
67
normalizado por la cantidad de bits validos en ambos cdigos
(definidos por la interseccin entre ambas mscaras), lo que da
como resultado un nmero entre 0 y 1. Mientras ms parecido sean
los cdigos de iris, la cantidad de bits distintos ser cada vez menor
y por lo tanto la distancia de Hamming ser cercana a 0.
Esta mtrica permitir tomar una decisin acerca de la identidad de
la persona.
4.3.2 IMPLEMENTACIN
A continuacin se har una descripcin detallada:
a) Normalizacin
Previo a la codificacin, se extrae la textura del iris en una nueva
imagen rectangular de dimensiones fijas. Cada punto de iris puede
ser referenciado, independientemente del tamao, con un par de
coordenadas pseudo-polares (r,), donde r [0,1] representa la
distancia del punto al contorno de la pupila y ,0 2- el ngulo
respecto al centro del iris. Este proceso se puede ver en la figura33.
Figura N 33: Esquema de la normalizacin del iris
68
De la figura 33, luego de ser segmentado, la textura del iris se
transforma en una imagen rectangular de dimensiones fijas. Se
puede ver en la imagen rectangular las regiones afectadas por los
parpados y el reflejo del iluminador infrarrojo.
Cada fila de la nueva imagen representa un anillo del iris y cada
columna un ngulo en el anillo. Como la nueva imagen tiene
dimensiones constantes, esto permitir que todos los iris sean
representados con un tamao fijo, de manera que el sistema sea
invariante frente a cambios en el dimetro de la pupila o del iris. Este
modelo para representar el iris se conoce en la literatura como
modelo rubber sheet, o lamina de goma, ya que el proceso equivale
a extraer la textura del iris y deformarla para que quede rectangular.
Adems, para cada punto en la imagen normalizada, se genera una
mscara de ruido que marca aquellos puntos que fueron afectados
por los parpados (figura34).
Figura N 34: Textura normalizada y mscara de ruido
De la figura 34, las partes negras representan los puntos que fueron
afectados por los parpados.
69
b) Codificacin
Para codificar la textura normalizada del iris se utilizan los filtros de
Log-Gabor unidimensionales. Cada fila de la textura normalizada es
filtrada con un conjunto de filtros de Log-Gabor diseados para tener
una buena cobertura del espacio de frecuencias (figuras 35 y 36).
Para cada punto en la imagen, la respuesta de dicho punto al filtro es
un punto complejo, donde la parte real se corresponde con la
respuesta al filtro simtrico par y la parte compleja se corresponde
con la respuesta al filtro simtrico impar (figura 36). Se codifica
nicamente la fase de la respuesta, ya que, como se mencion, la
amplitud no aporta mucha informacin y es inestable frente a
cambios de iluminacin. En valor de la fase se cuantiza a uno de
cuatro de cuatro posibles valores, correspondientes al cuadrante de
la fase, por lo que la respuesta de cada punto a cada filtro se codifica
con dos bits. La figura 38 muestra este proceso.
La ventaja de este mtodo es que si, por efecto del ruido, la fase se
desplaza de cuadrante en dos imgenes del mismo iris, nicamente
cambiara un bit del cdigo, hacindolo ms resistente frente al ruido
(es necesario un cambio de fase de casi 180
0
para cambiar los dos
bits del cdigo correspondiente a ese punto).
El resultado de este procedimiento son dos matrices de valores
binarios, donde cada fila de una matriz representa la codificacin de
una fila de la textura del iris.
70
Figura N 35: extraccin de seales unidimensionales de la textura del iris.
De la figura 35, cada fila es un vector de valores que ser filtrado y
codificado por separado.
Figura N 36: Proceso de codificacin
De la figura 36, (a): seal de entrada (una lnea de la textura del iris),
(b) y (c): filtro simtrico para e impar, respectivamente, (d): respuesta
de la seal al filtro simtrico par (corresponde a la parte real de la
respuesta), (e): respuesta de la seal al filtro simtrico impar
(corresponde a la parte compleja de la respuesta).
71
Figura N 37: Posicin de fase
De la figura 37: el argumento (fase) de p cae en el primer cuadrante,
por lo cual el valor de p se codifica como 11.
c) Matching
Para comparar dos cdigos de iris se utiliza la distancia de Hamming.
La ventaja principal de este mtodo es que es sumamente rpido, ya
que se pueden empaquetar varios bits del cdigo en una palabra
del procesador y realizar comparaciones en paralelo (por ejemplo, en
un procesador comn de 32 bits, se pueden realizar 32
comparaciones por ciclo de reloj).
Como mtrica, la distancia de Hamming permitir establecer que
tanto se parecen dos cdigos de iris. Al haber tantas variables en el
proceso previo a la codificacin (pequeas diferencias en la
segmentacin, variables de captura como iluminacin, reflejos,
distancia a la cmara, ruido electrnico en la cmara, etc) es de
72
esperar que dos cdigos generados a partir del mismo iris no sean
exactamente iguales, lo que dara como resultado una distancia de 0.
El resultado de la comparacin dar un valor que permitir realizar
una decisin acerca de si los dos cdigos fueron generados a partir
del mismo iris o no.
73
CONCLUSIONES
Para el tratamiento de la imagen fue necesario trabajar solo en escala de
Grises, dado que una imagen fue representada por medio de una matriz de
m x n elementos, lo cual fue ms fcil trabajar en una sola matriz que hacer
el tratamiento en colores RGB,que en ese caso se tendra que trabajar con
tres matrices.
Para la segmentacin de una imagen y a su vez encontrar los parmetros
que determinaran la ubicacin, la forma y el tamao del iris dentro de la
imagen, la transformada de Hough fue un algoritmo que resulto til para
localizar figuras que se asemejan a una circunferencia detectando
automticamente los parmetros de la figura.
Para la obtencin del iris fue necesario trabajar con una imagen
segmentada y estndar, al cual se aplico el algoritmo de Canny Edge para
resaltar los contornos y este a su vez ser aplicada la funcin detector de
Hough, esta funcin localizo el iris dentro de la imagen y retorno sus
coordenadas espaciales: centro y radio, la ventaja de esta funcin es que
no se aplica sobre toda la imagen sino sobre la regin del iris, a pesar que
las imgenes tratadas presenten ciertos inconvenientes como reflejos
especulares, o cierta zonas con partes del parpado o las pestaas , el
algoritmo permitio eliminar dichos pixeles de manera que la identificacin es
exacta.
74
Para el reconocimiento de iris se tuvo que realizar la codificacin del iris en
binario y para realizar la comparacin de dos cdigos de iris se utiliza la
distancia de Hamming que es un algoritmo muy utilizado en otras reas
como criptografa, es un algoritmo de investigacin constante, el
reconocimiento del iris, es uno de los mtodos menos intrusitos, el ms
efectivo, pero a su vez uno de los ms caros de implantar, los equipos para
la captura de imgenes aun poseen precios no accesibles a la gran
mayora.
Se demuestra la eficacia, que al obtener la imagen de las 10 personas no
tuvimos ningn problema en reconocerlas a las imgenes originales, esto
nos indica que as podemos evitar toda clase der suplantaciones en
cualquier tipo de examen para la seguridad del caso que lo requiera,100%
eficaz.
75
RECOMENDACIONES Y SUGERENCIAS
Se recomienda utilizar estos sistemas biomtricos para solucionar
problemas como: La suplantacin en los exmenes de admisin,control de
asistencia, as como en otros sistemas en los cuales sea necesario
identificar a las personas unvocamente, garantizando la transparencia y
veracidad en los procesos.
Se sugiere realizar una extensin del presente trabajo de investigacin,
considerando el uso de tecnologas actuales, como la captura de la imagen
mediante cmaras web, dando iniciativa para propagar el uso de software
basado en el reconocimiento de patrones fsicos.
Se recomienda a los estudiantes en realizar investigaciones y desarrollo de
aplicaciones en temas de visin artificial, para la identificacin de males en
el campo de la medicina, reconocimiento de personas, identificacin de
vehculos motorizados entre otros, esto debido a que en algunas partes del
mundo ya se hace uso de estos medios.
Es recomendable utilizar este trabajo como un medio de consulta, sin seguir
fielmente los pasos utilizados o la metodologa aplicada en este trabajo,
considerando que este trabajo no pretende ser un trabajo de investigacin
final, sino un incentivo para desarrollar investigaciones en este sub campo
de la Inteligencia Artificial.
76
BIBLIOGRAFIA
REFERENCIAS BIBLIOGRAFCAS
Akay, M. (1998). Time Frequency and Wavelets in Biomedical Signal Processing
(Book style). Piscataway: NJ: IEEE Press.
Daugman, J. (2000). Biometric decision landscapes Techinical Report No. TR482.
University of cambridge Computer Laboratory.
Daugman, J. (2006). Probing the uniqueness and randomness of IrisCodes:
Results from 200 Billion iris pair comparisons. Proceedings of the IEEE.
Gonzalez, R., & Woods, R. (2003). Digital Image Processing.Prentice hall.
Jain, S.; Ross, A.& Prabhakar, A. (Janury 2004). An Introducction to Biometric
Recognition.IEEE.
Sanchez, R. (2000). El iris ocular como parametro para la Identificacion
Biometrica. Espaa: Universidad Politecnica de Madrid.
Sossa, J. (2006). Rasgos Descriptores para el Reconocimiento de Objetos.Mexico:
Centro de Investigacion en Computacion.
Wildes, R. (1997). Iris recognition: an emerging biometric technology proceedings
of the IEEE.
Zhu, Y., Tan, T., & Wang, Y. (2000). Biometric personal identification based on iris
patterns Proceeding of the 15th International Conference on Pattern
Recognition.Spain.
WEBGRAFIA
Homini. (s.f.). Plaforma Biometrica. Recuperado el 03 de Enero de 2013, de
http://www.homini.com/new_page_5.htm
J.Daugman. (2004). How Iris Recognition Works. Recuperado el 12 de Noviembre
de 2012, de http://www.cl.cam.ac.uk/users/jgd1000/csvt.pdf
77
Wikipedia. (s.f.). Canny_edge_detector. Recuperado el 12 de Diciembre de 2012,
de http://en.wikipedia.org/wiki/Canny_edge_detector
Wikipedia. (s.f.). Gabor_filter. Recuperado el 15 de Setiembre de 2012, de
http://en.wikipedia.org/wiki/Gabor_filter
Wikipedia. (s.f.). Hough_transform. Recuperado el 2013 de Marzo de 27, de
http://en.wikipedia.org/wiki/Hough_transform
Wikipedia, L. e. (19 de Setiembre de 2012). Biometria. Recuperado el 17 de
Octubre de 2012, de http://es.wikipedia.org/wiki/Reconocimiento_de_iris
TESIS
Baldo Romero Paulina y Garcia Molina Josue (2007). Autentificacin Biomtrica
de Personas por medio de Reconocimiento del Iris. Tesis para Optar el
Ttulo de Ingeniero en comunicaciones y Electrnica. Mxico. Instituto
Politcnico Nacional de Mxico.
Cayo Cabrera Guido Humberto (2005). Prototipo neurogenetico aplicado en el
reconocimiento de imgenes bidimensionales estticas: Rostros, Cdigo de
Barras y Firmas. Tesis de Maestra en Informtica. Puno Per.
Universidad Nacional del Altiplano.
78
ANEXOS
RESULTADOS DEL PROTOTIPO
RESULTADOS DE LA PRUEBA
1. Salida de imagines Segmentada:
Figure 1: 001_1_1.bmp
Figure 2: 001_1_3.bmp
Figure 3: Img_2_1_1.jpg
79
Figure 4: Img_2_1_2.jpg
2. Salida Imgenes normalizadas
Figure 5: 001_1_1.bmp
Figure 6: 001_1_3.bmp
Figure 5: Img_2_1_1.jpg
80
Figure 6: Img_2_1_2.jpg
3. Ruido de las Imgenes de Salida
Figure 9: 001_1_1.bmp
Figure 10: 001_1_3.bmp
Figure 11: Img_2_1_1.jpg
81
Figure 12: Img_2_1_2.jpg
4. Salida Polar de Imagenes con Ruido
Figure 13: 001_1_1.bmp
Figure 14: 001_1_3.bmp
Figure 15: Img_2_1_1.jpg
82
Figure 16: Img_2_1_2.jpg
La Tabla 1 muestra la distancia de Hamming calculada para las cuatro pruebas
realizadas.
Si la distancia de Hamming calculada es menor que una distancia de
Hamming preestablecido (Es 0.4 para las pruebas llevadas a cabo), las
imgenes se dice que son relacionados; ms las imgenes son diferentes.
N de
Prueba
entrada 1 entrada 2
Distancia de
Hamming
Match
Found/No
Match Found
1. 001_1_1.bmp 001_1_3.bmp 0.2647
Match
Found
2. Img_2_1_1.jpg Img_2_1_2.jpg 0.1506
Match
Found
3. 001_1_1.bmp 001_1_1.bmp 0
Match
Found
4. 001_1_1.bmp Img_2_1_1.jpg 0.4454
No Match
Found
Tabla 1: Calculo de distancia Hamming para4 pares de entradas de prueba
83
CODIGO FUENTE
%
% ADDCIRCLE
% Argumento:
% h - 2D acumulador array.
% c - [x,y] coordenadas del centro de circulo.
% radius radio del circulo
% weight peso opcional de valores que se aade al
% acumulador array (por defecto es 1)
%
% Retorno: h actualizar el acumulador array.
function h = addcircle(h, c, radius, weight)
[hr, hc] = size(h);
if nargin == 3
weight = 1;
end
if any(c-fix(c))
error('Punto central del crculo debe estar en coordenadas enteras');
end
if radius-fix(radius)
error('Radio debe ser un entero);
end
x = 0:fix(radius/sqrt(2));
costheta = sqrt(1 - (x.^2 / radius^2));
y = round(radius*costheta);
px = c(2) + [x y y x -x -y -y -x];
py = c(1) + [y x -x -y -y -x x y];
validx = px>=1 & px<=hr;
validy = py>=1 & py<=hc;
valid = find(validx & validy);
px = px(valid);
py = py(valid);
ind = px+(py-1)*hr;
h(ind) = h(ind) + weight;
84
% ADJGAMMA
%
% funcion g = adjgamma(im, g)
%
% Argumentos:
% im - imagen a ser procesado.
% g - imagen valor gamma.
% Valores en el rango 0-1 mejora el contraste del brillo
% regiones, valores > 1 mejora el contraste en la oscuridad
% regiones.
function newim = adjgamma(im, g)
if g <= 0
error('Valor Gamma debe ser > 0');
end
if isa(im,'uint8');
newim = double(im);
else
newim = im;
end
newim = newim-min(min(newim));
newim = newim./max(max(newim));
newim = newim.^(1/g);
85
% CANNY
%
% Argumentos: im - imagen a ser procesado
% sigma - desviacin estndar de filtro deGauss suavizado
% (tpicamente 1)
% scaling - para reducir el factor de imagen de entrada mediante
% vert - ponderacin de los gradientes verticales
% horz - ponderacin de los gradientes horizontales
%
% Returns: gradient - imagen resistencia del borde (gradiente de amplitud)
% or - orientacin de la imagen (en grados 0-180, positivo
% en sentido antihorario)
%
function [gradient, or] = canny(im, sigma, scaling, vert, horz)
xscaling = vert;
yscaling = horz;
hsize = [6*sigma+1, 6*sigma+1];
gaussian = fspecial('gaussian',hsize,sigma);
im = filter2(gaussian,im);
im = imresize(im, scaling);
[rows, cols] = size(im);
h = [ im(:,2:cols) zeros(rows,1) ] - [ zeros(rows,1) im(:,1:cols-1) ];
v = [ im(2:rows,:); zeros(1,cols) ] - [ zeros(1,cols); im(1:rows-1,:) ];
d1 = [ im(2:rows,2:cols) zeros(rows-1,1); zeros(1,cols) ] - ...
[ zeros(1,cols); zeros(rows-1,1) im(1:rows-
1,1:cols-1) ];
d2 = [ zeros(1,cols); im(1:rows-1,2:cols) zeros(rows-1,1); ] - ...
[ zeros(rows-1,1) im(2:rows,1:cols-1);
zeros(1,cols) ];
X = ( h + (d1 + d2)/2.0 ) * xscaling;
Y = ( v + (d1 - d2)/2.0 ) * yscaling;
gradient = sqrt(X.*X + Y.*Y);
or = atan2(-Y, X);
neg = or<0;
or = or.*~neg + (or+pi).*neg;
or = or*180/pi;
86
% circlecoords
% Argumentos:
% c - una matriz que contiene las coordenadas del centro del crculo
% [x,y]
% r - el radio del crculo
% imgsize - tamao de la matriz en la imagen para trazar coordenadas en
% nsides - el crculo es en realidad aproximar por un polgono, este
% argumento da el nmero de lados utilizadas en esta aproximacin
defecto
% es 600.
%
% Output:
% x - una matriz que contiene las coordenadas x de los lmites del crculo
% puntos
% y - una matriz que contiene las coordenadas de los lmites y crculo
% puntos
function [x,y] = circlecoords(c, r, imgsize,nsides)
if nargin == 3
nsides = 600;
end
nsides = round(nsides);
a = [0:pi/nsides:2*pi];
xd = (double(r)*cos(a)+ double(c(1)) );
yd = (double(r)*sin(a)+ double(c(2)) );
xd = round(xd);
yd = round(yd);
xd2 = xd;
coords = find(xd>imgsize(2));
xd2(coords) = imgsize(2);
coords = find(xd<=0);
xd2(coords) = 1;
yd2 = yd;
coords = find(yd>imgsize(1));
yd2(coords) = imgsize(1);
coords = find(yd<=0);
yd2(coords) = 1;
x = int32(xd2);
y = int32(yd2);
87
% createiristemplate
% Argumentos:
% eyeimage_filename - el nombre del archivo de la imagen del iris
%
function [template, mask] = createiristemplate(eyeimage_filename)
global DIAGPATH
DIAGPATH = 'diagnostics\';
radial_res = 40;
angular_res = 240;
minWaveLength=18;
mult=1;
sigmaOnf=0.5;
eyeimage = imread(eyeimage_filename);
savefile = [eyeimage_filename,'-houghpara.mat'];
[stat,mess]=fileattrib(savefile);
[circleiris circlepupil imagewithnoise] = segmentiris(eyeimage);
save(savefile,'circleiris','circlepupil','imagewithnoise');
imagewithnoise2 = uint8(imagewithnoise);
imagewithcircles = uint8(eyeimage);
[x,y] = circlecoords([circleiris(2),circleiris(1)],circleiris(3),size(eyeimage));
ind2 = sub2ind(size(eyeimage),double(y),double(x));
[xp,yp]=circlecoords([circlepupil(2),circlepupil(1)],circlepupil(3),size(eyeimage
));
ind1 = sub2ind(size(eyeimage),double(yp),double(xp));
imagewithnoise2(ind2) = 255;
imagewithnoise2(ind1) = 255;
imagewithcircles(ind2) = 255;
imagewithcircles(ind1) = 255;
w = cd;
cd(DIAGPATH);
imwrite(imagewithnoise2,[eyeimage_filename,'-noise.jpg'],'jpg');
imwrite(imagewithcircles,[eyeimage_filename,'-segmented.jpg'],'jpg');
cd(w);
[polar_array noise_array] = normaliseiris(imagewithnoise, circleiris(2),...
circleiris(1), circleiris(3), circlepupil(2), circlepupil(1),
circlepupil(3),eyeimage_filename, radial_res, angular_res);
w = cd;
cd(DIAGPATH);
imwrite(polar_array,[eyeimage_filename,'-polar.jpg'],'jpg');
imwrite(noise_array,[eyeimage_filename,'-polarnoise.jpg'],'jpg');
cd(w);
[template mask] = encode(polar_array, noise_array, nscales, minWaveLength, mult,
sigmaOnf);
88
% encode
% Argumentos:
% polar_array - regin iris normalizada
% noise_array - correspondiente region de mapa de ruido normalizado
% nscales - nmero de filtros para usar en la codificacin
% minWaveLength - base de longitud de onda
% mult - factor de multicative entre cada filtro
% sigmaOnf - parmetro de ancho de banda
%
% Output:
% template - plantilla biomtrico binario del iris
% mask - la mscara de ruido iris binario
function [template, mask] = encode(polar_array,noise_array, nscales,
minWaveLength, mult, sigmaOnf)
[E0 filtersum] = gaborconvolve(polar_array, nscales, minWaveLength, mult,
sigmaOnf);
length = size(polar_array,2)*2*nscales;
template = zeros(size(polar_array,1), length);
length2 = size(polar_array,2);
h = 1:size(polar_array,1);
%crear la plantilla del iris
mask = zeros(size(template));
for k=1:nscales
E1 = E0{k};
H1 = real(E1) > 0;
H2 = imag(E1) > 0;
H3 = abs(E1) < 0.0001;
for i=0:(length2-1)
ja = double(2*nscales*(i));
template(h,ja+(2*k)-1) = H1(h, i+1);
template(h,ja+(2*k)) = H2(h,i+1);
mask(h,ja+(2*k)-1) = noise_array(h, i+1) | H3(h, i+1);
mask(h,ja+(2*k)) = noise_array(h, i+1) | H3(h, i+1);
end
end
89
% findcircle
%
% Arguments:
% image - la imagen encontrar los crculos
% lradius - radio inferior para buscar
% uradius - radio superior para buscar
% scaling - factor de escala por exceso de velocidad de hasta la
% transformada de Hough
% sigma - cantidad de gaussiana suavizado a
% aplicar para la creacin de mapa borde.
% hithres - umbral para la creacin de mapa borde
% lowthres - umbral para bordes conectados
% vert - contribucin borde vertical (0-1)
% horz - contribucin borde horizontal (0-1)
%
% Salida:
% circleiris - coordenadas del centro y el radio
% de los lmites del iris detectado
% circlepupil - coordenadas del centro y el radio
% del borde de la pupila detectado
% imagewithnoise - imagen visual original, pero con
% ubicacin de ruido marcado con
% valores NaN
function [row, col, r] = findcircle(image,lradius,uradius,scaling, sigma,
hithres, lowthres, vert, horz)
lradsc = round(lradius*scaling);
uradsc = round(uradius*scaling);
rd = round(uradius*scaling - lradius*scaling);
[I2 or] = canny(image, sigma, scaling, vert, horz);
I3 = adjgamma(I2, 1.9);
I4 = nonmaxsup(I3, or, 1.5);
edgeimage = hysthresh(I4, hithres, lowthres);
h = houghcircle(edgeimage, lradsc, uradsc);
maxtotal = 0;
for i=1:rd
layer = h(:,:,i);
[maxlayer] = max(max(layer));
if maxlayer > maxtotal
maxtotal = maxlayer;
r = int32((lradsc+i) / scaling);
[row,col] = ( find(layer == maxlayer) );
row = int32(row(1) / scaling);
col = int32(col(1) / scaling);
end
end
90
% findline
% Argumentos:
% image - la imagen de entrada
%
% Output:
% lines - parmetros de la lnea detectada en forma polar
function lines = findline(image)
[I2 or] = canny(image, 2, 1, 0.00, 1.00);
I3 = adjgamma(I2, 1.9);
I4 = nonmaxsup(I3, or, 1.5);
edgeimage = hysthresh(I4, 0.20, 0.15);
theta = (0:179)';
[R, xp] = radon(edgeimage, theta);
maxv = max(max(R));
if maxv > 25
i = find(R == max(max(R)));
else
lines = [];
return;
end
[foo, ind] = sort(-R(i));
u = size(i,1);
k = i(ind(1:u));
[y,x]=ind2sub(size(R),k);
t = -theta(x)*pi/180;
r = xp(y);
lines = [cos(t) sin(t) -r];
cx = size(image,2)/2-1;
cy = size(image,1)/2-1;
lines(:,3) = lines(:,3) - lines(:,1)*cx - lines(:,2)*cy;
91
% gaborconvolve
% Argumentos:
% im - la imagen convolucionar
% nscale - nmero de filtros a utilizar
% minWaveLength - longitud de onda del filtro de base
% mult - el factor multiplicativo entre cada filtro
% sigmaOnf - Relacin entre la desviacin estndar de la gaussiana describir
% funcin de transferencia del filtro Gabor registro de la frecuencia
% dominio de la frecuencia central del filtro.
%
function[EO, filtersum] = gaborconvolve(im, nscale, minWaveLength, mult, ... sigmaOnf)
[rows cols] = size(im);
filtersum = zeros(1,size(im,2));
EO = cell(1, nscale);
ndata = cols;
if mod(ndata,2) == 1
ndata = ndata-1;
end
logGabor = zeros(1,ndata);
result = zeros(rows,ndata);
radius = [0:fix(ndata/2)]/fix(ndata/2)/2;
radius(1) = 1;
wavelength = minWaveLength;
for s = 1:nscale,
fo = 1.0/wavelength;
rfo = fo/0.5;
logGabor(1:ndata/2+1) = exp((-(log(radius/fo)).^2) / (2 * log(sigmaOnf)^2));
logGabor(1) = 0;
filter = logGabor;
filtersum = filtersum+filter;
for r = 1:rows % For each row
signal = im(r,1:ndata);
imagefft = fft( signal );
result(r,:) = ifft(imagefft .* filter);
end
EO{s} = result;
wavelength = wavelength * mult;
end
filtersum = fftshift(filtersum);
92
% gethammingdistance
% Argumentos:
% template1 - primera plantilla
% mask1 - mscara de ruido correspondiente
% template2 - segunda plantilla
% mask2 - mscara de ruido correspondiente
% scales - el nmero de filtros utilizados para codificar las plantillas,
% necesario para el cambio.
%
% Salida:
% hd - la distancia de Hamming como una relacin
function hd = gethammingdistance(template1, mask1, template2, mask2, scales)
template1 = logical(template1);
mask1 = logical(mask1);
template2 = logical(template2);
mask2 = logical(mask2);
hd = NaN;
for shifts=-8:8
template1s = shiftbits(template1, shifts,scales);
mask1s = shiftbits(mask1, shifts,scales);
mask = mask1s | mask2;
nummaskbits = sum(sum(mask == 1));
totalbits = (size(template1s,1)*size(template1s,2)) - nummaskbits;
C = xor(template1s,template2);
C = C & ~mask;
bitsdiff = sum(sum(C==1));
if totalbits == 0
hd = NaN;
else
hd1 = bitsdiff / totalbits;
if hd1< hd || isnan(hd)
hd = hd1;
end
end
end
93
% houghcircle
% Argumentos:
% edgeim - el mapa de imagen del borde de transformarse
% rmin, rmax - los valores mnimo y mximo radio
% de crculos para buscar
% Salida:
% h - La transformada de Hough
%
function h = houghcircle(edgeim, rmin, rmax)
[rows,cols] = size(edgeim);
nradii = rmax-rmin+1;
h = zeros(rows,cols,nradii);
[y,x] = find(edgeim~=0);
for index=1:size(y)
cx = x(index);
cy = y(index);
for n=1:nradii
h(:,:,n) = addcircle(h(:,:,n),[cx,cy],n+rmin);
end
end
94
% HYSTHRESH
% Argumentos:
% im - imagen a umbrales concretos (que se supone no negativo)
% T1 - valor de umbral superior
% T2 - valor de umbral inferior
function bw = hysthresh(im, T1, T2)
if (T2 > T1 | T2 < 0 | T1 < 0)
error('T1 debe ser >= T2 y ambos deben estar >= 0 ');
end
[rows, cols] = size(im);
rc = rows*cols;
rcmr = rc - rows;
rp1 = rows+1;
bw = im(:);
pix = find(bw > T1);
npix = size(pix,1);
stack = zeros(rows*cols,1);
stack(1:npix) = pix;
stp = npix;
for k = 1:npix
bw(pix(k)) = -1;
end
O = [-1, 1, -rows-1, -rows, -rows+1, rows-1, rows, rows+1];
while stp ~= 0
v = stack(stp);
stp = stp - 1;
if v > rp1 & v < rcmr
for l = 1:8
ind = index(l);
if bw(ind) > T2
stp = stp+1;
stack(stp) = ind;
bw(ind) = -1;
end
end
end
end
bw = (bw == -1);
bw = reshape(bw,rows,cols);
95
% linecoords
% Argumentos:
% lines - una matriz que contiene los parmetros de la lnea de
% forma
% imsize - tamao de la imagen, es necesario para que las coordenadas x y
% estn dentro del lmite de la imagen
%
function [x,y] = linecoords(lines, imsize)
xd = [1:imsize(2)];
yd = (-lines(3) - lines(1)*xd ) / lines(2);
coords = find(yd>imsize(1));
yd(coords) = imsize(1);
coords = find(yd<1);
yd(coords) = 1;
x = int32(xd);
y = int32(yd);
96
% NONMAXSUP
% entrada:
% inimage - imagen para ser non-maxima suprimida.
%
% orient - imagen que contiene caractersticas ngulos normales de orientacin en grados
% (0-180), los ngulos positivos en sentido antihorario.
%
% radius - distancia en unidades de pxel a ser considerado en cada lado de cada
% pxel cuando se determina si se trata de un mximo local o no.
% (Valor sugerido acerca de 01.02 a 01.05)
function im = nonmaxsup(inimage, orient, radius)
if size(inimage) ~= size(orient)
error('imagen y la orientacin de la imagen son de diferentes tamaos );
end
if radius < 1
error('radio debe estar >= 1');
end
[rows,cols] = size(inimage);
im = zeros(rows,cols);
iradius = ceil(radius);
angle = [0:180].*pi/180;
xoff = radius*cos(angle);
yoff = radius*sin(angle);
hfrac = xoff - floor(xoff);
vfrac = yoff - floor(yoff);
orient = fix(orient)+1;
for col = (iradius+1):(cols - iradius)
or = orient(row,col);
x = col + xoff(or);
y = row - yoff(or);
fx = floor(x);
cx = ceil(x);
fy = floor(y);
cy = ceil(y);
tl = inimage(fy,fx);
upperavg = tl + hfrac(or) * (tr - tl);
loweravg = bl + hfrac(or) * (br - bl);
v1 = upperavg + vfrac(or) * (loweravg - upperavg);
if inimage(row, col) > v1
x = col - xoff(or);
y = row + yoff(or);
fx = floor(x);
cx = ceil(x);
fy = floor(y);
cy = ceil(y);
tl = inimage(fy,fx);
tr = inimage(fy,cx);
bl = inimage(cy,fx);
br = inimage(cy,cx);
upperavg = tl + hfrac(or) * (tr - tl);
loweravg = bl + hfrac(or) * (br - bl);
v2 = upperavg + vfrac(or) * (loweravg - upperavg);
97
if inimage(row,col) > v2
im(row, col) = inimage(row, col);
end
end
end
end
% normaliseiris
% Argumentos:
% image -la imagen del ojo de entrada para extraer datos del iris de
% x_iris - la coordenada x del crculo que define el iris
% lmite
% y_iris - la coordenada Y del crculo que define el iris
% lmite
% r_iris - el radio del crculo que define el iris
% lmite
% x_pupil - la coordenada X del crculo que define la pupila
% limite
% y_pupil - la coordenada y del crculo que define la pupila
% limite
% r_pupil - el radio del crculo que define la pupila
% lmite
% eyeimage_filename - nombre de archivo original de la imagen del ojo de entrada
% radpixels - resolucin radial, define la dimensin vertical de
% representacin normalizada
% angulardiv - resolucin angular, define la dimensin horizontal
% de la representacin normalizada
%
function [polar_array, polar_noise] = normaliseiris(image, x_iris, y_iris,
r_iris,...
x_pupil, y_pupil, r_pupil,eyeimage_filename, radpixels, angulardiv)
global DIAGPATH
radiuspixels = radpixels + 2;
angledivisions = angulardiv-1;
r = 0:(radiuspixels-1);
theta = 0:2*pi/angledivisions:2*pi;
x_iris = double(x_iris);
y_iris = double(y_iris);
r_iris = double(r_iris);
x_pupil = double(x_pupil);
y_pupil = double(y_pupil);
r_pupil = double(r_pupil);
% calcular el desplazamiento del centro de la pupila del centro del iris
ox = x_pupil - x_iris;
oy = y_pupil - y_iris;
if ox <= 0
sgn = -1;
elseif ox > 0
sgn = 1;
end
98
if ox==0 && oy > 0
sgn = 1;
end
r = double(r);
theta = double(theta);
a = ones(1,angledivisions+1)* (ox^2 + oy^2);
if ox == 0
phi = pi/2;
else
phi = atan(oy/ox);
end
b = sgn.*cos(pi - phi - theta);
r = (sqrt(a).*b) + ( sqrt( a.*(b.^2) - (a - (r_iris^2))));
r = r - r_pupil;
rmat = ones(1,radiuspixels)'*r;
rmat = rmat.* (ones(angledivisions+1,1)*[0:1/(radiuspixels-1):1])';
rmat = rmat + r_pupil;
rmat = rmat(2:(radiuspixels-1), :);
xcosmat = ones(radiuspixels-2,1)*cos(theta);
xsinmat = ones(radiuspixels-2,1)*sin(theta);
xo = rmat.*xcosmat;
yo = rmat.*xsinmat;
xo = x_pupil+xo;
yo = y_pupil-yo;
[x,y] = meshgrid(1:size(image,2),1:size(image,1));
polar_array = interp2(x,y,image,xo,yo);
polar_noise = zeros(size(polar_array));
coords = find(isnan(polar_array));
polar_noise(coords) = 1;
polar_array = double(polar_array)./255;
coords = find(xo > size(image,2));
xo(coords) = size(image,2);
coords = find(xo < 1);
xo(coords) = 1;
coords = find(yo > size(image,1));
yo(coords) = size(image,1);
coords = find(yo<1);
99
yo(coords) = 1;
xo = round(xo);
yo = round(yo);
xo = int32(xo);
yo = int32(yo);
ind1 = sub2ind(size(image),double(yo),double(xo));
image = uint8(image);
image(ind1) = 255;
[x,y] = circlecoords([x_iris,y_iris],r_iris,size(image));
ind2 = sub2ind(size(image),double(y),double(x));
[xp,yp] = circlecoords([x_pupil,y_pupil],r_pupil,size(image));
ind1 = sub2ind(size(image),double(yp),double(xp));
image(ind2) = 255;
image(ind1) = 255;
w = cd;
cd(DIAGPATH);
imwrite(image,[eyeimage_filename,'-normal.jpg'],'jpg');
cd(w);
coords = find(isnan(polar_array));
polar_array2 = polar_array;
polar_array2(coords) = 0.5;
avg = sum(sum(polar_array2)) / (size(polar_array,1)*size(polar_array,2));
polar_array(coords) = avg;
100
% segmentiris
% Argumentos:
% eyeimage - la imagen del ojo de entrada
%
% Output:
% circleiris - coordenadas del centro y el radio
% de los lmites del iris detectado
% circlepupil - coordenadas del centro y el radio
% del borde de la pupila detectado
% imagewithnoise - imagen visual original, pero con
% ubicacin de ruido marcado con
% valores NaN
function [circleiris, circlepupil, imagewithnoise] = segmentiris(eyeimage)
lpupilradius = 28;
upupilradius = 75;
lirisradius = 80;
uirisradius = 150;
scaling = 0.4;
reflecthres = 240;
[row, col, r] = findcircle(eyeimage, lirisradius, uirisradius, scaling, 2, 0.20,
0.19, 1.00, 0.00);
circleiris = [row col r];
rowd = double(row);
cold = double(col);
rd = double(r);
irl = round(rowd-rd);
iru = round(rowd+rd);
icl = round(cold-rd);
icu = round(cold+rd);
imgsize = size(eyeimage);
if irl < 1
irl = 1;
end
if icl < 1
icl = 1;
end
if iru > imgsize(1)
iru = imgsize(1);
end
if icu > imgsize(2)
icu = imgsize(2);
end
imagepupil = eyeimage( irl:iru,icl:icu);
101
[rowp, colp, r] = findcircle(imagepupil, lpupilradius, upupilradius
,0.6,2,0.25,0.25,1.00,1.00);
rowp = double(rowp);
colp = double(colp);
r = double(r);
row = double(irl) + rowp;
col = double(icl) + colp;
row = round(row);
col = round(col);
circlepupil = [row col r];
imagewithnoise = double(eyeimage);
%encontrar la parte superior del prpado
topeyelid = imagepupil(1:(rowp-r),:);
lines = findline(topeyelid);
if size(lines,1) > 0
[xl yl] = linecoords(lines, size(topeyelid));
yl = double(yl) + irl-1;
xl = double(xl) + icl-1;
yla = max(yl);
y2 = 1:yla;
ind3 = sub2ind(size(eyeimage),yl,xl);
imagewithnoise(ind3) = NaN;
imagewithnoise(y2, xl) = NaN;
end
%encontrar prpado inferior
bottomeyelid = imagepupil((rowp+r):size(imagepupil,1),:);
lines = findline(bottomeyelid);
if size(lines,1) > 0
[xl yl] = linecoords(lines, size(bottomeyelid));
yl = double(yl)+ irl+rowp+r-2;
xl = double(xl) + icl-1;
yla = min(yl);
y2 = yla:size(eyeimage,1);
ind4 = sub2ind(size(eyeimage),yl,xl);
imagewithnoise(ind4) = NaN;
imagewithnoise(y2, xl) = NaN;
end
ref = eyeimage < 100;
coords = find(ref==1);
imagewithnoise(coords) = NaN;
102
% shiftbits
%
% Argumentos:
% template - la plantilla para cambiar
% noshifts - nmero de turnos para llevar a cabo a la derecha, un negative
% el valor, el cambio a la izquierda
% nscales - nmero de filtros utilizados para la codificacin, necesitaba
% determinar el nmero de bits que se mueven en un cambio
%
function templatenew = shiftbits(template, noshifts,nscales)
templatenew = zeros(size(template));
width = size(template,2);
s = round(2*nscales*abs(noshifts));
p = round(width-s);
if noshifts == 0
templatenew = template;
elseif noshifts < 0
x=1:p;
templatenew(:,x) = template(:,s+x);
x=(p + 1):width;
templatenew(:,x) = template(:,x-p);
else
x=(s+1):width;
templatenew(:,x) = template(:,x-s);
x=1:s;
templatenew(:,x) = template(:,p+x);
end