Академический Документы
Профессиональный Документы
Культура Документы
i
?
6
i
? Header
6
i
?
6
Body
Margin
Notes
i
-
i
10-
i
-
11
1i-
1
3
5
7
9
11
?
6
?
Footer
2
4
6
8
10
ESCUELA DE INGENIERA
DECLARACIN
Yo, Diego Fernando Asanza Maldonado, declaro bajo juramento que el trabajo aqu
descrito es de mi autora; que no ha sido previamente presentado para ningn grado
o calificacin profesional; y, que he consultado las referencias bibliogrficas que se
incluyen en este documento.
A travs de la presente declaracin cedo mis derechos de propiedad intelectual
correspondientes a este trabajo, a la Escuela Politcnica Nacional, segn lo establecido por la Ley de Propiedad Intelectual, por su Reglamento y por la normatividad
institucional vigente.
CERTIFICACIN
Certifico que el presente trabajo fue desarrollado por Diego Fernando Asanza Maldonado, bajo mi supervisin.
AGRADECIMIENTOS
Doy las gracias a mis Padres, por haber dedicado tanto tiempo y esfuerzo a mi
educacin. Sin ellos, nada de esto habra sido posible. Doy las gracias tambin a
mis hermanas, sobrinos, y al resto de mi familia, por su apoyo y colaboracin.
Agradezco tambin a mis maestros, por haber tenido la paciencia y generosidad de
compartir con nosotros sus conocimientos, los cuales espero saber usar adecuadamente. En especial, quisiera agradecer a mi director de proyecto, por su ayuda y
acertadas sugerencias, y por el tiempo dedicado a la revisin y correccin de este
trabajo.
Tambin agradezco a mis amigos y compaeros, con quienes tuve el honor de
compartir estos aos de universidad. Gracias por su ayuda y consejos.
Tambien doy las gracias a las personas del departamento de sealizacion de la
Policia Nacional, por su ayuda y la informacin proporcionada para realizar este
trabajo.
Por ltimo, quiero agradecer a la comunidad de software libre, por las maravillosas
herramientas que han creado y que han servido para la elaboracin de este proyecto. Gracias por su generosidad. Espero que, algn da, todos podamos vivir en
un mundo en el que las ideas circulen libremente, sin que haya personas que les
pongan precio.
Diego F. Asanza
DEDICATORIA
CONTENIDO
RESUMEN
XVI
PRESENTACIN
XVII
1. PRELIMINARES
1.1.1. DIMENSIONES . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2. COLORES . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.3. MATERIAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.4. MONTAJE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. RESTRICCIONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTENIDO
2. DESCRIPCIN DEL MDULO
VI
3. IMPLEMENTACIN
37
CONTENIDO
VII
4. EVALUACIN
4.1. MUESTRAS
70
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
. . . . . . . . . . . . . . . . 83
4.4.1. GOCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.4.2. INTEGRACIN . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.4.3. RESULTADOS EXPERIMENTALES . . . . . . . . . . . . . . . 86
5. CONCLUSIONES Y RECOMENDACIONES
88
5.1. CONCLUSIONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.2. RECOMENDACIONES . . . . . . . . . . . . . . . . . . . . . . . . . . 93
CONTENIDO
BIBLIOGRAFA
A. CDIGO FUENTE
VIII
97
101
B. MANUAL DE USUARIO
133
146
148
NDICE DE FIGURAS
IX
NDICE DE FIGURAS
. . . . . . . . . . . . . . . . . 19
2.17.(a) Imagen original. (b) Binarizacin sobre el componente de luminancia. (c) Binarizacin sobre el componente azul de la imagen. (d)
Binarizacin sobre el componente rojo de la imagen.(e) Binarizacin
sobre el componente verde . . . . . . . . . . . . . . . . . . . . . . . . 21
2.18.Imagen e histograma correspondiente . . . . . . . . . . . . . . . . . . 23
2.19.Imagen ecualizada e histograma correspondiente
. . . . . . . . . . . 23
. . . . . 25
NDICE DE FIGURAS
XI
2.31.Transformacin geomtrica . . . . . . . . . . . . . . . . . . . . . . . . 31
2.32.Placa recortada luego del proceso de transformacin geomtrica. . . 33
2.33.Proyeccin vertical de la Figura 2.32. Ntese la secuencia de picos
que forman la Firma Caracterstica . . . . . . . . . . . . . . . . . . . 33
2.34.Efectos de las operaciones morfolgicas. (a)dilatacin, (b) erosin [27] 34
2.35.Filtrado de la imagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1. Diagrama de flujo general del mtodo de deteccin de placa propuesto. 43
3.2. Procedimiento para aplicar una LUT. . . . . . . . . . . . . . . . . . . . 45
3.3. Procedimiento de ecualizacin . . . . . . . . . . . . . . . . . . . . . . 45
3.4. Variacin de el nmero de placas detectadas de acuerdo al nivel de
umbral usado en las fotografas de prueba. . . . . . . . . . . . . . . . 46
3.5. Diagrama de flujo de la etapa de deteccin de rectngulos . . . . . . 47
3.6. ngulo entre lados adyacentes . . . . . . . . . . . . . . . . . . . . . . 48
3.7. ngulos de los contornos encontrados en las fotografas de prueba . 49
3.8. Relacin entre lados de los contornos de prueba . . . . . . . . . . . . 49
3.9. Eliminacin de duplicados . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.10.Diagrama de flujo de la etapa de seleccin y filtrado . . . . . . . . . . 52
3.11.Rectngulo detectado . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.12.Rectngulo normalizado. La placa de la Figura 3.11 se ha desplazado
a la parte superior izquierda . . . . . . . . . . . . . . . . . . . . . . . . 54
3.13.Proyeccin vertical de una placa tpica . . . . . . . . . . . . . . . . . . 54
3.14.Procedimiento de anlisis de la proyeccin vertical . . . . . . . . . . . 56
NDICE DE FIGURAS
XII
61
NDICE DE FIGURAS
XIII
. . . . . . . . . . . . . 92
NDICE DE CUADROS
. . . . . . . . 41
NDICE DE CUADROS
XV
RESUMEN
Este trabajo describe un procedimiento que usa la deteccin de contornos y el anlisis de la proyeccin vertical, para extraer el segmento de imagen que contiene la
placa de identificacin vehicular en fotografas de automviles.
Ademas, se realiza implementacin de dicho procedimiento en lenguaje C. Tambin se exponen las estadsticas de desempeo de esta implementacin sobre un
conjunto de imgenes de prueba.
Como parte del proyecto, se prueba el programa desarrollado en conjunto con un
programa de reconocimiento automtico de caracteres, con la finalidad de implementar un sistema de reconocimiento automtico de nmero de matrcula. Se exponen los resultados de dicha integracin.
Finalmente, se exponen las conclusiones y recomendaciones para futuros trabajos
sobre el tema.
XVI
PRESENTACIN
http://en.wikipedia.org/Automatic_number_plate_recognition
Los nmeros entre corchetes[] hacen referencia a un texto en la bibliografa
XVII
NDICE DE CUADROS
XVIII
Este documento describe un mtodo para la deteccin de placa, que utiliza la deteccin de contornos y el anlisis de la proyeccin vertical para encontrar y recortar
la placa de identificacin vehicular de una imagen. Esto es posible debido a que la
placa, por su construccin es una de las zonas mas brillantes de la imagen, y tiene
una forma rectangular caracterstica.
Tambin se realiza la implementacin de un mdulo de deteccin de placa basado
en el mtodo descrito. Se presentan adems los resultados de la prueba de este
mdulo sobre un conjunto de imgenes de prueba. Como parte de estas pruebas,
tambin se incluye la evaluacin de este mdulo en conjunto con un sistema de
reconocimiento de caracteres.
No se explica aqu toda la teora detrs de los procedimientos de procesamiento
de imagen usados. En general se asume que el lector tiene conocimientos sobre
temas como procesamiento digital de imagen, representacin digital de la imagen,
almacenamiento, filtrado, etc. Informacin detallada referente a estos temas puede
encontrarse en los documentos enumerados en la bibliografa. La mayora de estos documentos se encuentran tambin en formato electrnico en el CDROM que
acompaa a este trabajo.
El resto de este documento se ha estructurado de la siguiente manera:
En el Captulo 1 se describe con detenimiento el problema que se pretende resolver.
Se establecen las condiciones generales y los requerimientos de diseo.
En el Captulo 2 se exponen algunos trabajos realizados anteriormente en esta
rea. Luego se describe el diseo del mtodo elegido para la deteccin de la placa.
En el Captulo 3 se describe la forma en que se realiz la implementacin del mtodo de deteccin de placa. Se realiza un anlisis de costos.
En el Captulo 4 se realiza la evaluacin del desempeo de la implementacin del
mtodo de deteccin de placa. Se presenta un ejemplo de uso en conjunto con un
sistema de reconocimiento de caracteres.
El Captulo 5 contiene conclusiones y recomendaciones para futuros trabajos.
CAPTULO 1
PRELIMINARES
1.1.
PLACAS AUTOMOTRICES
Una caracterstica es una parte significativa, local y detectable de una imagen [3].
Cualquier objeto puede ser descrito usando un conjunto mnimo de caractersticas.
El reconocimiento de objetos puede definirse como un proceso de bsqueda de las
caractersticas de los mismos en la imagen.
Las placas de identificacin poseen un conjunto de caractersticas que las hace
nicas y diferentes del resto de la imagen. En las secciones siguientes se enumeran
stas, con la finalidad de disponer de elementos de donde elegir el conjunto mnimo
necesario para identificar las placas vehiculares con el menor margen de error.
Las caractersticas de las placas varan de acuerdo a la legislacin del pas al que
pertenecen. Placas de diferentes pases tienen diferentes formas y tamaos. En
Ecuador los artculos 104 a 108 del Reglamento a la Ley de Trnsito y Transporte
Terrestre [4] definen las caractersticas para las placas de identificacin que deben
poseer aquellos vehculos que circulan por el pas.
CAPTULO 1. PRELIMINARES
1.1.1.
DIMENSIONES
Hay que destacar que, aunque la ley dice que las dimensiones de las placas vehiculares son 15 cm de alto por 30 cm de ancho, en la prctica las placas tienen
unas dimensiones de 15,4 cm de alto por 30,4 cm de ancho. Esto es debido a que
la nueva matriz para la fabricacin de las placas, trada de Alemania, y que est
actualmente usando el Departamento de Sealizacin de la Polica Nacional, tiene
esas dimensiones.
CAPTULO 1. PRELIMINARES
1.1.2.
COLORES
La coloracin de las placas vara de acuerdo al tipo de servicio que presta el vehculo. Los vehculos particulares tienen placas blancas. Los vehculos de alquiler tienen
placas naranjas. Los vehculos pertenecientes a entidades del estado tienen placas
oro o verde. Los vehculos de servicio Diplomtico, Consular, Asistencia Tcnica y
Organismos Internacionales tienen placas azules. Y los vehculos que se internen
de manera temporal en el territorio ecuatoriano tienen placas rojas. Alrededor de
estas placas hay una lnea negra, y las letras y nmeros de identificacin son de
color negro.
Hay placas de uso de funcionarios del estado, como presidente o vicepresidente de
la repblica, que tienen como fondo la bandera del Ecuador.
1.1.3.
MATERIAL
Las placas son hechas en lamina metlica de aluminio, y recubiertas con papel
reflectivo grado de ingeniera1 , de color acorde al tipo de placa. Las letras estn en
relieve de 2 mm y son cubiertas de negro mate.
1.1.4.
MONTAJE
Papel reflectivo grado de ingeniera es una lmina de material reflectivo, cubierto por resina
protectora. La capa reflectiva consiste de particulas de vidrio y pequeas laminas de metal plateado.
Para que esta lmina sea catalogada como grado de ingeniera, debe cumplir ciertas condiciones
de reflectancia y durabilidad [5].
CAPTULO 1. PRELIMINARES
1.2.
1.3.
RESTRICCIONES
Aunque sera deseable que el mdulo de software a disear no tuviera ningn tipo
de limitacin, consideraciones de orden prctico hacen necesario que se especifiquen algunas restricciones en el mismo.
No es objetivo de este proyecto desarrollar un mdulo que funcione en todas las
posibles situaciones, sino uno que funcione de forma razonable con fotografas que
cumplan con un conjunto de propiedades, las cuales se definen a continuacin.
CAPTULO 1. PRELIMINARES
1.3.1.
En este proyecto no se consideran las placas de motocicletas ni aquellas que tengan otras dimensiones diferentes a 30 cm15 cm. Tampoco se consideran las placas
especiales de funcionarios del estado ni aquellas que no posean un color slido de
fondo. Esto es as por que mas de un 98 %2 de los autos en circulacin tienen placas
con colores slidos de fondo.
Adems se considera que las placas no estn rodeadas de marcos decorativos, ni
envueltas en cubiertas protectoras que pudieran cubrirlas parcialmente, o disminuir
el contraste que presentan con respecto al resto del vehculo.
1.3.2.
PROCESAMIENTO DE LA IMAGEN
Si bien en este proyecto se realiza una preparacin previa de la imagen con el fin de
mejorar la calidad de la misma, en general se considera que las fotografas fueron
tomadas bajo buenas condiciones de iluminacin y con poco ruido3 . No se hace
investigacin alguna para detectar la placa en fotografas ruidosas, con deficiente
brillo y/o contraste, con poca o con variaciones bruscas en la iluminacin. El formato de compresin de imagen tampoco es tratado, y se supone que la imagen fue
almacenada con una compresin JPG de 5:1 o menor.
1.3.3.
FORMATO DE ENTRADA/SALIDA
CAPTULO 1. PRELIMINARES
1.3.4.
El mecanismo con el cual las fotografas son tomadas y transportadas al computador para su procesamiento no es tratado en este proyecto. Tampoco se considera
la ubicacin del dispositivo de toma de imgenes, ni su implementacin. Se supone
que el mecanismo de toma de imagen est a una distancia de entre 40 cm y 2 m
del vehculo, que se encuentra paralelo al camino, que apunta al vehculo de frente
y que esta a una altura entre 0, 6 m y 1, 8 m. Estas consideraciones tienen que ver
con el hecho de que el dispositivo de toma de imgenes se colocar paralelo a la
calzada, y adems se colocar de tal manera que se eviten o disminuyan las distorsiones de perspectiva y esfericidad6 . Se deben evitar las condiciones extremas de
iluminacin, esto es, sin altas luces ni sombras pronunciadas. En general se considera iluminacin natural, entre las 7H00 y 17H00. Estas condiciones hacen a este
mdulo especialmente apto para entradas a estacionamientos, garitas de peajes,
intersecciones de baja velocidad.
Resolucin Espacial describe el grado de detalle presente en la imagen. Usualmente la resolucin se mide como el numero de pares de lineas discernibles por unidad de distancia, por ejemplo
100 pares de lineas por milmetro[8].
5
Se refiere a recursos computacionales, memoria, tiempo de procesamiento, etc.
6
La distorsin esfrica es una alteracin de la imagen producida por defectos de la lente, ocurre
cuando los rayos de luz luego de pasar la lente convergente no concurren en en un solo punto. Se
caracteriza por que las imgenes aparecen abombadas, o con forma esfrica. La distorsin de
perspectiva se produce en la toma de vistas, y ocurre cuando la cmara se inclina de manera que
su distancia vare respecto a la escena. Se caracteriza por que una parte de la escena aparece
anormalmente grande respecto al resto[9].
CAPTULO 2
DESCRIPCIN DEL MDULO
Muchos y variados son los mtodos que existen para la deteccin de placas de identificacin en vehculos. La primera seccin de este captulo se encarga de resumir
brevemente estos trabajos.
La segunda seccin se encarga de exponer las consideraciones de diseo que se
tomaron en cuenta. Estas consideraciones se basan en las caractersticas de las
placas expuestas en el Captulo 1 por lo que se recomienda leerlo.
En la tercera seccin se describe un mtodo para la deteccin de placa basado en
la extraccin de contornos y el anlisis de la proyeccin vertical.
2.1.
TRABAJOS ANTERIORES
Una proyeccin se define como la suma de los valores de los pxeles de la imagen
en una sola direccin. De esta manera, para una imagen f [x, y] con n pxeles de
ancho y m pxeles de alto, la proyeccin de la imagen en direccin horizontal se
define como:
Ph [y] =
n
X
f [i, y]
y = 1, 2, 3, ...m
(2.1)
i=1
Pv [x] =
m
X
f [x, i]
x = 1, 2, 3, ...n
(2.2)
i=1
Ph[y]
23
42
21
53
34
42
24
20
17
26
30
43
37
22
Pv[x]
Figura 2.1: Ilustracin del proceso de proyeccin. El vector Ph [y] representa la proyeccin horizontal. Pv [x] la proyeccin vertical
Como puede apreciarse en la Figura 2.3, se forman picos en la zonas de la fotografa que reflejan ms luz, pues en estas se alcanzan los mayores valores de pxel.
Estos picos pueden usarse para segmentar la fotografa en regiones con mas probabilidad de contener la placa del vehculo. Las placas, por su construccin, reflejan
mucha luz, y esto permite ubicarlas dentro de uno de los picos de la proyeccin horizontal.
10
Figura 2.4: Aplicacin del operador de Sobel para la deteccin de bordes verticales
35000
muestra 1
30000
25000
20000
15000
10000
5000
0
50
100
150
200
250
300
350
400
450
11
Este mtodo de proyeccin que usa la deteccin de bordes aventaja al mtodo que
no la usa en que no produce picos notables en zonas de mucho brillo pero que
no presentan discontinuidades, como faros o parabrisas. Esto reduce el nmero de
picos a analizar.
Luego se recortan las porciones de imagen que producen los picos en la proyeccin
horizontal y se analizan por separado (ver Figura 2.6). Este proceso de anlisis consiste en realizar una proyeccin vertical y revisar el grfico resultante en busca de
una firma caracterstica[11] (Figura 2.7), esto es un conjunto de picos espaciados
a intervalos regulares que son producidos por los caracteres de la placa.
Figura 2.7: Proyeccin vertical de una de las regiones de inters de la Figura 2.6 y
firma caracterstica de la placa
12
2.1.2.
Este mtodo[13] busca las zonas de la imagen que tienen mas probabilidad de
contener la placa, agrupando elementos de la misma que se encuentren conectados de alguna manera. En una imagen, dos pxeles estn conectados si cumplen
determinadas condiciones de valor y cercana1 .
Primero, las condiciones de valor estn dadas por un conjunto de valores que los
pxeles conectados deben compartir. En imgenes en escala de grises, esto significa un rango de valores, mientras en imgenes binarias2 esto significa un nico
valor.
Las condiciones de cercana determinan que tan juntos deben encontrarse dos pxeles que cumplan con las condiciones de valor para que sean considerados como
conectados. Usualmente se definen criterios como pxeles adyacentes 4-vecinos,
8-vecinos 6-vecinos [14] (ver Figura 2.8), aunque de una manera mas amplia, no
es necesario que los pxeles se encuentren adyacentes. Bastara en este caso que
su separacin est dentro de una distancia mnima [11].
La Figura 2.10 muestra el proceso de marcacin de componentes conectados en
la imagen de la Figura 2.9. Luego de marcarse los componentes, son agrupados
1
http://homepages.inf.ed.ac.uk/rbf/HIPR2/label.htm
Una imagen binaria es aquella en la que sus pxeles nicamente pueden tomar uno de dos
valores posibles
2
13
(b)
(a)
(c)
Figura 2.8: Ejemplos de vecindad de los pxeles grises respecto al negro [14]. (a) 4vecindad, (b) 8-vecindad, (c) 6-vecindad
14
aquellos que se encuentren mas cercanos como muestra la Figura 2.11. Estas zonas son extradas de la imagen original como zonas con mas probabilidad de contener la placa. Luego pasan por otros procesos con la finalidad de discriminar entre
estos resultados, aquellos que efectivamente tienen la placa del vehculo.
2.1.3.
MTODOS DE COMPARACIN
15
(2.3)
En la imagen de la Figura 2.14, las zonas brillantes aparecen como las que tienen
mayor probabilidad de contener la placa del vehculo. Sistemas de deteccin de
placa basados en este mtodo se describen en [16], [15].
16
Figura 2.14: Correlacin entre la imagen de las Figuras 2.12 y 2.13. Se ha obscurecido
intencionalmente las zonas menos brillantes de la imagen [15]
17
Independencia del color. Indica si el mtodo es capaz de detectar placas de diferentes colores.
Independencia del borde de la placa. Indica si el mtodo funciona sin necesitar
que la placa est rodeada de un borde que la destaque.
Mtodo de deteccin
Proyeccin Lateral
SI
Caractersticas
en las que se
basa el mtodo
Independencia
del punto de
observacin
Independencia
del color
Independencia
de la inclinacin
Independencia
del borde de la
placa
SI
SI
NO
SI
SI
SI
NO
SI
SI
SI
SI
NO
2.2.
CONSIDERACIONES
18
2.3.
En este trabajo se elige un enfoque para la deteccin de placa que se basa principalmente en el supuesto que sta es un rectngulo fcilmente distinguible. Esto
permite centrarse en sus atributos mas simples, la forma y la luminosidad.
Estos atributos por si solos no bastan para encontrar la placa en la fotografa. Es
necesario otro criterio que permita distinguir entre los diferentes elementos de la
imagen. Esto es as, por que elementos brillantes y rectangulares, como faros, podran confundirse con placas de identificacin si solamente se consideran estos
atributos.
El criterio adicional es la variacin regular en el brillo que se observa en el interior de
las placas, debido a los caracteres impresos en las mismas. Esta variacin del brillo
permite diferenciar entre elementos de la imagen que son placas de identificacin,
y los que no lo son.
5
19
2.3.1. PREPROCESAMIENTO
El bloque de pre-procesamiento se encarga de adecuar la imagen a los requerimientos de los bloques siguientes. Para esto, ste bloque debe cumplir las siguientes funciones:
20
21
Figura 2.17: (a) Imagen original. (b) Binarizacin sobre el componente de luminancia.
(c) Binarizacin sobre el componente azul de la imagen. (d) Binarizacin
sobre el componente rojo de la imagen.(e) Binarizacin sobre el componente verde
22
Ecualizacin
Las imgenes en escala de gris, obtenidas de la separacion de los componentes
RGB, son ecualizadas para minimizar los efectos de las condiciones externas cambiantes e incrementar el contraste entre la placa y los caracteres de la misma [19].
Para una imagen en escala de gris, como las obtenidas del proceso de separacin
RGB, el histograma representa la distribucin de los valores de pxel en la imagen,
es decir, el eje x representa todos los posibles valores de pxel permitidos, y el eje
y representa la cantidad de pxeles del valor dado por el eje x, presentes en la
imagen.
La ecualizacin del histograma10 , o simplemente ecualizacin, busca balancear la
distribucin de los valores de pxel de una imagen, consiguiendo un histograma distribuido uniformemente en la totalidad de la escala. Esta operacin consigue mostrar detalles de la imagen que estn ocultos en las luces o sombras de la fotografa
[19].
Sea N (u) el nmero de pxeles en la imagen con un valor de intensidad de u, (es
decir el histograma de la imagen). Para N (u) la distribucin acumulada de probabilidad normalizada se define como[20],[21]:
u
2b 1 X
N (i)
C(u) =
n i=0
(2.5)
donde n es el nmero total de pxeles en la imagen, y b es el nmero de bits usados para representar el valor de cada pxel individual. La ecualizacin se construye
usando esta funcin C(u) para reemplazar los valores de cada pxel. As, por ejemplo, un pxel que en la imagen original tiene un valor de pxel de 128, en la imagen
ecualizada tiene un valor de C(128).
La Figura 2.19 muestra el efecto de la ecualizacin sobre la imagen de la Figura
2.18. Bajo cada una de estas imgenes se muestra el histograma correspondiente.
10
23
24
Binarizacin
Antes de proceder con el proceso de deteccin de la placa es necesario segmentar
la imagen en regiones de inters. Una de las formas de producir esta segmentacin
es aprovechar que, debido a las propiedades reflectivas de la placa (ver Seccin
1.1), la zona de la placa en la fotografa es una de las mas brillantes en la imagen.
Una manera natural de separar las regiones mas luminosas de las menos luminosas
en una imagen es la binarizacin[22]. Por binarizacin se entiende encontrar una
imagen f (x, y) tal que se cumpla la siguiente condicin:
f (x, y) =
1
0
si
si
g(x, y) T
g(x, y) < T
(2.6)
Por esta razn, la determinacin automtica del nivel de umbral no se usa en esta
etapa. En su lugar se eligi un conjunto de nueve valores de umbral, determinados
25
26
Deteccin de contornos
En imgenes binarias, el contorno de un objeto se describe como la frontera que
separa dicho objeto del resto de la imagen[24]. Estos contornos son conjuntos de
pxeles conectados 11 4-vecinos u 8-vecinos que rodean al objeto. El proceso de
deteccin de contornos busca estas fronteras en la imagen.
Algoritmos para la deteccin de contornos existen, por lo que no es necesario desarrollar uno para esta aplicacin. El algoritmo usado se describe en el Anexo D.
En la imagen de la Figura 2.26 se han dibujado los contornos encontrados en la
imagen de la Figura 2.25 usando lineas de color verde.
27
28
Aproximacin Poligonal
El objeto de la aproximacin poligonal es capturar la esencia de la forma contenida
en los contornos obtenidos en el proceso anterior, con el menor nmero de puntos
posibles. En esta etapa, cada uno de los contornos extrados por el proceso anterior
es aproximado a un polgono.
P3
P2
d
P4
P1
Curva Original
Primera Aproximacion
Segunda Aproximacion
Tercera Aproximacion
Seleccin de candidatos
Los polgonos deben ser revisados para separar los rectngulos, que sern los
candidatos a placa a considerar en las etapas posteriores. En esta revisin se usan
cuatro criterios:
29
fotografas en las que los ngulos de las placas no son exactamente de 90 , principalmente debidos a la perspectiva. Sin embargo es razonable suponer que estos
valores se ubican en las cercanas de 90 .
El tercer criterio asegura que sean seleccionados nicamente rectngulos o cuadrados.
El cuarto criterio es la relacin entre lados de la placa, la cual, para placas de
la Repblica del Ecuador es de 2 : 1. Aqu tambin, al igual que con el segundo
criterio, las imperfecciones en la imagen hacen que la relacin aparente de los lados
se ubiquen en las cercanas de este valor.
12
Si se considera que el rea total de la imagen es de 640 480 = 307200pixeles los lmites de 450
y 50000pixeles corresponden aproximadamente a 1/500 y 1/6 de la imagen original, respectivamente
30
Eliminacin de duplicados
El proceso anterior de deteccin de rectngulos se realiza sobre veinte y siete imgenes diferentes (se realizan binarizaciones a nueve diferentes niveles de umbral,
sobre cada una de las imagenes en escala de gris ecualizadas, correspondientes a
cada uno de los componentes RGB de la imagen original), las que contienen casi
la misma informacin. Por esta razn, al final de la etapa anterior se obtiene muchos rectngulos que encierran la misma rea, en consecuencia se hace necesario
eliminar los rectngulos duplicados.
(x2,y2)
(x2,y2)
(x4,y4)
(x1,y1)
y
(x4,y4)
(x3,y3)
(x3,y3)
(x1,y1)
x
Para esto, los rectngulos obtenidos en el paso anterior son comparados entre ellos.
Si dos rectngulos se intersecan en mas del 30 %, se considera que encierran la
misma rea, y en consecuencia uno de los dos es eliminado.
Saber si dos rectngulos se intersecan es sencillo si se conocen sus coordenadas. Como consta en la Figura 2.29, dos rectngulos se intersecan si se cumple la
siguiente condicin:
x < lx y < ly
(2.7)
Donde:
lx =
|x3 x1|
|x3 x1 |
ly =
|y2 y1|
|y2 y1 |
si
si
(2.8)
(2.9)
si
si
31
SELECCIN Y FILTRADO
En esta etapa, las porciones de la fotografa encerradas en los rectngulos encontrados por los procesos anteriores, se recortan. Estas partes de la imagen original
son analizadas para determinar si son una placa de identificacin.
Pero antes de proceder a este anlisis, estas porciones de la fotografa pasan por
una transformacin geomtrica con la finalidad de eliminar la inclinacin y los defectos en la perspectiva que pudiera tener.
Finalmente, las secciones de la fotografa identificadas como placas, pasan por un
proceso de filtrado con el objetivo de obtener una imagen lo mas limpia posible para
el reconocimiento de carcteres.
El diagrama de bloques correspondiente a esta etapa se muestra en la Figura 2.30.
Transformacin Geomtrica
Esta etapa recorta de la fotografa las zonas rodeadas por los rectngulos obtenidos
en pasos anteriores. Estas partes de la fotografa son transformadas en otras con
unas dimensiones de 100 pxeles de ancho por 50 pxeles de alto.
P3
P4
P3
P4
50px
P1
P2
P1
P2
100px
Como se muestra en la Figura 2.31, esta etapa mapea los puntos de la imagen
delimitada por P 1,P 2,P 3 y P 4 (la imagen recortada por el paso anterior) a un nuevo
espacio delimitado por P 1 ,P 2 ,P 3 yP 4 .
32
x = c1 x + c2 y + c3 xy + c4
(2.10)
y = c5 y + c6 y + c7 xy + c8
(2.11)
x1
y1
x2
y2
x3
y3
x4
y4
x1
0
x2
0
x3
0
x4
0
y1
0
y2
0
y3
0
y4
0
x1 y1
0
x2 y2
0
x3 y3
0
x4 y4
0
1
0
1
0
1
0
1
0
0
x1
0
x2
0
x3
0
x4
0
y1
0
y2
0
y3
0
y4
0
x1 y1
0
x2 y2
0
x3 y3
0
x4 y4
0
1
0
1
0
1
0
1
c1
c2
c3
c4
c5
c6
c7
c8
(2.12)
Este sistema sirve tambin para calcular los valores x , y para todos los puntos de
la imagen, usando los valores de c1 . . . c8 calculados anteriormente.
Seleccin de placa
La seleccin de placa se encarga de seleccionar entre los rectngulos obtenidos
anteriormente, nicamente aquellos que tienen caractersticas propias de las placas
de vehculos.
33
pdr90.txt
8000
7000
6000
5000
4000
3000
2000
1000
0
20
40
60
80
100
Figura 2.33: Proyeccin vertical de la Figura 2.32. Ntese la secuencia de picos que
forman la Firma Caracterstica
Filtrado
Los segmentos de imagen que aprueben el anlisis de proyeccin vertical de la
seccin anterior pasan por un proceso de filtrado, el cual tiene por objeto eliminar
las irregularidades, que pudieran interferir en el reconocimiento de caracteres. Para
este propsito se han usado filtros morfolgicos, como los descritos en [25].
La morfologa matemtica conceptualiza a la imagen como un conjunto de puntos,
y a las transformaciones sobre la imagen como operaciones entre conjuntos [26].
Entre estas operaciones, se definen dos como fundamentales: la erosin y la dilatacin.
13
14
34
(2.13)
(2.14)
Usando las ecuaciones 2.13 y 2.14 se puede definir la dilatacin del conjunto X por
el elemento estructurante B, como el conjunto de puntos x R2 tal que la traslacin
de B por x (Bx ) tiene una interseccin no vaca con el conjunto X [27]:
B (X) = {x R2 |X Bx 6= }
(2.15)
(2.16)
Figura 2.34: Efectos de las operaciones morfolgicas. (a)dilatacin, (b) erosin [27]
35
como la erosin encoje el borde del objeto, mientras la dilatacin lo expande. Considerando esto, se uso una combinacin de erosin-dilatacin. La erosin elimina
los elementos de la imagen mas pequeos que el elemento estructurante, lo que
afecta poco a los caracteres que conforman el nmero de placa, pues estos son
mayores que el elemento estructurante usado. La dilatacin refuerza los elementos
de la imagen que no fueron eliminados por la erosin. En ambos casos, el elemento
estructurante usado debe ser mayor que los elementos de la imagen a eliminar, pero
menor que los elementos que se conservaran. La Figura 2.35 muestra un ejemplo
del resultado de este procedimiento. Puede verse claramente que se han eliminado
los caracteres de la palabra ECUADOR, quedando nicamente los caracteres que
forman el nmero de identificacin, y vestigios de los tornillos que aseguran la placa
al vehculo.
Luego de esto, las imgenes de las placas obtenidas son guardadas en un archivo.
2.3.4.
INTERFAZ DE USUARIO
Para este proyecto se eligi una interfaz de lnea de comandos. Dadas las caractersticas de la aplicacin, la cual realizar una nica tarea, no es necesario complicarse con una interfaz grfica.
Es necesario observar los resultados intermedios, por lo que la interfaz de linea de
comandos debe presentar una opcin que los muestre en pantalla.
Tambin, para permitir la experimentacin, se necesita que mediante la lnea de
comandos se puedan ajustar algunos parmetros que necesita el mdulo para funcionar. El detalle de todas los parmetros que acepta el mdulo se encuentra en el
manual de usuario, en el Anexo B.
36
15
16
CAPTULO 3
IMPLEMENTACIN
37
CAPTULO 3. IMPLEMENTACIN
38
conjunto de 100 imgenes1 , bajo las mejores condiciones posibles2 , poniendo especial cuidado en que en estas imgenes el detector de contornos siempre encuentre
un contorno alrededor de la placa. Este es el conjunto de fotografas al que se hace
referencia mas adelante, en este captulo.
3.1.
PLATAFORMA DE DESARROLLO
Plataforma de hardware
Sistema Operativo
Libreras
Compilador y Depurador
Las siguientes secciones enumeran las caractersticas de la plataforma de desarrollo usada en este proyecto. Informacin detallada respecto a la configuracin de
una plataforma de desarrollo como la usada aqu, se encuentra disponible en el
libro The Linux Development Platform [28], listado en la bibliografa.
CAPTULO 3. IMPLEMENTACIN
Procesador:
Memoria RAM:
Tarjeta Grfica:
39
3.1.2.
SISTEMA OPERATIVO
C
C++
Java
Fortran
CAPTULO 3. IMPLEMENTACIN
40
El propsito del depurador es permitir al programador ver que es lo que esta sucediendo dentro [28] de un programa, lo cual es til para determinar las causas de
los errores que ste pudiera presentar.
Para este proyecto se eligi el depurador GNU Debugger o GDB, por ser el de uso
mas comn en Linux.
El Cuadro 3.3 enumera las caractersticas del compilador y del depurador usados
en este proyecto.
Compilador:
Versin del compilador:
Depurador:
Versin del depurador:
3.1.4.
LIBRERAS
Existen en la actualidad muchas libreras para el anlisis de imagen por computadora. El Cuadro 3.4 presenta un resumen de las que fueron consideradas. Para
la evaluacin de estas libreras se tom en cuenta la disponibilidad de las tcnicas de proceso de imagen necesarias para implementar este proyecto. Tambin se
consideraron otros factores como la disponibilidad de documentacin y el tipo de
licencia permitida. Por comodidad los tipos de licencia se clasificaron en licencia
comercial y licencia libre. El tipo de licencia comercial exige el pago de dinero por
el uso comercial y en ocasiones por el uso no comercial del producto, adems de
que algunas de las libreras amparadas por esta licencia no se proporcionan con el
cdigo fuente. El tipo de licencia libre, en cambio no exige el pago por el uso de la
librera, adems de poner a disposicin el cdigo fuente de la misma, y permitir al
usuario distribuir libremente los trabajos que realice usando la librera.
3.1.5.
OPENCV
CAPTULO 3. IMPLEMENTACIN
Caractersticas
Deteccin de
Contornos
Aproximacin
Poligonal
Binarizacin
Morfologa
Transformacin
Geomtrica
Licencia
Documentacin
y Usabilidad
41
Intel IPL
Si
OpenCV
Si
Gandalf
No
Matlab
Si
Octave
No
Si
Si
No
Si
Si
Si
Si
Si
Si
Si
Si
Si
No
Si
Si
Si
Si
Si
Si
Si
Comercial
Amplia, Ok
Libre
Amplia, Ok
Libre
Amplia, Ok
Comercial
Amplia,Ok
Libre
Amplia, Ok
http://www.sourceforge.net/projects/opencvlibrary
Adems de foros de discusin en:
CAPTULO 3. IMPLEMENTACIN
42
http://groups.yahoo.com/group/OpenCV/
Con excepcin de las funciones definidas en el archivo imgproc.h e implementadas
en el archivo imgproc.c3 , las funciones y estructuras que empiezan con el prefijo
cv o Cv en el cdigo fuente, pertenecen a la librera OpenCV.
3.2.
Debido a la naturaleza secuencial del mtodo expuesto en el captulo anterior, adems de que las libreras elegidas estn escritas en C, se hace natural la eleccin
de este lenguaje para la programacin.
El diagrama de la Figura 3.1 muestra la implementacin total del mtodo. Como
puede verse, la etapa de preprocesamiento de imagen se ha expandido en dos
lazos anidados, esto permite que la etapa de deteccin de rectngulos trabaje sobre
una imagen binaria por vez. Los lazos exploran cada uno de los niveles de umbral
sobre cada canal de color. En total existen 9 niveles de umbral y 3 canales de color.
OpenCV implementa la mayora de los algoritmos de procesamiento de imagen,
por lo que no es necesario profundizar en ellos. Sin embargo, hay procedimientos que no estn implementados en OpenCV, los cuales son explicados con mas
detenimiento en las secciones siguientes.
Se recomienda mirar el cdigo fuente correspondiente a cada etapa. Ah se definen
las funciones usadas as como los parmetros de entrada y salida de cada una.
CAPTULO 3. IMPLEMENTACIN
Figura 3.1: Diagrama de flujo general del mtodo de deteccin de placa propuesto.
43
CAPTULO 3. IMPLEMENTACIN
44
Ecualizacin
El procedimiento usual para implementar la ecualizacin es a travs de una tabla de
sustitucin o LUT5 . Una LUT es un procedimiento usual en la manipulacin digital
de imgenes que consiste en reemplazar el valor de un pxel por su valor correspondiente en una tabla [21]. Por ejemplo, como se ve en la Figura 3.2, un pxel con
el valor de 2, es reemplazado por el contenido de la ubicacin 2 de la LUT, un pxel con el valor de 4 es reemplazado por el ubicado en la posicin 4, y as hasta
terminar con todos los pxeles de la imagen.
OpenCV proporciona medios para representar y aplicar la LUT en la imagen. Esto
simplifica el procedimiento de implementar la ecualizacin al reducirlo a un problema de llenar una LUT.
4
Cada pxel de la imagen binaria es representado por 1 byte. Las imgenes para este proyecto
constan de 640 480 pxeles, lo que significa que debe haber al menos 307200 bytes por imagen,
como son 27 imgenes esto representa un total de 8294400 bytes, sin considerar los encabezados
que usa OpenCV para representar la imagen
5
LUT: Look Up Table
CAPTULO 3. IMPLEMENTACIN
45
0
Binarizacin
Para determinar los niveles de umbral necesarios para la binarizacin, se us el
conjunto de cien fotografas de prueba6 definidas al principio de este captulo. Estas fueron binarizadas a todos los niveles de umbral posibles. Debido a la representacin de las imgenes en escala de gris usada, la cual usa ocho bits por pxel,
existen nicamente 256 niveles de umbral. Una imagen se consider binarizada
correctamente si el detector de rectngulos de la etapa siguiente encontraba un
rectngulo que rodeara la placa del vehculo. La Figura 3.4 muestra los resultados.
Puede verse que la mayora de fotografas produjeron rectngulos que encerraban
la placa al ser binarizadas con valores de umbral cercanos a 150. Sin embargo,
fotografas con escasa iluminacin se binarizan mejor con niveles de umbral bajos,
mientras que fotografas luminosas se binarizan mejor con niveles de umbral altos,
esto a pesar de que la ecualizacin mejora considerablemente estas imgenes.
Con el propsito de permitir al mdulo trabajar mejor con fotografas tomadas en
diversas condiciones de iluminacin, se eligieron nueve niveles de umbral. Estos
6
Las fotografas de prueba usadas aqu se encuentran en el CD que acompaa a este trabajo.
CAPTULO 3. IMPLEMENTACIN
46
60
50
40
Nmero
de
Fotografas
30
20
10
umbral
0
50
100
150
200
250
300
Nivel de umbral
niveles son: 68, 75, 110, 135, 143, 157, 175, 190, 209 y se eligieron de manera
que se distribuyeran entre todos los niveles de umbral posibles, escogiendo los
puntos en donde se consiguen la mayor cantidad de placas detectadas, esto es los
mximos locales, en la Figura 3.4.
3.2.2.
CAPTULO 3. IMPLEMENTACIN
47
CAPTULO 3. IMPLEMENTACIN
48
Seleccin de candidatos
El ngulo entre dos lados adyacentes se obtiene utilizando la siguiente frmula:
c2 = a2 + b2 2ab cos()
(3.1)
CAPTULO 3. IMPLEMENTACIN
49
0.35
0.3
0.25
0.2
|cos()|
0.15
0.1
0.05
0
0
500
1000
1500
2000
2500
Nombre de la muestra
3
Relacin
2.8
2.6
2.4
2.2
Relacin
entre
lados
2
1.8
1.6
1.4
1.2
1
0
500
1000
1500
2000
Nombre de la muestra
2500
CAPTULO 3. IMPLEMENTACIN
50
Eliminacin de duplicados
Los rectngulos duplicados se encuentran comparando todas las combinaciones de
rectngulos detectados posibles. Para este propsito, los rectngulos detectados
son colocados en una pila. El procedimiento consiste en tomar el primer rectngulo
de la pila y compararlo con el segundo. Si los rectngulos se intersecan, el segundo
rectngulo es eliminado, si no, el segundo rectngulo es colocado al final de la pila.
Luego se compara el tercero con el primero y as sucesivamente hasta que todos
los rectngulos restantes en la pila han sido evaluados. Esto se ilustra mejor en el
diagrama de la Figura 3.9.
3.2.3.
El diagrama de la Figura 3.10 muestra el flujo general de la etapa. En esta se recortan los segmentos de la imagen encerrados por los rectngulos que quedan
luego de la eliminacin de duplicados. Un lazo se encarga de tomar los rectngulos
individualmente. Estos son analizados en busca de la secuencia de picos en la proyeccin vertical que es caracterstica de la placa de identificacin. Finalmente los
segmentos de imagen que aprueben este anlisis pasan por un proceso de filtrado,
para luego guardarse en un archivo.
Transformacin Geomtrica
Cada rectngulo est representado por un arreglo de cuatro puntos que corresponden a sus vrtices. Estos deben ordenarse de forma que el primer elemento
del arreglo sea el vrtice ubicado en la esquina inferior izquierda del rectngulo
(pt0), el segundo elemento del arreglo debe ser el ubicado en la esquina superior
izquierda (pt1), el tercer elemento debe ser el vrtice ubicado en la esquina inferior
derecha(pt2), y el cuarto debe estar ubicado en la esquina superior derecha(pt3).
Estos son los puntos de origen en para el clculo de la matriz de perspectiva.
Los puntos de destino para el clculo de la matriz de perspectiva se encuentran
mediante una correspondencia simple, como se indica en el Cuadro 3.5. Esta representa el punto de origen y el punto de destino correspondiente. Hay que recordar
que en la pantalla el pxel ubicado arriba a la izquierda es el (0,0).
CAPTULO 3. IMPLEMENTACIN
51
Puntos de origen
Esquina superior izquierda
Esquina inferior izquierda
Esquina superior derecha
Esquina inferior derecha
Puntos de destino
(0,0)
(0,50)
(100,0)
(100,50)
CAPTULO 3. IMPLEMENTACIN
52
CAPTULO 3. IMPLEMENTACIN
53
Funciones definidas en la librera se encargan del clculo de la matriz de transformacin, usando un procedimiento similar al descrito en la Seccin 2.3.3. Esta matriz
sirve para realizar una transformacin geomtrica sobre la imagen original.El efecto de esta transformacin puede verse en la Figura 3.12. Ntese que la placa del
vehculo se ha desplazado hacia el rectngulo de vrtices: (0,0), (0,50), (100,0),
(100,50). Esta zona es recortada de la fotografa.
Hay que destacar que la transformacin geomtrica trabaja sobre una copia de la
imagen original, y no sobre las imgenes binarias obtenidas en la etapa de preprocesamiento. Esto se debe a que las imgenes binarias obtenidas durante el
preprocesamiento no siempre preservan los caracteres que forman el nmero de
placa. Para garantizar que los caracteres que forman el nmero de placa estn en
las mejores condiciones, la transformacin geomtrica recorta la placa de la imagen original, en color. Esto hace necesario una transformacin a escala de gris, y
ecualizacin sobre este segmento recortado de la fotografa original.
El mtodo de transformacin a escala de gris usado aqu consiste en producir una
nueva imagen, en donde sus pxeles corresponden al componente de luminancia
de la imagen original. Este componente se obtiene mediante la suma ponderada de
los componentes de color de los pxeles originales, segn la siguiente frmula[14]:
(3.2)
CAPTULO 3. IMPLEMENTACIN
54
donde Y es el valor del nuevo pxel en escala de gris, y R, G, B son los valores de
los componentes del pxel de la imagen en color.
Seleccin de Placa
Esta seccin realiza la proyeccin vertical de el trozo de fotografa seleccionado por
la seccin anterior y realiza un anlisis en busca de una firma caracterstica, esto
es una secuencia de picos en la proyeccin vertical.
1
Proyeccion Vertical
promedio
Limite Superior
Limite Inferior
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0
10
20
30
40
50
60
70
80
90
100
CAPTULO 3. IMPLEMENTACIN
55
Esta secuencia de picos se distingue por una serie de parmetros como el nmero
de picos, la separacin entre estos, etc. El problema a resolver aqu consiste en
encontrar los parmetros que definen esta firma, y usarlos para la discriminacin
de entre las imgenes que contienen la placa de identificacin y las que no.
En el procedimiento implementado, los siguientes parmetros son usados para
identificar la firma caracterstica en las placas de vehculos:
Desviacin Estndar Debido a que la proyeccin vertical de la placa de identificacin presenta caractersticas como las de la Figura 3.13, en donde gran parte
de los valores se apartan del valor medio, es razonable esperar valores de
desviacin estndar grandes.
Valor promedio El balance mas o menos equilibrado de zonas obscuras y zonas
claras presentes en las placas de identificacin permiten suponer que los valores medios de la proyeccin sern similares en todas las placas.
Nmero de picos El nmero de picos en la proyeccin vertical esta relacionado
con los espacios entre caracteres. Estos picos tienen una amplitud que depende del ancho mnimo y mximo de los espacios entre caracteres.
Nmero de valles El nmero de valles en la proyeccin vertical esta relacionado
con los caracteres que forman el nmero de placa. Estos valles tienen una
amplitud que esta relacionada con el ancho mnimo y mximo de los caracteres.
CAPTULO 3. IMPLEMENTACIN
56
CAPTULO 3. IMPLEMENTACIN
57
Valor Promedio
El valor promedio de la proyeccin vertical se define como:
N
1 X
xi
x =
N i=1
(3.3)
La Figura 3.15 muestra los valores del promedio para las proyecciones verticales
de los 100 rectngulos que contenan una placa de identificacin. El rango elegido
en consecuencia es el de 0,5 x 0,8
Desviacin Estndar
La desviacin estndar de la proyeccin se define como:
v
u
N
u1 X
t
=
(xi x)2
N i=1
(3.4)
CAPTULO 3. IMPLEMENTACIN
58
0.74
Promedio
0.72
0.7
0.68
0.66
Promedio
0.64
0.62
0.6
0.58
0.56
10
20
30
40
50
60
70
80
90
100
Nombre de la Muestra
0.17
0.16
0.15
0.14
0.13
10
20
30
40
50
60
70
80
90
100
Nombre de la Muestra
CAPTULO 3. IMPLEMENTACIN
59
En contraste la Figura 3.17 muestra los valores de desviacin estndar de los rectngulos que no contenan la placa del vehculo. Puede verse claramente por que la
desviacin estndar es una condicin necesaria, pero no suficiente para clasificar
a un rectngulo como placa de identificacin.
0.22
Desviacion Estndard
0.2
0.18
0.16
0.14
Desviacin
Estndard
0.12
0.1
0.08
0.06
0.04
5
10
15
20
25
30
Nombre de la Muestra
Nmero de picos
Un pico en la proyeccin vertical se define como un mximo local. El procedimiento
para contar los picos se expone en el cuadro 3.6. Puede verse que nicamente son
tomados en cuenta aquellos que sobrepasan el nivel limite_superior , y que estn
separados una distancia comprendida entre distancia_minima y distancia_maxima
del pico anterior, y ademas estn precedidos por un valle.
Los valores de distancia_minima y distancia_maxima corresponden aproximadamente al ancho de los caracteres, y se determin midiendo las separaciones entre
picos de las proyecciones obtenidas en las secciones anteriores. Estos valores se
fijaron en 5 para distancia_minima y 30 distancia_maxima .
El valor de limite_superior puede verse en el grfico de la Figura 3.13. Este se
elige dinmicamente para adaptarse a las variaciones de cada proyeccin. Este
lmite se calcula usando la siguiente frmula:
CAPTULO 3. IMPLEMENTACIN
60
CAPTULO 3. IMPLEMENTACIN
61
limite_superior = x +
(3.5)
Esto permite que el lmite superior se ajuste de forma automtica. As, para proyecciones que presentan picos bastante mayores que el valor medio, el lmite superior
es mayor que en proyecciones que presentan mas picos cercanos al valor medio de
la proyeccin. El divisor 2 para fue elegido experimentalmente.
La Figura 3.18 muestra el nmero de picos sobre este lmite contados en las placas de prueba descritas en secciones anteriores. Por esta razn se eligi 4 como
el nmero de picos que debe poseer la proyeccin vertical para ser considerada
perteneciente a una placa de identificacin vehicular.
11
Nmero de picos
10
9
8
Nmero
de
Picos
7
6
5
4
10
20
30
40
50
60
70
80
90
100
Nombre de la Muestra
Figura 3.18: Nmero de picos sobre el lmite superior en las fotografas de prueba
Nmero de valles
El procedimiento para contar valles en la proyeccin puede verse en el cuadro 3.7.
El algoritmo es en esencia el mismo que el usado para contar picos. Los limites
distancia_minima y distancia_maxima son los mismos expuestos en la seccin
anterior. El valor de limite_inferior se ha elegido en:
limite_inf erior = x
(3.6)
CAPTULO 3. IMPLEMENTACIN
62
Filtrado
La Figura 2.35 muestra el procedimiento seguido para el filtrado de la imagen. El
objetivo es obtener una imagen que en lo posible contenga nicamente los nmeros
que forman el identificador de la placa.
CAPTULO 3. IMPLEMENTACIN
63
10
Nmero de picos
Nmero
de
Picos
4
10
20
30
40
50
60
70
80
90
100
Nombre de la Muestra
Figura 3.19: Nmero de valles bajo el limite inferior en las fotografas de prueba
CAPTULO 3. IMPLEMENTACIN
64
Las imgenes que llegan a esta seccin son las que fueron recortadas y normalizadas por la transformacin geomtrica y adems aprobaron el anlisis de la proyeccin vertical descrito anteriormente. Esto significa imgenes en escala de gris
ecualizadas, que fueron recortadas de la imagen original y que contienen la placa
del vehculo.
Debido a que estas imgenes estn compuestas nicamente por dos zonas de brillo definido, las zonas claras, que corresponden al fondo de la placa, y las zonas
obscuras que corresponden a los caracteres que conforman el nmero de identificacin, el histograma que les corresponde es similar al de la Figura 3.21. Este
histograma representa la distribucin de valores de pxel. Como puede verse, existe
una aglomeracin de valores en dos zonas claramente definidas.
Esta distribucin particular de valores de histograma facilita la determinacin automtica del nivel de umbral que mejor binariza la imagen.
Es por esto que para el filtrado de la imagen se usa el algoritmo de Otsu [23] para
la determinacin del umbral. La implementacin usada aqu es una variacin del
cdigo expuesto por Ryan Dibble8 , para imgenes en escala de gris. Una forma de
explicar el algoritmo de Otsu, es imaginar al histograma como un objeto masivo. El
algoritmo divide primero a este objeto en dos puntos con mayor aglomeracin de
masa, y luego trata de encontrar el punto que equidiste de estos, en este punto se
encuentra el nivel ptimo de umbral. El cuadro 3.8 muestra el pseudocdigo de este
procedimiento. Este considera una imagen en escala de gris con una representacin
de 8 bits por pxel, lo que permite 256 niveles de gris.
Para resaltar las zonas mas obscuras de la imagen, el umbral obtenido anteriormente es dividido para 1, 6 antes de aplicar la binarizacin. Esto consigue que se elimine
8
dibbler@umich.edu
CAPTULO 3. IMPLEMENTACIN
65
CAPTULO 3. IMPLEMENTACIN
66
la mayor cantidad de elementos grises, quedando los mas obscuros los cuales son
los caracteres de la placa.
El filtro morfolgico es aplicado por funciones de librera. El elemento estructurante
usado es un elemento rectangular de tres pxeles de ancho y tres pxeles de alto, el
cual durante las pruebas realizadas mostr buen desempeo en eliminar elementos
diferentes a los caracteres que conforman el nmero de placa.
Finalmente la imagen es guardada en un archivo. Debido a que pueden existir mas
de una placa en la fotografa, las imgenes son guardadas anexndoles la extensin
-x.png donde x es un nmero que empieza en cero, y va aumentando conforme
se encuentran y guardan mas placas de identificacin. Antes del guin va un prefijo
que se pasa como argumento al programa.
3.3.
EVALUACIN DE COSTOS
CAPTULO 3. IMPLEMENTACIN
67
COCOMO intermedio el cual calcula el esfuerzo de desarrollo como una funcin del tamao del programa y un conjunto de costos adicionales (costdrivers) que incluyen la evaluacin subjetiva del producto, hardware, personal, y
atributos del proyecto.
COCOMO Detallado. incorpora todas las caractersticas de la versin intermedia mas una evaluacin de los costos en cada paso (anlisis, diseo, etc.) del
proceso de desarrollo de software.
E = ab (KSLOC)bb
(3.7)
D = cb (E)db
(3.8)
P =
E
D
(3.9)
CAPTULO 3. IMPLEMENTACIN
Proyecto de software
orgnico
semi-desconectado
embebido
68
ab
2.4
3.0
3.6
bb
1.05
1.12
1.20
cb
2.5
2.5
2.5
db
0.38
0.35
0.32
http://www.dwheeler.com/sloc
En el cuadro 3.10 puede verse la salida de sloccount. Para la estimacin se ha
considerado un salario promedio de 10138,92 dlares por ao que es el promedio
para programadores en Ecuador9 .
El costo total de desarrollo de esta aplicacin est en 3078 dlares, los cuales
incluyen documentacin, y costos adicionales de investigacin y prueba.
CAPTULO 3. IMPLEMENTACIN
69
SLOC
1022
466
Directory
src
scripts
SLOC-by-Language (Sorted)
ansic=1022
sh=424,awk=42
CAPTULO 4
EVALUACIN
Este captulo muestra el resultado de la evaluacin realizada sobre la implementacin del algoritmo para la deteccin de placa expuesto. Una correcta evaluacin
debe permitir no solamente establecer criterios para la ponderacin, sino tambin
encontrar posibles errores u omisiones, o sugerir maneras de mejorar el desempeo. Est claro que es difcil establecer un conjunto adecuado de pruebas que
permitan realizar estas tareas. Para facilitar esto, se han planteado los siguientes
objetivos a cumplir en esta evaluacin:
Las fotografas usadas en el captulo anterior se eligieron de forma que el mdulo siempre
encuentre un rectngulo que rodee la placa. Para evitar que este hecho altere los resultados, las
muestras usadas en este captulo corresponden a un conjunto diferente del usado en el captulo de
implementacin.
70
CAPTULO 4. EVALUACIN
71
4.1.
MUESTRAS
Las condiciones en las que se obtienen las muestras son casi ideales, esto es, fotografas tomadas a distancias del vehculo que varan entre 0,4 y 2 m, vehculos
estticos y condiciones de iluminacin ptimas (iluminacin natural entre las 7H00 y
17H00, sin iluminacin exterior adicional).En contraste, en circunstancias reales los
vehculos se encontraran en movimiento, existiran obstculos ocasionales (peatones, sombras producidas por otros vehculos, etc.).
CAPTULO 4. EVALUACIN
72
El uso del flash debe tener un tratamiento muy particular, debido a que este dispositivo en cmaras convencionales produce un efecto de deslumbramiento, como
puede apreciarse en la Figura 4.1, por lo que la utilizacin de luz artificial en condiciones diurnas y nocturnas debera ser investigado con mayor detalle.
Debido a que el algoritmo de reconocimiento se basa en atributos de forma y luminosidad, estos deben considerarse dentro de unos mrgenes dados por las restricciones expuestas en la Seccin 1.3.
En estas condiciones se procedi a recoger un conjunto imgenes, cuidando que
nicamente contengan una placa por fotografa. Como se dijo antes, se evitaron las
condiciones extremas en la iluminacin, sin altas luces ni sombras pronunciadas.
Las placas tambin fueron seleccionadas por su estado de conservacin, evitando
aquellas que presentan decoloraciones, xido, o abolladuras.
En el conjunto de fotografas obtenido no se incluyeron placas deterioradas, con
fondos de colores no slidos2 , placas con bordes decorativos ni cubiertas protectoras, sin embargo, se recopil un segundo conjunto de fotografas con estos defectos para determinar la respuesta del algoritmo a placas de estas caractersticas.
Sin embargo, estas fotografas son probadas por separado y no se cuentan en la
determinacin de la efectividad del mdulo, por no cumplir con las restricciones de
diseo expuestas en la Seccin 1.3.
2
Placas multicolores, por ejemplo, placas con fondos como la bandera del Ecuador.
CAPTULO 4. EVALUACIN
73
El dispositivo de toma de imgenes es una cmara Concord Eye-Q 4363Z, con sensor de 4.1 mega pxeles CCD. Las matrices que representan la imagen en el computador, a esta resolucin presentan inconvenientes de tiempo de procesamiento, volumen de clculos, proceso de depuracin. Por esto, se probaron resoluciones mas
bajas durante el proceso de desarrollo de la aplicacin. Se escogi la resolucin de
640x480 por las siguientes razones:
Ni la Jefatura Provincial de Trnsito y Transporte Terrestre ni la Polica Nacional poseen estadsticas al respecto. Esta estimacin se realiz de forma emprica, contando el nmero de vehculos de
colores claros en los estacionamientos en donde se tomaron las muestras.
CAPTULO 4. EVALUACIN
74
4.2.
4.2.1.
RESULTADOS EXPERIMENTALES
EFECTIVIDAD EN LA DETECCIN
El criterio para la evaluacin del xito del mdulo es simple. Si el mdulo detecta y
recorta la placa correctamente se considera que ha tenido xito. Si no, se cataloga
como error. La deteccin es correcta si el mdulo encuentra un rectngulo que
encierre completamente el nmero de placa del vehculo. Es necesario aclarar que
el resultado puede llevar o no a un reconocimiento de caracteres exitoso4 .
Figura 4.2: Ejemplo de resultados del mdulo. (a) Deteccin Correcta y (b) Distorsin
en el resultado
(4.1)
El Cuadro 4.1 muestra los resultados de la evaluacin del mdulo con el conjunto
primario de 215 fotografas de prueba. Para el anlisis posterior los resultados se
clasifican en:
4
CAPTULO 4. EVALUACIN
75
Nmero de Fotografas
163
3
49
215
Porcentaje
75.8 %
1.4 %
22.8 %
100 %
Este cuadro permite calcular la efectividad del mdulo aplicando la frmula 4.1:
ef ectividad =
163
100 = 75,814 %
215
(4.2)
Placas
Analizadas
65
150
215
Falsos
Negativos
33
16
49
Falsos
Positivos
1
2
3
Deteccin
Correcta
31
132
163
CAPTULO 4. EVALUACIN
76
xito
0
Fracaso
40
Cuadro 4.3: Resultados de la evaluacin del mdulo con fotografas que no cumplen
los requisitos descritos en el Captulo 1.
Por ltimo, el Cuadro 4.4 muestra los tiempos de ejecucin del programa. Estos
tiempos se obtuvieron sobre una computadora ACER travelmate 529 ATX, con procesador Intel Pentium III 900MHz con 384 MB de memoria RAM.
Mximo [ms]
4500
Mnimo [ms]
600
Promedio [ms]
1200
La Figura 4.3 muestra a la imagen en donde se consigui el mayor tiempo de procesamiento, la Figura 4.4 muestra a la imagen en donde se consigui el menor tiempo
de procesamiento. En general se observa que las imgenes que presentan muchos
objetos necesitan mas tiempo de procesamiento.
CAPTULO 4. EVALUACIN
77
En las secciones siguientes se evala cada etapa con las 49 fotografas que produjeron falsos negativos, con el fin de encontrar las secciones en donde se producen
estos fallos. No es necesario realizar este anlisis con las 3 fotografas que produjeron los falsos positivos, ya que estos se pueden atribuir directamente a la etapa
de seleccin y filtrado. Los falsos positivos se producen cuando el nmero de picos
producidos por la proyeccin vertical de la regin de inters est dentro del rango
definido en la Seccin 3.2.3.
4.2.2. PREPROCESAMIENTO
El xito de esta etapa puede considerarse de dos formas diferentes. La primera,
comparando el comportamiento de cada componente con patrones conocidos. Por
ejemplo, para determinar si la ecualizacin est funcionando como se espera, se
compara la salida de esta seccin con una imagen ecualizada mediante otros medios (puede ser a mano, o con un programa de manipulacin de imgenes5 ). Si
ambas imgenes concuerdan para un conjunto grande de imgenes de prueba, se
asume que la ecualizacin funciona correctamente. De la misma manera se procede para la descomposicin en componentes RGB y para la binarizacin. Esta forma
de proceder tiene valor para determinar el correcto funcionamiento de cada una
5
El autor de este documento utiliz Gimp, un programa de manipulacin de imagenes, para comparar los resultados obtenidos en las diferentes etapas.
CAPTULO 4. EVALUACIN
78
de las secciones que conforman la etapa, y se us mucho durante la implementacin de las diferentes etapas del mtodo expuesto. Desde esta perspectiva la etapa
funciona correctamente, ya que el porcentaje de xito es del 100 %.
Un segundo criterio de xito considera la salida esperada del preprocesamiento,
desde el punto de vista de los requerimientos de la etapa de deteccin de rectngulos. Como se expres en la Seccin 2.3.2, para que la deteccin encuentre
un rectngulo que contenga la placa, el preprocesamiento le debe entregar imgenes binarias como la de la Figura 4.5(a). Ntese que se forma un rectngulo claro
alrededor de la placa. En contraste la Figura 4.5(b) muestra un ejemplo de una
fotografa que no cumple con estos requisitos.
CAPTULO 4. EVALUACIN
79
xito
0
3
Fracaso
31
15
binaria que cumpla con los requerimientos expuestos anteriormente. Si se considera que las 49 fotografas corresponden al 100 % de los casos de error, entonces 46
fotografas corresponden al 93,88 %, y este valor tambin corresponde al porcentaje
de error debido a esta etapa.
El siguiente cuadro muestra los tiempos de procesamiento de esta etapa. Estos se
obtuvieron tomando el tiempo que se tarda en procesar el conjunto primario de 215
fotografas.
Mximo[ms]
29
Mnimo[ms]
22
Promedio[ms]
25
4.2.3.
DETECCIN DE RECTNGULOS
CAPTULO 4. EVALUACIN
80
Mximo [ms]
4430
Mnimo [ms]
540
Promedio [ms]
1130
Mnimo [ms]
20
Promedio [ms]
21
4.3.
ANLISIS DE RESULTADOS
CAPTULO 4. EVALUACIN
81
En la implementacin del captulo anterior se utiliza una representacin de 8 bits por pxel, esto
permite hasta 28 niveles de umbral.
CAPTULO 4. EVALUACIN
Etapa
Preprocesamiento
Deteccin de Rectngulos
Seleccin y filtrado
82
Porcentaje de falsos negativos
93,88 %
2,17 %
3,95 %
Figura 4.9: Ejemplo de fotografa con poco contraste entre la placa y el vehculo
Hay varias formas de mejorar el desempeo de esta etapa. Una sera usar mas
bits para representar el brillo del pxel. Con 8 bits nicamente existen 256 niveles
de umbral, con 16 bits existen 65536. Sin embargo, al aumentar los bits por pixel,
tambin aumenta el tiempo de procesamiento. Una forma mas fcil sera colocar
alrededor de la placa una franja de color negro, o montar la placa en una superficie
opaca.
Dentro de la etapa de deteccin de rectngulos, el procedimiento que muestra un
comportamiento no deseado, al menos con los conjuntos de fotografas de prueba,
es el de eliminacin de duplicados. El problema se presenta cuando el detector de
rectngulos encuentra rectngulos anidados. En esta situacin, al tener mas del
30 % del rea en comn, todos los rectngulos anidados menos 1 son eliminados.
Sin embargo, no hay nada en el mtodo de eliminacin de duplicados que garantice
se eliminen los rectngulos que no delimitan la placa. Esto significa que el eliminador de duplicados puede como sucede en la imagen de la Figura 4.6 eliminar el
rectngulo que delimita la placa y quedarse con el rectngulo mas externo, o mas
interno.
Para evitar este error, en el caso de existir rectngulos anidados, el mtodo de eliminacin de duplicados debera marcar todos los rectngulos anidados como rec-
CAPTULO 4. EVALUACIN
83
tngulos vlidos y enviarlos a la etapa siguiente. Existe otra manera de corregir este
error, que requiere una implementacin ligeramente diferente del mtodo expuesto,
pero que eliminara la necesidad de una seccin para la eliminacin de rectngulos
duplicados. Esta solucin se expone en el captulo siguiente, en las recomendaciones para trabajos futuros.
La ltima de las causas de errores se encuentra en la etapa de seleccin y filtrado,
en el procedimiento de proyeccin vertical, que se usa para discriminar los rectngulos que no contienen la placa, de los que si los contienen. Este procedimiento
nicamente considera el nmero de picos7 . Existen imgenes que sin ser placa
contienen un nmero de picos dentro del rango necesario, o puede ser que placas
reales no presenten el nmero de picos necesarios en la proyeccin vertical.
Hay que notar que las correcciones propuestas para las etapas de deteccin de rectngulos y de seleccin y filtrado son irrelevantes, esto si se considera que apenas
el 6.12 % de los errores en la deteccin se presentan en estas secciones. Cualquier
mejora en el mtodo de deteccin de rectngulos debera empezar corrigiendo la
etapa de preprocesamiento de imagen.
Con respecto al tiempo de procesamiento del mdulo, la etapa de deteccin de
rectngulos es la que mas tiempo consume; dentro de esta etapa, el mecanismo de
deteccin de contornos. Debe tenerse cuidado en la interpretacin de estos tiempos
de proceso, ya que es necesario considerar que factores como memoria disponible,
CPU disponible, procesos ejecutndose simultneamente, pueden variar, a menudo
de forma considerable, los tiempos descritos.
4.4.
RECONOCIMIENTO DE CARACTERES
Como parte de este proyecto se implement la integracin de el mdulo desarrollado con un OCR 8 . El desarrollo separado de un mdulo de deteccin de placa
permite la integracin con tecnologas de reconocimiento de caracteres existentes,
evitando la necesidad de desarrollar esta tecnologa por separado.
El problema que hay que resolver para conseguir este objetivo es el de producir
resultados limpios, sin excesivas impurezas que puedan entorpecer el reconocimiento. Esta labor se vuelve mas complicada si se considera que, por estar las
7
8
Para una mejor comprensin de el procedimiento de proyeccin vertical, ver la Seccin 3.2.3
OCR: Optical Character Recognition Reconocedor ptico de Caracteres
CAPTULO 4. EVALUACIN
84
4.4.1.
GOCR
GOCR (GNU Optical Character Recognition) es una aplicacin para el reconocimiento de caracteres desarrollado por Jrg Schulemburg y liberado bajo licencia
libre. Puede descargarse de forma gratuita en:
http://altmark.nat.uni-magdeburg.de/ jschulen/ocr/index.html
La forma de uso de GOCR es la siguiente:
CAPTULO 4. EVALUACIN
85
4.4.2. INTEGRACIN
Con el propsito de automatizar el proceso de reconocimiento se desarroll un
script tipo bash. Este script, llamado vlpr (ver Anexo A.4), es el encargado de llamar al programa de deteccin de placa. Luego enva los resultados al OCR para el
reconocimiento. Esto hace posible ejecutar los dos procesos deteccin de placa y
reconocimiento de caracteres con una sola orden.
Tambin se escribi un script para realizar el entrenamiento del OCR. Este script se
llama trainer y consta en el Anexo A.4. Estos scripts realizan la integracin del sistema de deteccin de placa desarrollado en este proyecto de titulacin, y el sistema
de reconocimiento de caracteres elegido.
Para facilitar la lectura de los resultados, stos son presentados en una pgina web,
escrita en html. Un tercer script escrito en awk fue desarrollado para construir esta
pgina; ste consta en el Anexo A.4. La manera de usar estos scripts se explica en
el manual de usuario del programa en el Anexo B.
CAPTULO 4. EVALUACIN
86
4.4.3.
RESULTADOS EXPERIMENTALES
Nmero de Fotografas
54
46
100
%
54 %
46 %
100 %
Los casos de error se han clasificado en el Cuadro 4.11. Estos se deben principalmente a dos causas:
Ambigedad: el OCR se confunde con caracteres que son similares. Esto ocurre con caracteres como O (letra o), 0 (nmero 0), D (letra d).
CAPTULO 4. EVALUACIN
87
Nmero de fotografas
20
36
%
35.7 %
64.3 %
Figura 4.11: Ejemplo de imgenes que producen errores en el OCR. Errores de ambigedad (a) Similitud entre 6 y G, (b) Similitud entre 0 y O. (c) Errores en la
fotografa a reconocer
CAPTULO 5
CONCLUSIONES Y RECOMENDACIONES
5.1.
CONCLUSIONES
El propsito de este proyecto ha sido construir una aplicacin que extraiga el rectngulo que contiene la placa de identificacin en fotografas de vehculos. Para
alcanzarlo, se empez por enumerar las caractersticas de las placas vehiculares.
Esto sirvi para establecer un conjunto de requisitos que debera cumplir la aplicacin, requisitos que se escogieron para que no sean demasiado estrictos, y facilitar
en lo posible el desarrollo de la misma.
Luego se describieron los mtodos que se han desarrollado para resolver este problema anteriormente. Se expusieron tres de los mtodos mas comunes para la deteccin de la placa en una fotografa. Aunque entre estos, el que usa la proyeccin
de la imagen a lo largo de las ejes vertical u horizontal de la fotografa (ver Seccin
2.1.1) es la eleccin usual en la bibliografa consultada; para este proyecto se eligi
un mtodo diferente.
El mtodo elegido se expone en la Seccin 2.3. Este mtodo usa la forma de la
placa y su brillo para encontrarla y separarla de la fotografa. Este se eligi debido a
que resulta relativamente fcil de entender e implementar, y adems no consta en
la bibliografa consultada.
Este mtodo es planeado como un procedimiento de tres pasos. El primero encargado de preparar la imagen, y extraer las zonas mas brillantes de la misma.
El segundo, se encarga de analizar estas zonas brillantes y extraer aquellas que
tengan forma rectangular. Finalmente estos rectngulos son analizados usando el
88
89
mtodo de proyeccin con la finalidad de encontrar el nmero de picos caractersticos de una placa. Para realizar cada uno de estos pasos, se usan tcnicas de
procesamiento de imgenes ampliamente conocidas.
La aplicacin se implemento en C, debido a experiencia previa con ese lenguaje
de programacin, y a la naturaleza secuencial del mtodo propuesto. Se ha puesto
especial inters en el uso de libreras de cdigo para el procesamiento de imgenes. Esto tiene la ventaja de reducir el tiempo de desarrollo y los costos asociados,
adems de permitir el uso de cdigo existente que implementa las tcnicas de procesamiento de imgenes a usar. Un conjunto limitado de libreras fue evaluado,
pero finalmente se eligi OpenCV por implementar la mayora de las tcnicas de
procesamiento de imgenes necesarias, y adems poseer licencia libre. Aunque es
posible el uso combinado de libreras, esta opcin se desecho por que requera el
trabajo adicional de adaptar las diferentes formas para representar la imagen que
usa cada librera.
Para la evaluacin de los costos se usa el modelo COCOMO. Este modelo relaciona el costo de desarrollo de un programa, como funcin del nmero de lneas de
cdigo que lo conforman. Se us el programa SLOCCOUNT para contar las lneas
de cdigo de la aplicacin desarrollada, y aplicar el modelo. Si bien COCOMO no
proporciona resultados exactos, y sus crticos afirman que es un mal modelo pues
no considera factores como experiencia del programador, afinidad del grupo de trabajo, motivacin, etc, para una aplicacin desarrollada por una sola persona, como
la expuesta en este proyecto, es suficiente. El costo fue calculado en 2986 dlares,
tomando como referencia un salario anual para un programador de 7200 dlares.
Tambin se evalu el mtodo con un conjunto de fotografas de prueba. Estas fotografas fueron tomadas respetando los requisitos impuestos en el Captulo 1. De
esta evaluacin, el resultado de efectividad del mdulo es del 75 %.
Aunque ese porcentaje de xito no permite el uso del programa escrito en la mayora de aplicaciones prcticas que se le puedan dar, es lo suficientemente alto como
para considerar que el objetivo inicial de este proyecto se ha cumplido. El anlisis
de los resultados obtenidos, indica que la mayora de las causas de error se deben
al proceso de binarizacin llevado a cabo en la etapa de preprocesamiento de imagen. Esto se debe a que no siempre es posible encontrar un nivel de umbral que
separe la placa del resto de la fotografa. Este problema se presenta con preferencia
en autos que tienen el mismo color que la placa de identificacin. Al menos existen
dos maneras de corregir este problema. La primera consiste en un cambio en la
90
reglamentacin que obligue a los dueos de vehculos a montar la placa sobre una
superficie opaca, o que aumente el tamao del borde negro que rodea la placa. La
segunda implica modificar la aplicacin para que trabaje con fotografas de mayor
resolucin. Entre estas dos soluciones, la primera permitira aumentar el porcentaje
de xito en el reconocimiento sin necesidad de aumentar el tiempo que necesita la
aplicacin para procesar la imagen.
Como parte de este proyecto, se integr la aplicacin desarrollada con un programa
de reconocimiento ptico de caracteres. La finalidad de esta integracin es producir
una aplicacin que pueda obtener el nmero de la placa de identificacin partiendo
de la fotografa de un vehculo. Se evaluaron tres programas de reconocimiento.
Se eligi GOCR por ser el que mejores resultados present con un conjunto de
imgenes de prueba.
Las pruebas realizadas sobre esta integracin dan como resultado que es capaz
de encontrar correctamente el nmero de placa en un 54 % de las fotografas. Las
causas de error en el reconocimiento se presentan debido a ambigedad en caracteres como la letra O y el nmero 0, o a defectos como suciedad y deterioro
en los caracteres que forman el nmero de placa. En esta parte, un cambio de
reglamentacin se hace necesario para evitar la ambigedad.
En este proyecto se ha demostrado que un sistema de reconocimiento automtico
de nmero de placa de vehculos puede construirse con la tecnologa disponible.
Tambin se ha demostrado que los costos y la dificultad para la construccin de
dicho sistema pueden reducirse si se usan libreras de cdigo existentes. Adems
de que el uso de sistemas de reconocimiento ptico de caracteres disponibles en la
actualidad dan buenos resultados y evitan la necesidad de implementar uno exclusivamente para esta aplicacin.
En resumen, las siguientes conclusiones pueden extraerse de este proyecto:
91
un nivel de umbral que separe la placa del resto de la fotografa. Esto constituye una limitacin en el mtodo propuesto. Aunque esta limitacin puede
superarse por distintos medios, existen otros mtodos de deteccin de placa
que podran resultar mas econmicos en recursos, los cuales deben explorarse.
El borde negro que rodea a la placa, ayudara a superar esta limitacin. Desgraciadamente este borde es muy angosto, y tiende a deteriorarse con facilidad. Marcos como el de la Figura 5.1 son bastante comunes. Desgraciadamente la mayora de ellos se montan de tal manera que bloquean parte de
la placa e impiden al mecanismo de binarizacin segmentar la la fotografa
correctamente. No obstante, si estos marcos se montaran de tal forma que rodearan la placa sin tapar sus caracteres permitiran al proceso para deteccin
propuesto funcionar mejor.
Una posible implementacin de un verificador de sintaxis, considerara que los tres primeros
caracteres de la placa son letras y los segundos tres caracteres son nmeros. De acuerdo a esto, si
el reconocimiento de caracteres produce un nmero en el campo de letras, el verificador de sintaxis
corregira transformando este nmero en la letra con la que tenga mayor similitud de forma. De la
misma manera procedera si se encuentran letras en el campo de los nmeros. Por ejemplo, si el
reconocedor de caracteres produce un el nmero de placa 1T6-B4G, el reconocedor de sintaxis
92
93
Es mi opinin que los sistemas de vigilancia automtica no son recomendables. Una solucin mas efectiva, aunque requiere mas recursos es la educacin. Orwell en el ya clsico libro 1984 describi una sociedad controlada, que
es a donde nos dirigimos si seguimos buscando formas de vigilar a las personas. Es indudable que un sistema de vigilancia automtica es una herramienta
valiosa en las manos adecuadas. La pregunta entonces es Cules son las
manos adecuadas?. La historia nos ha enseado que cualquier persona en
una situacin de poder tiende a abusar de dicha situacin. Irnicamente esta
desconfianza en la naturaleza humana nos lleva a confiar en las personas y
eliminar la vigilancia.
Para tareas como el control de trfico otras soluciones pueden resultar mejores que el reconocimiento automtico de placa. Drachten4 , por ejemplo, es
una ciudad de Holanda que trata de solucionar sus problemas de trfico vehicular de una manera no ortodoxa y que al parecer les est dando buenos
resultados. Esta iniciativa consiste en eliminar lneas de seguridad, seales,
semforos y otros mtodos tradicionales de seguridad vial, forzando a los conductores a dejar de mirar las seales y empezar a mirar a las personas.
5.2.
RECOMENDACIONES
Aun queda mucho trabajo por realizar para obtener un sistema de deteccin de
placa fiable. Una serie de mejoras pueden realizarse al trabajo expuesto en este
documento con la finalidad de mejorar el porcentaje de xito y reducir los tiempos de
procesamiento. A continuacin se exponen algunas recomendaciones para futuros
trabajos sobre el tema.
94
muy poco, es probable que stas produzcan los mismos rectngulos. Por esta
razn es necesaria la eliminacin de rectngulos duplicados.
En la misma figura puede verse una implementacin que no produce informacin duplicada. Aqu las imgenes obtenidas luego de la binarizacin son
analizadas individualmente en busca de la placa. De esta manera se reducen
tambin los tiempos de procesamiento, aunque de una forma aleatoria. En
el mejor de los casos, el programa solamente necesita analizar una imagen
binaria para encontrar la placa del vehculo. En el peor, el programa necesita
analizar las imgenes binarias para todos los umbrales en los tres canales de
color.
El tiempo promedio de procesamiento puede reducirse aun mas si el anlisis
anterior se realiza empezando por los umbrales en los que es mas probable
se encuentre la placa del vehculo.
Un mtodo alterno para la deteccin de placa que no requiere la binarizacin
y solo necesita que exista un claro contraste entre el fondo de la placa y los
95
caracteres que contiene puede verse en la Figura 5.4. Este mtodo usa el
operador morfolgico apertura con un elemento estructurante horizontal con la
finalidad de producir lneas paralelas al rededor del nmero de placa como se
muestra en la Figura 5.5. Estas lneas pueden encontrarse usando un mtodo
como la transformada de Hough, o incluso usando la proyeccin a lo largo del
eje vertical de la imagen.
ltimamente se ha planteado, como medida para mejorar el trnsito vehicular en Quito, un esquema de control de trfico que impone restricciones a la
circulacin de vehculos de acuerdo al nmero de placa. Esto requiere que
personal de la polica o el municipio se encargue de verificar los nmeros de
placa de los vehculos circulando.
Futuros trabajos en el tema de reconocimiento de matrculas podran referirse
a la implementacin de sistemas completos, que incluiran los elementos para
96
Bibliografa
[1] Jun-Wei Hsieh, Shih-Hao Yu , and Yung-Sheng Chen. Morphology-based License Plate Detection from Complex Scenes. Proceedings of the 16 th International Conference on Pattern Recognition (ICPR02).
[2] Bai Hongliang and Liu Changping. A hybrid License Plate Extraction Method
Based On Edge Statistics and Morphology. Proceedings of the 17th International Conference on Pattern Recognition (ICPR04).
[3] Sebastin Thrun, Gary Bradski, Daniel Russakoff. Stanford course cs223b on
computer vision. http://robots.stanford.edu/cs223b
[4] Reglamento a la Ley de Trnsito y Transporte Terrestre. Decreto Ejecutivo No.
505. RO/ Sup 118 de 28 de Enero de 1997.
[5] 3M Traffic Control Materials Division. 3M Scotchlite(tm) Engineer Grade Reflective Sheeting, series 320, Product Bulletin 3260. September 1996.
[6] Ching-Tang Hsieh, Yu-Shan Juan, Kuo-Ming Hung, Multiple License Plate Detection for Complex Background. Proceedings of the 19th International Conference on Advanced Information Networking and Applications (AINA05).
[7] Ian T. Young, Jan J. Gerbrands, Lucas J. van Vliet, Fundamentals of image
Processing. Delft University of Technology, Netherlands. 1998.
[8] R. C. Gonzalez, R. E. Woods, Digital Image Processing, 2nd Ed., Prentice Hall.
2002.
[9] Antoine Desilets Revelo mis Fotos, Ediciones Daimon, Barcelona-Espaa.
1973.
[10] J. Canny. A Computational Approach to Edge Detection, IEEE Trans. on Pattern
Analysis and Machine Intelligence, 8(6), pp. 679-698 (1986).
97
BIBLIOGRAFA
98
[11] Halina Kwasnicka and Bartosz Wawrzyniak. License plate localization and recognition in camera pictures. Conference In Artificial Intelligence Methods. AIMETH 2002.
[12] Feng Yang, Zheng Ma. Vehicle License Plate location Based on Histogramming
and Mathematical Morphology. Proceedings of the Fourth IEEE Workshop on
Automatic Identification Advanced Technologies (AutoID05).
[13] Sunghoon Kim, Daechul Kim, Younbok Ryu, and Gyeonghwan Kim. A Robust
Licence-Plate Extraction Method under Complex Image Conditions. Proceedings of the 16 th International Conference on Pattern Recognition (ICPR02).
IEEE Computer Society.
[14] Intel Corporation. Open Source Computer Vision Library Reference Manual.
Intel Corporation. 2001.
[15] Arturo Legarda Senz, Mario I. Chacn M. Alejandro Zimmerman Sols. Localizacin De Placas En Vehculos Automotores. Instituto Tecnolgico de
Chihuahua.
[16] Mi-Ae Ko, Young-Mo Kim. License Plate Surveillance System Using Weighted
Template Matching. Proceedings of the 32nd Applied Imagery Pattern Recognition Workshop (AIPR03).
[17] Tran Duc Duan, Tran Le Hong Du, Tran Vinh Phuoc, Nguyen Viet Hoang. Building an Automatic Vehicle License-Plate Recognition System. Intl. Conf. in
Computer Science RIVF05. February 2005, Can Tho, Vietnam.
[18] Martnez Gonzalo. Estudio de diferentes mtodos de extraccin de caractersticas fsicas de imagen y su aplicacin al reconocimiento de patrones. Tesis.
Escuela Politcnica Nacional. 1999.
[19] Yusuf A Syed, Sarfraz M. Color Edge Enhancement based Fuzzy Segmentation of License Plates. Proceedings of the Ninth International Conference on
Information Visualisation (IV05).
[20] Hany Farid. Fundamentals of image procesing. Darmouth University Press.
1997.
[21] John C. Cruss, The image Processing Handbook, CRC Press, 1995.
[22] M. Shridhar and J. W. V. Miller G. Houle and Leendert Bijnagte. Recognition of
Licence Plate Images: Issues and Perspectives. Electrical & Computer Eng
BIBLIOGRAFA
99
BIBLIOGRAFA
100
ANEXO A
CDIGO FUENTE
101
A.1.
A.1.1.
102
A.1.3.
103
A.2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
PROGRAMA PRINCIPAL
<s t d i o . h>
<h i g h g u i . h>
" p a r s e a r g s . h"
" auxfunc . h"
" imgproc . h"
" vlpdgeom . h"
int
CvMemStorage * almacen ;
CvMemStorage * almacen2 ;
int cs , t s ;
// umbrales
double umbral [ ] = { 6 8 , 7 5 , 1 1 0 , 1 3 5 , 1 4 3 , 1 5 7 , 1 7 5 , 1 9 0 , 2 0 9 } ;
// proceso de argumentos de entrada
struct arguments argumentos ;
argumentos . v e r b o s e = 0 ;
argumentos . otsu_div = OTSU_DIV;
argumentos . max_area = MAX_AREA;
argumentos . min_area = MIN_AREA;
argumentos . max_area_comun = MAX_AREA_COMUN;
argumentos . max_cos = COS_MAX;
argumentos . max_rel = REL_MAX;
argumentos . min_rel = REL_MIN;
argumentos . res_ht = RESULT_HT;
argumentos . res_wt = RESULT_WT;
argumentos . dp_dist_min = DP_DIST_MIN;
argumentos . std_dev_max_val = STD_DEV_MAX_VAL;
argumentos . std_dev_min_val = STD_DEV_MIN_VAL;
argumentos . avg_max_val = AVG_MAX_VAL;
argumentos . avg_min_val = AVG_MIN_VAL;
argumentos . pk_min_sep = PK_MIN_SEP;
argumentos . pk_max_down = PK_MAX_DOWN;
argumentos . pk_max_sep = PK_MAX_SEP;
argumentos . pk_max_up = PK_MAX_UP;
argp_parse (&argp , argc , argv , 0 , 0 , &argumentos ) ;
104
if
105
( ! img0 )
{
printf
( "No
return
1;
se
puede
abrir
%
s \n" ,
argumentos . a r g s [ 0 ] ) ;
(" Inicializando
temp =
result
cvCreateImage
Imagenes
Temporales . . . \ n" ) ;
( cvGetSize
( img0 ) ,
IPL_DEPTH_8U,
1);
cvCreateImage
( cvGetSize
( img0 ) ,
IPL_DEPTH_8U,
1);
cvCreateImage
( cvGetSize
( img0 ) ,
IPL_DEPTH_8U,
1);
cvCloneImage
( img0 ) ;
(" Inicializando
=
almacen2
memoria
cvCreateMemStorage
cvCreateMemStorage
rectangulos
cvCreateSeq
de
alocacion
Dinamica . . . \ n" ) ;
(0);
(0);
sizeof
(0 ,
sizeof
( CvSeq ) ,
( CvPoint ) ,
almacen2 ) ;
// Lazo principal.
if ( a r g u m e n t o s . v e r b o s e )
printf
for
( cs
(" Iniciando
=
1;
c s <=
rutina
3;
principal
. . .
\n" ) ;
c s ++)
( " Separando
cvSetImageCOI
( img0 ,
cvCopy
gray ,
for
( img0 ,
( ts
0;
ts
<
el
canal
%
d\n" ,
cs ) ;
cs ) ;
0);
9;
t s ++)
// ecualizacion
if ( a r g u m e n t o s . v e r b o s e )
printf
( " Ecualizando
cvEqualizeHist
if
( gray ,
imagen . . . \ n" ) ;
canalx ) ;
( argumentos . v e r b o s e
&&
ts
==
4)
{
cvNamedWindow
cvShowImage
cvWaitKey
1);
canalx ) ;
(0);
cvDestroyWindow
( " Binarizando
cvThreshold
if
( canalx ,
imagen ,
canalx ,
( argumentos . v e r b o s e
&&
nivel
de
umbral
umbral [ t s ] ,
ts
==
255 ,
%f \ n " ,
umbral [ t s ] ) ;
CV_THRESH_BINARY ) ;
4)
{
cvNamedWindow
cvShowImage
cvWaitKey
1);
canalx ) ;
(0);
cvDestroyWindow
if
( argumentos . v e r b o s e )
printf
( " Encontrando
Contornos . . . \ n" ) ;
( canalx ,
sizeof
almacen ,
CV_LINK_RUNS,
if
( argumentos . v e r b o s e
&c o n t o r n o s ,
( C v C ontour ) ,
&&
ts
CV_RETR_LIST,
cvPoint
==
(0 ,
0));
4)
( " Encontrados
IplImage
*img1
cvSetImageCOI
cvDrawContours
cvNamedWindow
cvShowImage
%
d
c o n t o r n o s \n" ,
cvCloneImage
( img1 ,
( img1 ,
contornos
> t o t a l
( img0 ) ;
0);
contornos ,
cvScalar
(1 ,
255 ,
1,
1) ,
cvScalar
(1 ,
255 ,
1,
1) ,
1);
img1 ) ;
1,
2,
8);
);
cvWaitKey ( 0 ) ;
cvDestroyWindow ( " Contornos " ) ;
c v R e l e a s e I m a g e (&img1 ) ;
if ( argumentos . v e r b o s e )
if ( argumentos . v e r b o s e )
cvSetImageCOI ( img0 , 0 ) ;
// seleccion y filtrado
//transformacion Geometrica
p r i n t f ( " Se ha e n c o n t r a d o %d p l a c a s v e h i c u l a r e s \n" ,
r e c t a n g u l o s >t o t a l / 4 ) ;
// liberacion de recursos
cvReleaseImage
cvReleaseImage
cvReleaseImage
cvReleaseImage
cvReleaseImage
(&img0 ) ;
(& r e s u l t ) ;
(& gray ) ;
(& c a n a l x ) ;
(&temp ) ;
// memoria
cvReleaseMemStorage (&almacen ) ;
cvReleaseMemStorage (&almacen2 ) ;
if ( r e c t a n g u l o s >t o t a l == 0 )
}
}
106
p r i n t f ( "No s e ha e n c o n t r a d o l a p l a c a d e l v e h i c u l o \n\n" ) ;
return ( 1);
return ( 0 ) ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
A.3.
FUNCIONES AUXILIARES
A.3.1.
107
/*
* Parseargs.h
* Funciones para el procesamiento de argumentos de entrada
*
* (c) 2006 Diego F. Asanza
*
*/
#ifndef _PARSEARGS_H
#define _PARSEARGS_H
#ifdef __cplusplus
extern "C"
#endif
#include <argp . h>
#include < g l i b . h>
const char * argp_program_version = " vlpd 0 . 2 " ;
const char * argp_program_bug_address = "<d i e g o _ a s a n z a @ i e e e . org>" ;
struct arguments
};
char * a r g s [ 2 ] ;
///< Archivo de entrada, archivo de salida
double otsu_div ;
///< Divisor para el metodo de otsu
double max_cos ;
///< Maximo coseno entre angulos de lados adyacentes
double max_rel ;
///< Maxima relacion entre lados
double min_rel ;
///< Minima relacion entre lados
int res_wt ;
///< Ancho de la imagen resultante
int res_ht ;
///< Alto de la imagen resultante
int min_area ;
///< Area minima
int max_area ;
///< Area maxima
double dp_dist_min ; ///< distancia minima para el algoritmo de DP
double std_dev_min_val ; ///<Minimo valor de la desviacion standard
double std_dev_max_val ; ///<max val de la desv standard
double avg_min_val ; ///<min val del promedio
double avg_max_val ; ///<max val del promedio
int pk_min_sep ; ///<minima separacion entre picos
int pk_max_sep ; ///<max separacion entre picos
int pk_max_up ; ///<mumero de picos sobre limite_superior
int pk_max_down ; ///<Numero de picos bajo limite_inferrior
double max_area_comun ; ///<area comun para considerar duplicados
int v e r b o s e ;
///< Switch de depuracion
};
arguments >v e r b o s e = 1 ;
break ;
case ' u ' :
break ;
case ' c ' :
break ;
case ' r ' :
break ;
case 'R ' :
break ;
case 'w ' :
break ;
case ' h ' :
break ;
case ' a ' :
break ;
case 'A ' :
break ;
case 'D ' :
break ;
case ' s ' :
break ;
case ' S ' :
break ;
case ' p ' :
break ;
case 'P ' :
break ;
case ' k ' :
break ;
case 'K ' :
break ;
case 'U ' :
break ;
case ' d ' :
108
break ;
case 'C ' :
break ;
case ARGP_KEY_ARG:
if ( s t a t e >arg_num >= 2 )
argp_usage ( s t a t e ) ;
}
arguments >a r g s [ s t a t e >arg_num ] = a r g ;
break ;
case ARGP_KEY_END:
if ( s t a t e >arg_num < 2 )
{
argp_usage ( s t a t e ) ;
}
break ;
default :
return ARGP_ERR_UNKNOWN;
}
return 0 ;
outfile";
static char doc [ ] = " vlpd E ste programa toma como e n t r a d a una \
f o t o g r a f i a de l a p a r t e f r o n t a l o p o s t e r i o r de un v e h i c u l o , \
y produce como s a l i d a una f o t o g r a f i a que c o n t i e n e l a p l a c a de d i c h o \
v e h i c u l o . \ v . Para mas i n f o r m a c i o n c o n s u l t e e l manual . " ;
static struct argp argp = { o p t i o n s , parse_opt , args_doc , doc } ;
#ifdef __cplusplus
#endif
#endif /* _PARSEARGS_H */
A.3.2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
109
/***************************************************************************
auxfunc.h
*
*
* Sun Aug 27 15:36:39 2006
* Copyright 2006 Diego F. Asanza
* diego_asanza@ieee.org
****************************************************************************/
/*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
/* Definicion de funciones
* Las funciones aqui definidas se implementan en auxfunc.c
*/
110
#ifndef _AUXFUNC_H
#define _AUXFUNC_H
#ifdef __cplusplus
extern "C"
#endif
#include <cv . h>
#include <c x c o r e . h>
/**\brief El area minima que debe tener un contorno para ser candidato
a placa
*
*/
#define DP_DIST_MIN 0 . 0 2 5
/**\brief El valor del coseno de angulos adyacentes.
*/
#define COS_MAX 0 . 3
/**\brief La maxima relacion entre lados del rectangulo */
#define REL_MAX 2 . 7
/**\brief La minima relacion entre lados del rectangulo */
#define REL_MIN 1 . 3
/**\brief El ancho de la imagen resultado */
#define RESULT_WT 100
/**\brief El alto de la imagen resultado */
#define RESULT_HT 50
/**\brief Divisor para el metodo de otsu */
#define OTSU_DIV 1 . 6
/**\brief Encuentra rectangulos en un conjunto de contornos, que cumplan
* con ciertas condiciones.
* @param contornos Un puntero a la ubicacion de los contornos a analizar
* @param rectangulos Puntero al almacenamiento para los rectangulos
encontrados.
*
* @param area_min El area minima que necesita el contorno para ser
considerado un rectangulo valido
*
* @param area_max El area maxima que necesita el contorno para ser
considerado un rectangulo valido.
*
* @param cos_max El \f$|\cos(\Phi)|\f$ maximo del angulo \f$\Phi\f$ entre
lados consecutivos que el contorno necesita para ser
*
considerado rectangulo valido.
*
* @param rel_min Relacion minima entre el lado mas amplio y el mas angosto,
para que el rectangulo sea considerado valido.
*
* @param rel_max Relacion maxima entre el lado mas amplio y mas angosto para
que el contorno sea considerado un rectangulo valido.
*
* @param verbose Si es diferente de cero, muestra informacion util para la
depuracion.
*
*/
void f i n d R e c t a n g l e s ( CvSeq * c o n t o r n o s , CvSeq * r e c t a n g u l o s , int area_min ,
int area_max , double cos_max , double rel_min ,
double rel_max , int v e r b o s e , double dp_dist_min ) ;
/**\brief Encuentra los rectangulos en la imagen que contienen la placa del
del vehiculo.
*
*
* @param rectangulos Los rectangulos que se desean analizar.
* @param imagen La imagen sobre la que se buscara la placa del vehiculo
* @param width El ancho de la imagen resultado
* @param height El alto de la imagen resultado
* @param minsdev El valor minimo de la desviacion standard que debe cumplir
el rectangulo analizado para ser considerado placa.
*
* @param maxsdev El valor maximo de la desviacion standard que debe cumplir
el rectangulo analizado para ser considerado placa.
*
* @param minavg El valor promedio minimo que debe cumplir el rectangulo
analizado para ser considerado placa.
*
* @param
*
* @param
*
* @param
*
* @param
*
* @param
*
* @param
* @param
*
* @param
*
*/
#endif
/* _AUXFUNC_H */
#endif
/* auxfunc.c
* implementacion de las funciones auxiliares
*
* (c) Diego F. Asanza 2006
*/
#include
#include
#include
#include
#include
111
<s t d i o . h>
<h i g h g u i . h>
" auxfunc . h"
" imgproc . h"
" vlpdgeom . h"
/* Funcion findRectangles
* @args: Secuencia contornos, secuencia rectangulos, int verbose flag
* Analiza los elementos de una secuencia de contornos, los aproxima
* a poligonos, y devuelve aquellos que mas se aproximen a rectangulos
* con una relacion de ancho a alto de 2.
*/
void
CvMemStorage * s t o r a g e 2 ;
float s , r , t , p ;
int i ;
s t o r a g e 2 = cvCreateMemStorage ( 0 ) ;
while ( c o n t o r n o s )
if ( r e s u l t >t o t a l == 4 &&
s = 0;
r = 0;
for ( i = 0 ; i < 5 ; i ++)
{
// encuentra el angulo entre lados adyacentes
//encuentra la proporcion entre lados adyacentes
if ( i >= 2 )
t = fabs ( angle
( ( CvPoint * )
cvGetSeqElem ( r e s u l t , i ) ,
( CvPoint * )
cvGetSeqElem ( r e s u l t ,
i 2) ,
( CvPoint * ) cvGetSeqElem ( r e s u l t , i 1 ) ) ) ;
p = fabs ( proporcion
( ( CvPoint * )
cvGetSeqElem ( r e s u l t , i ) ,
( CvPoint * )
cvGetSeqElem ( r e s u l t ,
i 2) ,
( CvPoint * ) cvGetSeqElem ( r e s u l t , i 1 ) ) ) ;
s = s > t ? s : t;
r = r > p ? r : p;
cvSeqPush ( r e c t a n g u l o s ,
( CvPoint * ) cvGetSeqElem ( r e s u l t , i ) ) ;
}
c o n t o r n o s = c o n t o r n o s >h_next ;
}
cvReleaseMemStorage (& s t o r a g e 2 ) ;
/* imagen drawSquares
112
CvSeqReader r e a d e r ;
I p l I m a g e * cpy = cvCloneImage ( img ) ;
int i ;
CvPoint pt [ 4 ] ;
// inicializa el lector de secuencias
cvStartReadSeq ( s q u a r e s , &r e a d e r , 0 ) ;
CvPoint * r e c t = pt ;
int count = 4 ;
// lee los cuatro vertices del rectangulo
/* FindPlate
* @args: secuencia rectangulos, imagen imagen, int verb. flag,
char nombre_archivo
*
* Encuentra las placas en la secuencia de rectangulos, las recorta de la imagen
* y las almacena en nombre_archivo.
*/
void
f i n d P l a t e ( CvSeq * r e c t a n g u l o s , I p l I m a g e * imagen , int width , int h e i g h t ,
double minsdev , double maxsdev , double minavg , double maxavg ,
int pkmin , int pkmax , int pkup , int pkdown , double otsu_div ,
int v e r b o s e , char * a r c h i v o _ s a l i d a )
if ( v e r b o s e )
{
}
CvPoint t p t [ 4 ] ;
CvPoint2D32f s r c [ 4 ] ;
CvPoint2D32f d s t [ 4 ] ;
dst
dst
dst
dst
[0]
[1]
[2]
[3]
=
=
=
=
cvPoint2D32f
cvPoint2D32f
cvPoint2D32f
cvPoint2D32f
//contadores varios.
int i , j , a r c v = 0 ;
(0 , height ) ;
(0 , 0);
( width , h e i g h t ) ;
( width , 0 ) ;
113
CvMat * map_matrix ;
IplImage * re su lta d o ;
I p l I m a g e * temp ;
IplImage * f i n a l , * r e s ;
double th ;
r e s u l t a d o = cvCreateImage ( c v G e t S i z e ( imagen ) , 8 , 3 ) ;
temp = cvCreateImage ( c v S i z e ( width , h e i g h t ) , 8 , 3 ) ;
f i n a l = cvCreateImage ( c v S i z e ( width , h e i g h t ) , 8 , 1 ) ;
r e s = cvCreateImage ( c v S i z e ( width , h e i g h t ) , 8 , 1 ) ;
if ( v e r b o s e )
//rectangulos>total varia.
//ordena los vertices de tpt1 en src
o r d e n a r _ v e r t i c e s ( tpt , s r c ) ;
if ( v e r b o s e )
cvCopy ( r e s u l t a d o , temp , 0 ) ;
cvResetImageROI ( r e s u l t a d o ) ;
114
cvEqualizeHist ( final , f i n a l ) ;
num =
a n a l i s i s _ p r o y e c c i o n ( f i n a l , minsdev , maxsdev , minavg , maxavg , pkmin ,
pkmax , pkup , pkdown , v e r b o s e ) ;
if ( v e r b o s e )
p r i n t f ( " A n a l i s i s de proy v e r t i c a l = %d \n" , num ) ;
if (num == 1 2 )
{
//binarizacion usando otsu
th = cvOtsu ( f i n a l , v e r b o s e ) ;
if ( v e r b o s e )
c v R e l e a s e I m a g e (& r e s u l t a d o ) ;
c v R e l e a s e I m a g e (&temp ) ;
c v R e l e a s e I m a g e (& f i n a l ) ;
IplImage * res1 ;
r e s 1 = cvCreateImage ( c v G e t S i z e ( imagen ) , 8 , 1 ) ;
if ( v e r b o s e )
{
cvNamedWindow ( " f i n a l " , 1 ) ;
cvShowImage ( " f i n a l " , imagen ) ;
cvWaitKey ( 0 ) ;
cvDestroyWindow ( " f i n a l " ) ;
}
c v D i l a t e ( imagen , r e s 1 , NULL, 1 ) ;
if ( v e r b o s e )
{
cvNamedWindow ( " d i l a t e " , 1 ) ;
cvShowImage ( " d i l a t e " , r e s 1 ) ;
cvWaitKey ( 0 ) ;
cvDestroyWindow ( " d i l a t e " ) ;
}
cvErode ( r e s 1 , imagen , NULL, 1 ) ;
if ( v e r b o s e )
{
cvNamedWindow ( " e r o d e " , 1 ) ;
cvShowImage ( " e r o d e " , imagen ) ;
cvWaitKey ( 0 ) ;
cvDestroyWindow ( " e r o d e " ) ;
115
}
c v R e l e a s e I m a g e (& r e s 1 ) ;
A.3.3.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
116
PROCESAMIENTO DE IMAGEN
/***************************************************************************
imgproc.h
*
*
* Sun Aug 27 15:17:58 2006
* Copyright 2006 Diego F. Asanza
* diego_asanza@ieee.org
****************************************************************************/
/*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
#ifndef _IMGPROC_H
#define _IMGPROC_H
#ifdef __cplusplus
extern "C"
#endif
#include <cv . h>
#include <c x c o r e . h>
/** \brief Ecualiza la imagen.
*
Este algoritmo ecualizacion es una adaptacion de un algoritmo
*
* implementado en OpenCV 0.98.
* @param src Imagen a ecualizar
* @param dst Imagen donde almacenar el resultado
*/
void c v E q u a l i z e H i s t ( I p l I m a g e * s r c , I p l I m a g e * d s t ) ;
/**
\brief Encuentra el umbral optimo usando el metodo de otsu
*
Usa el metodo de otsu para encontrar el nivel optimo de umbral. Devuelve
*
un entero que representa el nivel de umbral calculado usando el metodo de
*
* otsu. Puede estar entre 0 y 255.
*
@param imagen Imagen de la cual calcular el nivel optimo de umbral
*
@param verbose si es diferente de cero muestra la informacion de depuracion
*
*/
int cvOtsu ( I p l I m a g e * imagen , int v e r b o s e ) ;
/**
*
*
*
*
*
*
*/
#endif
#endif
/* _IMGPROC_H */
/***************************************************************************
imgproc.c
*
Funciones para el procesamiento de imagenes
*
* Sun Aug 27 13:09:15 2006
* Copyright (c)2006 Diego F. Asanza, Escuela Politcnica Nacional.
* diego_asanza@ieee.org
****************************************************************************/
/*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
//Declaracion de variables
CvHistogram * h i s t = 0 ;
CvMat * l u t = 0 ;
int i , h i s t _ s z = 2 5 6 ;
CvSize img_sz ;
float s c a l e ;
float * h ;
int sum = 0 ;
int type ;
117
type
if
cvGetElemType
( type
!=
118
( src );
CV_8UC1)
{
printf
exit
( " CvEqualize ,
tipo
no
reconocido " ) ;
1);
=
=
cvCreateHist
cvCreateMat
(1 ,
(1 ,
&h i s t _ s z ,
256 ,
CV_HIST_ARRAY,
NULL,
0);
CV_8UC1 ) ;
(& s r c ,
hist ,
cvGetSize
0,
NULL ) ;
( src );
//escala: 255/totaldepixeles
scale
h =
255. f
float * )
( img_sz . w i d t h
cvPtr1D
( hist
* img_ sz . h e i g h t
>b i n s , 0 , 0 ) ;
);
>d a t a . p t r [
(h [ i ] ) ;
i ]
( uchar )
cvRound
( sum
scale );
}
l u t >d a t a . p t r [ 0 ] = 0 ;
//aplica la LUT (hace la ecualizacion)
cvLUT
( src ,
dst ,
lut );
( IplImage
int
imagen ,
verbose )
if
( verbose )
printf
(" Iniciando
la
deteccion
//Declaracion de variables
CvHistogram * h i s t = 0 ;
int i , h i s t _ s z = 2 5 6 ;
float * h ;
int sum = 0 , t h = 0 ;
double mom = 0 ;
int t y p e ;
double fmax = 1 , csum = 0 . 0
int n1 = 0 , n2 = 0 ;
m1 ,
optima
m2 ,
de
umbral \n" ) ;
sb ;
if
cvGetElemType
( type
!=
( imagen ) ;
CV_8UC1)
{
printf
exit
( " cvOtsu ,
tipo
no
reconocido " ) ;
1);
//Inicializa el histograma
hist
cvCreateHist
(1 ,
&h i s t _ s z ,
CV_HIST_ARRAY,
(& i m a g e n ,
hist ,
0,
NULL ) ;
NULL,
0);
h =
float * )
cvPtr1D
( hist
>b i n s
119
0,
0);
(h [ i ] ) ;
double )
* ( double )
cvRound
(h [ i ] ) ;
if
(h [ i ] ) ;
( ! n1 )
{
continue ;
}
n2
= sum
if
n1 ;
( n2 ==
0)
break ;
}
csum +=
double )
m1 = csum
(mom
sb
if
( sb
* cvRound
csum ) / n2 ;
double ) n1 * ( double )
m2 =
=
>
(h [ i ] ) ;
n1 ;
n2
* (m1
m2 )
( m1
m2 ) ;
fmax )
{
fmax
th
sb ;
i ;
if
( verbose )
printf
return
( " Umbral
optimo
otsu
%
d\n" ,
th ) ;
th ;
( IplImage
img , CvMat
* pv , int
verbose )
{
CvMat
int
*tp , * o p t ;
i ;
>w i d t h , CV_32SC1 ) ;
>w i d t h , CV_8SC1 ) ;
t p=c v C r e a t e M a t ( 1 , img
o p t=c v C r e a t e M a t ( 1 , img
c v C o n v e r t S c a l e ( opt , tp , 1 , 0 ) ;
cvAdd ( t p , pv , pv , 0 ) ;
}
c v R e l e a s e M a t (& t p ) ;
c v R e l e a s e M a t (& o p t ) ;
}
char *
make_message
value )
if
( nchars
!=
value ) ;
size )
( buffer
snprintf
!=
NULL)
( buffer ,
name ,
size ,
%d . png " ,
"%
s
value ) ;
return
buffer ;
A.3.4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
FUNCIONES AUXILIARES
/***************************************************************************
vlpdgeom.h
*
*
* Sun Aug 27 15:12:28 2006
* Copyright 2006 Diego F. Asanza
* diego_asanza@ieee.org
****************************************************************************/
/*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
_VLPDGEOM_H
_VLPDGEOM_H
__cplusplus
"C"
#endif
#include
< c x c o r e . h>
120
121
* devuelve \f$0\f$.
*
@param pt0[],pt1[] vectores que contienen las coordenadas de los vertices
*
de los rectangulos a comparar.
*
@param ca Corresponde a 1+(maxima area compartida)
*
*/
int c o m p a r e _ e l e m e n t s ( CvPoint p t 0 [ ] , CvPoint p t 1 [ ] , double c a ) ;
/** \brief Toma los elementos de la parte de arriba de la pila
*
@param squares La pila de rectangulos
*
@param pt[] vector donde colocar los vertices del rectangulo de arriba
*
de la pila
*
*/
void pop_element ( CvSeq * s q u a r e s , CvPoint p t [ ] ) ;
/** \brief Coloca los elementos en la parte inferior de la pila
*
@param squares La pila de rectangulos
*
@param pt[] vector que contiene los vertices del rectangulo que se
*
colocara al final de la pila.
*
*/
void push_element_end ( CvSeq * s q u a r e s , CvPoint p t [ ] ) ;
/** \brief Coloca los elementos en la parte superior de la pila
*
@param squares La pila de rectangulos
*
@param pt[] vector que contiene los vertices del rectangulo que se
*
colocara al principio de la pila.
*
*/
void push_element ( CvSeq * s q u a r e s , CvPoint p t [ ] ) ;
/** \brief Esta funcion encuentra el angulo entre dos vectores
*
Devuelve el valor del coseno del angulo entre pt1<pt0>pt2.
*
* Usa la ley del
coseno.
*
*
@param pt0,p11,pt2 los puntos. pt0 es el punto central.
*
*/
double a n g l e ( CvPoint * pt1 , CvPoint * pt2 , CvPoint * p t 0 ) ;
/** \brief Esta funcion encuentra la relacion entre dos vectores.
*
Devuelve el cociente de (pt1<>pt0)/(pt2<>pt0).
*
*
@param pt0,pt1,pt2 los puntos.
*
*/
double p r o p o r c i o n ( CvPoint * pt1 , CvPoint * pt2 , CvPoint * p t 0 ) ;
/** \brief Esta funcion elimina los rectangulos duplicados de la pila.
*
* Esta funcion toma una pila de rectangulos, y elimina los repetidos.
*
@param squares la pila que contiene los rectangulos.
*
@param ca el maxima area comun que pueden compartir dos rectangulos antes
*
antes de considerarse ser el mismo.
*
@param verbose si es diferente de cero, imprime informacion de depuracion.
*
*/
int d u p l i c a d o s ( CvSeq * s q u a r e s , double ca , int v e r b o s e ) ;
/** \brief Esta funcion ordena los vertices de tpt.
*
Devuelve los vertice de tpt ordenados en src. Ordena los vertices en src
*
* de tal
* forma que el primer elemento del arreglo sea el vertice
* ubicado en la esquina inferior izquierda del rectangulo ($pt0$), el segundo
* elemento del arreglo
* debe ser el ubicado en la esquina superior izquierda ($pt1$), el tercer
* elemento debe ser el vertice ubicado en la esquina inferior derecha($pt2$), y
* el cuarto debe estar ubicado en la esquina superior derecha($pt3$).
*
122
123
#endif
#endif
/* _VLPDGEOM_H */
/***************************************************************************
vlpdgeom.c
*
*
* Sun Aug 27 14:08:01 2006
* Copyright 2006 Diego F. Asanza
* diego_asanza@ieee.org
****************************************************************************/
/*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
/* compare_elements
* @args: Puntos[] pt0, puntos[] pt1
* compara los rectangulos definidos por pt0 y pt1.
* si se intersecan en mas del 30 % del area, se consideran iguales y la
* funcion devuelve 1.
*/
int
compare_elements ( CvPoint pt0 [ ] , CvPoint pt1 [ ] , double ca )
int dx , dy , lx 1 , lx 2 , ly 1 , ly 2 , lx , l y ;
//obtiene lx y ly
//corregir esta parte de la implementacion
/* comprueba si los dos rectanguloe se intersecan */
if ( abs ( pt0 [ 0 ] . x pt1 [ 0 ] . x ) + abs ( pt0 [ 2 ] . x pt1 [ 0 ] . x ) <
ca * abs ( pt0 [ 0 ] . x pt0 [ 2 ] . x )
&& abs ( pt0 [ 0 ] . y pt1 [ 0 ] . y ) + abs ( pt0 [ 2 ] . y pt1 [ 0 ] . y ) <
ca * abs ( pt0 [ 0 ] . y pt0 [ 2 ] . y ) )
{
}
return 1 ;
else
{
}
return 0 ;
/* pop_elemet
* @args: Secuencia rectangulos, Puntos[] puntos
* Lee los elementos de la secuencia de cuatro en
* cuatro, y los almacena en un vector de puntos
*/
void
pop_element ( CvSeq * s q u a r e s , CvPoint pt [ ] )
cvSeqPop
cvSeqPop
cvSeqPop
cvSeqPop
( squares
( squares
( squares
( squares
,
,
,
,
&pt [ 0 ] ) ;
&pt [ 1 ] ) ;
&pt [ 2 ] ) ;
&pt [ 3 ] ) ;
124
/* push_element_end
* @args: Secuencia rectangulos, Puntos[] puntos
* Guarda los cuatro elementos al final de la secuencia desde vector de puntos
*/
void
push_element_end ( CvSeq * s q u a r e s , CvPoint pt [ ] )
cvSeqPushFront
cvSeqPushFront
cvSeqPushFront
cvSeqPushFront
( squares
( squares
( squares
( squares
,
,
,
,
&pt [ 0 ] ) ;
&pt [ 1 ] ) ;
&pt [ 2 ] ) ;
&pt [ 3 ] ) ;
/* push_element
* @args: Secuencia rectangulos, Puntos[] puntos
* guarda los cuatro elementos del vector puntos al inicio de la secuencia.
*/
void
push_element ( CvSeq * s q u a r e s , CvPoint pt [ ] )
cvSeqPush
cvSeqPush
cvSeqPush
cvSeqPush
( squares
( squares
( squares
( squares
,
,
,
,
&pt [ 0 ] ) ;
&pt [ 1 ] ) ;
&pt [ 2 ] ) ;
&pt [ 3 ] ) ;
/* Funcion Angle
*
* Angle, encuentra el coseno del angulo entre los vectores formados por los
* puntos pt1pt0pt2. (ley del coseno);
*/
double
a n g l e ( CvPoint
{
double dx1 =
double dy1 =
double dx2 =
double dy2 =
return ( ( dx1
dy1
}
pt1 >x
pt1 >y
pt2 >x
pt2 >y
* dx2 +
* dy2 ) /
pt0 >x ;
pt0 >y ;
pt0 >x ;
pt0 >y ;
s q r t ( ( dx1 * dx1 + dy1 * dy1 ) * ( dx2 * dx2 +
dy2 * dy2 ) ) ) ;
/* Proporcion
* @args: punto pt1, punto pt2, punto pt0)
* Devuelve la relacion entre pt1<>pt0/pt2<>pt0
*/
double
p r o p o r c i o n ( CvPoint * pt1 , CvPoint * pt2 , CvPoint * pt0 )
double
double
double
double
return
/* duplicados
* @args: Secuencia Rectangulos
* Borra los elementos repetidos en una secuencia de rectangulos.
* Los rectangulos se consideran que encierran la misma area si comparten mas
* del 50 % de la misma. Devuelve cero si se ejecuto correctamente.
*/
int
d u p l i c a d o s ( CvSeq * s q u a r e s , double ca , int v e r b o s e )
if ( v e r b o s e )
p r i n t f ( " i n i c i a n d o l a e l i m i n a c i o n de d u p l i c a d o s \n" ) ;
CvPoint pt0 [ 4 ] ;
125
CvPoint
CvSeq
pt1 [ 4 ] ;
* temp ;
CvMemStorage
int
126
i ,
*storage
j ;
return
0;
temp =
cvCreateMemStorage
cvCreateSeq
(0 ,
(0);
sizeof
( CvSeq ) ,
sizeof
( CvPoint ) ,
storage ) ;
( squares ,
for
( j
0;
<
pt0 ) ;
( squares
> t o t a l )
4;
j ++)
{
pop_element
if
( squares ,
pt1 ) ;
( ! compare_elements
( pt0 ,
pt1 ,
ca ) )
{
push_element_end
( squares ,
pt1 ) ;
else
{
j
}
}
push_element_end
( squares ,
pt0 ) ;
}
cvReleaseMemStorage
if
(& s t o r a g e ) ;
( verbose )
printf
return
( " Eliminacion
de
duplicados
terminada .
\n" ) ;
0;
( CvPoint
tpt ,
CvPoint2D32f
int
i ,
k;
CvPoint
for
( i
tempt ;
0;
<
3;
i ++)
for
(k =
1;
k <
4;
k++)
if
( tpt [ i ] . x >
tpt [ k ] . x)
{
tempt
tpt [ i ] ;
tpt [ i ]
tpt [ k ] ;
tpt [ k ]
tempt ;
}
}
}
if
( tpt [ 0 ] . y >
tpt [ 1 ] . y)
{
src [ 0 ]
cvPointTo32f
( tpt [ 0 ] ) ;
src )
127
s r c [ 1 ] = cvPointTo32f ( tpt [ 1 ] ) ;
else
{
}
s r c [ 0 ] = cvPointTo32f ( tpt [ 1 ] ) ;
s r c [ 1 ] = cvPointTo32f ( tpt [ 0 ] ) ;
if ( t p t [ 2 ] . y > t p t [ 3 ] . y )
{
}
s r c [ 2 ] = cvPointTo32f ( tpt [ 2 ] ) ;
s r c [ 3 ] = cvPointTo32f ( tpt [ 3 ] ) ;
else
s r c [ 2 ] = cvPointTo32f ( tpt [ 3 ] ) ;
s r c [ 3 ] = cvPointTo32f ( tpt [ 2 ] ) ;
/* funcion analisis_proyeccion
* realiza el analisis de la proyeccion vertical
* calcula el numero de picos en la proyeccion que sobrepasan
* cierto nivel.
* Recibe como argumentos la imagen a analizar. Devuelve 12 a la salida si
* la proyeccion cumple con las caracteristicas de las placas. Devuelve 0
* si no cumple.
*/
int
a n a l i s i s _ p r o y e c c i o n ( I p l I m a g e * img , double minsdev , double maxsdev ,
double minavg , double maxavg , int dmin , int dmax ,
int picos_up , int picos_down , int v e r b o s e )
int p i c o s = 0 , r e s u l t a d o = 0 ;
CvMat * proy ;
CvMat * s c a l e ;
I p l I m a g e * temp1 ;
double min , max ;
CvPoint Min , Max ;
CvScalar avg , sdv ;
double maxsdv ;
int picos_min ;
double minsdv ;
double s c l ;
temp1 = cvCreateImage ( c v G e t S i z e ( img ) , 8 , 1 ) ;
proy = cvCreateMat ( 1 , img>width , CV_32SC1 ) ;
s c a l e = cvCreateMat ( 1 , img>width , CV_64FC1 ) ;
//bordes horizontales
//proyeccion vertical
//Analisis de la proyeccion.
//obtener maximo y minimo
s c l = 1 / max ;
c v C o n v e r t S c a l e ( proy , s c a l e , s c l , 0 ) ;
//calcula el numero de picos sobre avg+sdv. Estos picos deben estar separados
//al menos una distancia minima dmin y maxima dmax determinadas experimentalmente.
if ( v e r b o s e )
128
resultado = 12;
if ( v e r b o s e )
c v R e l e a s e I m a g e (&temp1 ) ;
cvReleaseMat (&proy ) ;
cvReleaseMat (& s c a l e ) ;
return r e s u l t a d o ;
int
int
int
for
picos = 0 , i ;
picoanterior = 0;
espico = 1;
( i = 1 ; i < s c a l e >c o l s 1 ; i ++)
if ( cvGetReal1D ( s c a l e , i 1 ) >= cvGetReal1D ( s c a l e , i )
p i c o s ++;
picoanterior = i ;
e s p i c o =0;
else
picoanterior = i ;
{
}
return p i c o s ;
( CvMat
double
scale ,
float
avg ,
int
minsdv ,
dmax ,
int
dmin )
int
int
int
for
picos
esvalle
0,
=
i ;
1;
picoanterior
( i
1;
<
0;
scale
> c o l s
1;
i ++)
if
( cvGetReal1D
( scale ,
&& c v G e t R e a l 1 D
( scale ,
1 ) <=
i ) >=
cvGetReal1D
cvGetReal1D
( scale ,
( scale ,
i )
i
1))
( esvalle )
{
if
(( i
&& c v G e t R e a l 1 D
picoanterior )
( scale ,
i )
>
>
dmin &&
( i
picoanterior )
< dmax
avg )
{
p i c o s ++;
picoanterior
i ;
e s v a l l e =0;
}
else
{
if
( cvGetReal1D
( scale ,
i )
>
avg )
{
picoanterior
i ;
}
}
}
}
if
( cvGetReal1D
( scale ,
&& c v G e t R e a l 1 D
( scale ,
1 ) >=
i ) <=
cvGetReal1D
cvGetReal1D
( scale ,
( scale ,
{
esvalle
1;
}
}
return
picos ;
A.4.
1
2
3
4
5
6
7
8
9
10
11
12
129
INTEGRACION OCR
# ! / b i n / bash
#Archivo v l p r
# E s t e s c r i p t a n a l i z a l a s i m a g e n e s e n f o r m a t o JPG
# u b i c a d a s e n e l d i r e c t o r i o u s a d o como a r g u m e n t o .
# E l r e s u l t a d o d e l a n a l i s i s e s g u a r d a d o e n una p a g i n a
# web e n e s e d i r e c t o r i o . S i s e d i s p o n e d e l n a v e g a d o r
# M o z i l l a , e l r e s u l t a d o s e a b r e en e s e n a v e g a d o r .
#
# Uso : v l p r [ D i r e c t o r i o ]
IMAGESDIR=$ 1
i )
i
+ 1)&&
cvGetReal1D
( scale ,
i )
<
minsdv )
BINDIR=/home / d i e g o / p r o c e s o / s c r i p t s
130
#d i r e c t o r i o
contiene
los
scripts
de
#v l p d
ACTUALDIR=$PWD
if
[[
$# !=
]]
then
echo
echo
vlpr :
Integracion
entre
vlpd
el
ocr
echo
echo
Uso :
vlpr
directorio
de
prueba
echo
exit
fi
#se
ejecuta
tester
$BINDIR/ t e s t e r
sobre
#se
procesa . log
cat
$IMAGESDIR / . l o g | t r
con
el
mozilla
cd
browser
file :
con
directorio
| tee
parse1
#abre
el
$IMAGESDIR
ese
"
de
imagenes ,
se
guarda
en
. log
$IMAGESDIR / . l o g
es
" | tr
el
resultado
"(" | tr
")" | tr
> $IMAGESDIR/ r e s u l t a d o s . h t m l
el
resultado
///$IMAGESDIR/resultados.html &
$ACTUALDIR
exit
# ! / b i n / bash
#
#Archivo t r a i n i n g
# E s t e s c r i p t de bash s e e n c a r g a de r e a l i z a r l a i n t e g r a c i o n e n t r e
#programa v l p d y e l r e c o n o c e d o r o p t i c o de c a r a c t e r e s .
#
# A n a l i z a l a s f o t o g r a f i a s en f o r m a t o j p g u b i c a d a s en e l d i r e c t o r i o
# p a s a d o como a r g u m e n t o . M u e s t r a e n p a n t a l l a l o s c a r a c t e r e s no
# r e c o n o c i d o s p o r e l OCR y e s p e r a e n t r a d a d e l u s u a r i o . Usado p a r a
# e n t r e n a r e l OCR.
#
# Uso : t r a i n i n g [ d i r e c t o r i o ]
#
IMAGESDIR=$ 1
VLPD=v l p d
#E l
#l a
directorio
ubicacion
OCR=/ u s r / b i n / g o c r
del
donde
estan
programa
#U b i c a c i o n
del
las
fotografias
el
analizar
vlpd
OCR
ACTUALDIR=$PWD
DBDIR=~/ v l p d / db #u b i c a c i o n
if
[[
$# !=
]]
de
la
base
de
datos
del
OCR
then
echo
echo
tester :
utilidad
para
integrar
vlpd
gocr
echo
echo
Uso :
tester
directorio
de
prueba
echo
exit
fi
#Si
no
#echo
cd
existe
la
Generando
base
de
datos
la
crea .
lista
de
archivos .
$IMAGESDIR
for
file
in
*. jpg
$file
#t r a b a j a m o s
solamente
con
archivos
terminados
do
if
echo
No
exit
] ; then
h ay
archivos
jpg
en
el
directorio
$IMAGESDIR
fi
echo
echo
$IMAGESDIR/ $ f i l e
f i l e o u t =$IMAGESDIR / ` e c h o
$ f i l e | cut
"."
f 1
en
jpg
#e c h o
if
$VLPD
131
$fileout
$file
$fileout
then
let
"SUCCESS += 1 "
let
"NUMBERTOTAL +=1"
else
continue
fi
#t r a n s f o r m a
#asume
una
convert
la
salida
placa
$fileout
por
de
vlpd
pgm
para
el
OCR
fotografia
0 . png
$ f i l e o u t . pgm
rm
$fileout
#mv
#R e a l i z a
$OCR
0 . png
/ home / d i e g o / p l a c a . pgm
el
/ home / d i e g o / p r o c e s o / r e s u l t a d o s / $ f i l e . pgm
reconocimiento
$DBDIR
ASCII
de
los
130
caracteres
650
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "
$ f i l e o u t . pgm
echo
let
"NUMBERTOTAL += 1 "
done
echo
cd
E x i t o s=$SUCCESS ,
Fotografias
e v a l u a d a s=$NUMBERTOTAL
$ACTUALDIR
exit
# ! / b i n / bash
#
#Archivo t e s t e r
# E s t e s c r i p t de bash s e e n c a r g a
#programa v l p d y e l r e c o n o c e d o r
#por e l s c r i p t v l p r
#
IMAGESDIR=$ 1
VLPD=v l p d
#E l
#l a
directorio
ubicacion
OCR=/ u s r / b i n / g o c r
del
de
realizar
optico
donde
estan
programa
#U b i c a c i o n
del
de
la
integracion
caracteres .
las
Es
fotografias
entre
el
llamado
analizar
vlpd
OCR
ACTUALDIR=$PWD
if
[[
$# !=
]]
then
echo
echo
tester :
utilidad
para
integrar
vlpd
gocr
echo
echo
Uso :
tester
directorio
de
prueba
echo
exit
fi
#echo
cd
Generando
lista
de
archivos .
$IMAGESDIR
for
file
in
*. jpg
$file
#t r a b a j a m o s
solamente
con
archivos
terminados
do
if
echo
No
exit
] ; then
h ay
archivos
jpg
en
el
directorio
$IMAGESDIR
fi
echo
echo
$IMAGESDIR/ $ f i l e
f i l e o u t =$IMAGESDIR / ` e c h o
#e c h o
if
$VLPD
$fileout
$file
$fileout
then
let
"SUCCESS += 1 "
let
"NUMBERTOTAL +=1"
else
continue
$ f i l e | cut
"."
f 1
en
jpg
132
fi
#t r a n s f o r m a
#asume
#l a
una
imagen
convert
la
salida
placa
por
devuelta
$fileout
de
vlpd
pgm
fotografia ,
por
0 . png
vlpd
para
el
solamente
terminada
OCR
toma
0. png
en
$ f i l e o u t . pgm
rm
$fileout
#R e a l i z a
$OCR
0 . png
el
reconocimiento
de
los
/ home / d i e g o / p r o c e s o / db /
caracteres
m 2 d
\
ASCII
450
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "
$ f i l e o u t . pgm
echo
let
"NUMBERTOTAL += 1 "
done
echo
cd
E x i t o s=$SUCCESS ,
Fotografias
e v a l u a d a s=$NUMBERTOTAL
$ACTUALDIR
exit
# ! / u s r / b i n / gawk f
#Archivo parse1
# e s llamado por e l s c r i p t v l p r
# E s t e s c r i p t toma l o s r e s u l t a d o s p r o d u c i d o s
# y l o s p r e s e n t a e n f o r m a d e una p a g i n a web
BEGIN
FS =
por
vlpr
"<h1
"<p r e >"
"
a l i g n =c e n t e r e d >
Resultados
Resultado
de
del
Reconocimiento
</h1>"
/ jpg /
"
if ( l e n g t h ( $ 3 ) > 6 | | l e n g t h ( $ 3 ) < 6 )
print
"<a
h r e f =\" f i l e : / / / "
$2
$ 2 "</a>\ t "
"<a
h r e f =\" f i l e : / / / "
$2
$2
"<b>ERROR_R</b>
else
"</a>\ t "
};
/ Exitos /
END {
{ print }
"</ p r e >"
"<p>"
"</body></h t m l>"
NR
"
registros
analizados
</p>
"
$3
\t"
$3
ANEXO B
MANUAL DE USUARIO
133
Manual de Usuario
Programa para la deteccion automatica
del n
umero placa en fotografas de vehculos
vlpd version 0.1. Junio 03, 2006.
Diego F. Asanza.
Esta edicion del manual es para el programa vlpd (version 0.1, 03 Junio 2006), un programa
de an
alisis de imagen para detectar y recortar las placas de identificaci
on en fotografas de
vehculos.
c 2006 Escuela Politecnica Nacional, Diego F. Asanza.
Copyright
Ladron de Guevara E11-102
Quito-Ecuador
http://www.epn.edu.ec
Este manual de usuario es un documento libre; puede reproducirlo y/o modificarlo bajo los terminos de la version 2 (o, a su eleccion, cualquier version
posterior) de la Licencia General P
ublica GNU tal como ha sido publicada por
la Free Software Foundation.
Este manual se distribuye con la esperanza de que sea u
til, pero sin ninguna
garanta, ni siquiera la garanta implcita de comerciabilidad o adecuacion a un
proposito particular.
Publicado por Diego F. Asanza.
Indice General
1
Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Instalaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Utilizaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.1 Programa vlpd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2 Programa training . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3 Programa vlpr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Licencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Indice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Captulo 1: Requisitos
1 Requisitos
Antes de instalar vlpd se deben cumplir los siguientes requisitos:
R
R
R
R
o compatibles.
, Centrino
II, III, IV, Celeron
Pentium
1. Procesador Intel
2. Al menos 128 MB de Ram.
3. Linux Kernel 2.6.8 o superior.
4. GNU Compiler Collection (GCC) Version 4.0.2 o superior.
R
Version 0.9-6 Beta 4.
5. Libreras OpenCV
Vlpd ha sido probado sobre las distribuciones de Linux:
Ubuntu version 6.06 LTS "Dapper Drake"
Ubuntu version 5.10 "Breezy Badger"
Debian version 3.01 "Sarge"
por lo que se recomienda su utilizacion. Este documento asume que se dispone de una
de estas distribuciones de Linux. Para mas informacion respecto a como conseguir estas
distribuciones, puede dirigirse a las siguientes direcciones electronicas:
P
agina Web del proyecto Debian: http://www.debian.org
P
agina Web del proyecto Ubuntu: http://www.ubuntu.com
Captulo 2: Instalacion
2 Instalaci
on
Luego de conseguir las funtes de vlpd, y antes de proceder con su instalacion es neceR
R
puede
. La instalacion de OpenCV
sario conseguir e instalar las libreras OpenCV
hacerse mediante las fuentes, que pueden descargarse de la pagina web del proyecto en
http://opencv. sourceforge.net, o por medio de los binarios, disponibles como *.deb o
*.rpm.
R
estan disponibles para aquellos que
En Debian y Ubuntu, los binarios de OpenCV
tienen una conexion a internet usando la herramienta apt en los repositorios oficiales. En
este caso para instalar las libreras se ejecutan los siguientes comandos en el bash:
para Ubuntu
#apt-get update
#apt-get install libcvaux-dev libcv-dev libhighgui-dev libglib2.0-dev
para Debian
#apt-get update
#apt-get install libopencv-dev libglib2.0-dev
Hay que recalcar que las libreras OpenCV aun estan en la etapa Beta de desarrollo,
lo que significa que pueden haber diferencias entre versiones, por lo que se recomienda
encarecidamente se use la version 0.9-6 Beta4, la cual esta disponible con Ubuntu 6.06.
Luego de tener instaladas las libreras OpenCV, se puede instalar vlpd. Para eso hay
que seguir los siguientes pasos
1. Conseguir las fuentes de VLPD. Estas estan disponibles en el CD que acompa
na este
manual.
2. Descomprimir las fuentes, esto se consigue ejecutando el siguiente comando:
diego@netstar:~/vlpd$ tar -zxvf vlpd_0.1.tar.gz
3. Ejecutar el script de autoconfiguracion
diego@netstar:~/vlpd$ ./configure
Este verifica que esten disponibles todas las libreras necesarias para compilar el programa, y tambien verifica la version del compilador disponible. Si todo es correcto
construye los Makefiles necesarios para compilar el programa.
4. Compilar el programa
diego@netstar:~/vlpd$ make
5. Instalar el programa
diego@netstar:~/vlpd$ su
Password:
diego@netstar:~/vlpd# make install
Esto instala los ejecutables del programa en la carpeta /usr/bin. Si se desea cambiar la
carpeta de instalacion, se debe ejecutar lo siguiente en el paso 2, (por ejemplo, para instalar
en /home/rats:
diego@netstar:~/vlpd$ ./configure --prefix=/home/rats
Para ver todas las opciones de compilacion e instalacion:
Captulo 2: Instalacion
Captulo 3: Utilizacion
3 Utilizaci
on
Se deben colocar las fotografas a procesar en una carpeta, por ejemplo ~/fotografias.
Estas fotografas deben estar en formato jpg, y poseer una resolucion de 640x480 pixeles.
Luego ejecutar vlpr ~/fotografias. Se puede tardar algunos minutos en procesar
todas las fotografas. Una vez procesadas, se obtiene un archivo con el nombre de
~/fotografias/resultado.html en la carpeta que se paso como argumento al programa.
Este archivo muestra un enlace a la fotografa, y el resultado del reconocimiento. En
caso de un error en la deteccion o el reconocimiento, se muestra el mensaje ERROR.
vlpd consta en realidad de tres programas. A continuacion se describe el uso y la sintaxis
de cada uno de ellos:
Captulo 3: Utilizacion
-A max_area, El area maxima que debe poseer un rectangulo encontrado para ser
considerado placa de identificacion. Es un n
umero entero, mayor que min area. El
valor por defecto es 50000.
-D dp_dist_min. El error tolerable para el mecanismo de aproximacion poligonal
usando Douglas-Peuker. Es un n
umero positivo, que es multiplicado por el perimetro
del contorno. El valor por defecto es 0,025.
-s std_dev_min_val. Valor mnimo de la desviacion estandard de l proyeccion vertical sobre el cual esta es considerada perteneciente a un rectangulo que contiene la
placa de identificacion. Su valor por defecto es 0,12
-S std_dev_max_val Valor maximo de la desviacion estandard de l proyeccion vertical
bajo el cual esta es considerada como perteneciente a una placa de identificacion. Su
valor por defecto es 0,22.
-p avg_min_valValor mnimo de la media artmetica de la proyeccion vertical sobre
el cual esta es considerada como perteneciente a una placa de identificacion. Su valor
por defecto es 0,5.
-P avg_max_valValor maximo de la media artmetica de l proyeccion vertical bajo el
cual esta es considerada como perteneciente a una placa de identificacion. Su valor por
defecto es 0,8.
-k pk_min_sepSeparacion mnima en pixeles de los picos en la proyeccion vertical. Es
un n
umero entero. Su valor por defecto es 5.
-K pk_max_sepSeparacion maxima en pixeles de los picos de la proyeccion vertical.
Su valor por defecto es 30. Es un n
umero entero.
-U pk_max_upN
umero de picos que debe presentar la proyeccion vertical para ser
considerada placa. Es un n
umero entero. Su valor por defecto es 4.
-d pk_max_downN
umero de valles que debe presentar la proyeccion vertical para ser
considerada placa. Es un n
umero entero. Su valor por defecto es 4.
-C max_area_comun Es el area que deben compartir dos rectangulos para ser considerados ser uno solo. Por ejemplo si es el treinta por ciento del area, este valor deberia
ser 1,3. Si es el 45%, 1,45, etc.
Captulo 3: Utilizacion
Captulo 4: Limitaciones
4 Limitaciones
Vlpd funcina por el momento con fotografas jpg. Las fotografas deben ser tomadas entre
40cm a tres metros de distancia al vehculo. La resolucion recomendada es de 640x480,
aunque puede usar fotografias de mayor resolucion.
Vlpd usa un algoritmo de deteccion de contornos para la deteccion de la placa, lo que
requiere que esta este en buenas condiciones y presente un claro contraste con respecto al
resto del vehculo.
El programa actualmente presenta una efectividad del 75.8% en la deteccion de placa, y
aproximadamente del 54% en el reconocimiento de los caracteres de placa. Mientras mayor
la resolucion de las fotografas, mayor la probabilidad de deteccion.
Actualmente presenta problemas en la deteccion de placa especialmente cuando no existe
el suficiente contraste entre la placa y el fondo. La probabilidad de deteccion cae hasta casi
el 3% en fotografas con estas caractersticas.
Vlpd funciona con placas que se ajusten a las caractersticas especificadas en la legislacion
de la Rep
ublica de Ecuador. Especficamente aquellas con un solo color de fondo, y seis
caracteres (tres letras y tres n
umeros).
Vlpr asume que las fotografias contienen una u
nica placa detectable
Captulo 5: Licencia
5 Licencia
VLPD se distribuye con la esperanza de que le sea u
til, pero SIN NINGUNA GARANTIA;
sin incluso la garanta implcita de MERCANTIBILIDAD o IDONEIDAD PARA UN
PROPOSITO
PARTICULAR. El autor rechaza toda responsabilidad por da
nos o
perjuicios que se puedan producir por el uso de este programa.
Captulo 5: Indice
Indice
D
Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Formatos de Imagen . . . . . . . . . . . . . . . . . . . . . . . . . . 7
OCR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1, 2
G
Garantia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
GCC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
I
Instalaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
P
Pentium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Procesador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Reconocimiento Optico
de Caracteres
.......... 3
Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Resoluci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Licencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Ubuntu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Utilizaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
ANEXO C
DIMENSIONES DE LAS PLACAS VEHICULARES
146
ANEXO D
ALGORITMO DE DETECCIN DE CONTORNOS
148