Reconocimiento Automático de Matrículas de Vehículos
Reconocimiento Automático de Matrículas de Vehículos
Reconocimiento Automático de Matrículas de Vehículos
A mis padres, por haberme dado la oportunidad de llegar estudiar esta carrera. Y sobre todo a mi novia, Pili, por su ayuda, comprensin y paciencia en los momentos mas difciles. Sin ellos, no habra llegado hasta aqu....
INDICE
1. INTRODUCCIN ...................................................................... 8
1.1 1.2 INTRODUCCION AL PROBLEMA..........................................................8 HERRAMIENTAS NECESARIAS .............................................................9 1.2.1 Entorno ..............................................................................................9 1.2.2 Adquisicin.......................................................................................9 1.2.3 Procesamiento ................................................................................10 1.3 1.4 OBJETIVO DEL PROYECTO ...................................................................10 APLICACIONES DEL PROYECTO ........................................................10
2.1.3 Formatos de archivo de la imagen digital ..................................19 2.1.3.1 Formato TIFF ..........................................................................19 2.1.3.2 Formato PICT..........................................................................20 2.1.3.3 Formato GIF ............................................................................20 2.1.3.4 Formato JPEG .........................................................................21 2.1.4 Metodos de captacin de la imagen digital ...............................22 2.1.4.1 Cmara fotogrfica analgica ..................................................22 2.1.4.2 Cmara fotogrfica digital .......................................................22 2.1.4.3 Cmara de video analgica ......................................................23 2.1.4.4 Cmara de video digital ...........................................................23 2.2 SEGMENTACIN DE LA MATRICULA ..............................................24 2.2.1 Segmentacin Manual ...................................................................24 2.2.2 Segmentacin Automtica............................................................25 2.2.2.1 Mtodo Morfolgico ................................................................25 2.2.2.2 Mtodo Gradiente ....................................................................26
2.3
BINARIZACIN DE LA MATRCULA.................................................28 2.3.1 Binarizacin Mtodo Simple ........................................................29 2.3.2 Binarizacin Mtodo Porcentual .................................................29 2.3.3 Binarizacin Mtodo Otsu ............................................................30
2.4
RECONOCIMIENTO DE LOS CARACTERES .....................................33 2.4.1 Reconocimiento Manual ...............................................................33 2.4.2 Reconocimiento Automtico ........................................................34
2.5
CONCEPTOS BASICOS DE BASES DE DATOS ..................................35 2.5.1 Qu es una Base de Datos? .........................................................36 2.5.2 Herramientas de Bases de Datos .................................................39 2.5.2.1 Motores de Bases de Datos ......................................................39 2.5.2.2 Modelo de Objetos de Acceso a Datos .....................................40 2.5.2.3 Herramientas de desarrollo de la interfaz................................41
5. CONCLUSIONES..................................................................... 76
5.1 RESULTADOS............................................................................................76 5.1.1 Resultados individuales................................................................76 5.1.2 Resultados totales ..........................................................................80 5.2 LINEAS DE AMPLIACION .....................................................................80 5.2.1 Algoritmo de segmentacin de la matricula..............................80 5.2.2 Reconocimiento ptico de Caracteres (OCR)............................81 5.2.3 Interfaz grfica de usuario............................................................81
6. REFERENCIAS ......................................................................... 82
1
INTRODUCCIN
Entorno
Adquisicin
Figura 1.1. Montaje para la elaboracin del proyecto
Procesamiento
Como se observa en la figura 1.1. el montaje consta de 3 mdulos bien diferenciadas. A continuacin les describimos de forma abreviada cada uno de los mdulos: Entorno: Ambiente que rodea a las imgenes que pasarn a formar parte del proyecto. Depende mucho de la aplicacin que se le quiera
-8-
INTRODUCCION
dar. Adquisicin: Mtodo de adquisicin de las imgenes. La fuente puede ser analgica en cuyo caso las imgenes deben ser digitalizadas para su procesamiento en el ordenador. Procesamiento: Conjunto de programas y rutinas que ejecutadas realizan la deteccin automtica de la matrcula. Nuestro proyecto se centra en la parte software del procesamiento.
1.2.1 Entorno
Se ha utilizado un entorno de la rampa de un garaje particular, con la cmara fija mediante trpode en un punto alto de la entrada al garaje. Todas las fotos fueron tomadas en el mismo da a una hora en la que hay mayor trnsito de entrada al garaje.
1.2.2 Adquisicin
Se ha utilizado una cmara fotogrfica digital modelo Sony Mavica con salida de diskette. Las fotos han sido tomadas a gran resolucin en formato JPEG con una resolucin de 800x600 pixels. Posteriormente se observar que entre los pasos necesarios para la deteccin automtica de la matrcula es
-9-
INTRODUCCION
necesario una reduccin de la imagen pues con tanta resolucin el programa presentaba fallos en algunas fotos.
1.2.3 Procesamiento
Se ha utilizado un ordenador personal. El software instalado para la elaboracin del proyecto ha sido MATLAB en su versin 6.5, as como un programa de Reconocimiento ptico de Caracteres (OCR) de libre distribucion.
INTRODUCCION
ocupadas, de las horas de llegada y salida... Control de acceso a garaje pblico: Uso del proyecto con acceso a base de datos en la que se tienen los datos de los vehculos y sus usuarios con lo que se podra transferir directamente el importe a su cuenta corriente sin necesidad de abonar a la salida.
- 11 -
2
PRESENTACIN DEL PROBLEMA
mtodos de adquisicin de la imagen digital, exponiendo las ventajas e inconvenientes de cada uno de ellos.
- 12 -
almacenan como una lista que describe la ubicacin y las propiedades de los objetos que configuran la imagen; tales como formas, arcos y lneas. Los grficos de mapa de bits los crean escneres y cmaras digitales. Es sin duda alguno el mas usado y por ello, a partir de este momento hablaremos siempre de las imgenes de mapa de bits. Las imgenes de mapa de bits se componen de una matriz de elementos denominados pixeles (Pxel es la abreviatura de picture element -elemento de la imagen-). Cada pxel se almacena en un rea de memoria llamada mapa de bits. Cada pxel tiene una direccin numerada. 2.1.1.2 Calidad de la imagen La calidad de una imagen de mapa de bits se determina durante la captacin segn dos factores: resolucin espacial y resolucin de luminosidad. Como veremos en el apartado de captacin, el tamao del pxel queda determinado por la frecuencia con que se muestrea la imagen. Un intervalo amplio de muestreo origina una imagen de escasa resolucin espacial. Un intervalo ms corto origina una mayor resolucin espacial. La luminosidad o el valor del color para cada pxel queda definido por un bit o por un grupo de bits. Cuantos ms bits se utilicen, la resolucin de luminosidad es mayor. Tambin puede hablarse de profundidad de color o de pixel. A mayor nmero de bits, mayor profundidad y ms colores posibles.
- 13 -
Una imagen de un bit slo puede tener dos valores: blanco o negro. Mediante la agrupacin de pixeles blancos y negros tratan de imitar el gris.
Una imagen de escala de grises de 8 bits cada pxel contiene uno de los 28=256 matices de gris.
- 14 -
En una imagen de 24 bits, cada pxel queda descrito por tres grupos de 8 bits que representan los valores de luminosidad para el rojo (Red en ingls) , el verde (Green en ings) y el azul (Blue en ingls) de aqu las siglas RGB. Las imgenes de alta resolucin de 24 bits muestran 16,7 millones de colores (224=256 rojos x 256 azules x 256 verdes).
detector. En una cmara fotogrfica digital, el detector es un sensor slido de imagen, denominado "Charge Coupled Device" (CCD para abreviar). En un CCD de tipo rea (Area Array CCD), que no es mas que una matriz constituida por cientos de miles de clulas fotosensibles microscpicas, se crean los pixeles mediante la captacin de la intensidad luminosa de pequeas secciones de la imagen. Para captar imgenes en color, se montan sobre las clulas fotosensibles filtros para el rojo, el verde y el azul. 2.1.2.2 Muestreo y Cuantizacin La calidad de una imagen se determina por el tamao del pxel (resolucin espacial) y por la profundidad de color (resolucin de luminosidad). Esto se relaciona con los dos pasos bsicos del proceso de captacin digital: 1. El muestreo determina el tamao del pxel, el cual depende del nmero de clulas fotosensibles. Un CCD con pocas clulas fotosensibles muestrea a baja resolucin y los los pixeles pueden verse a simple vista. Esto se denomina pixelizacin. Un CCD con mas clulas fotosensibles, muestrea con mayor resolucin espacial. En las imgenes de este tipo, no se pueden ver los pxeles individuales. 2. La cuantizacin del pxel determina su profundidad. Cuantos ms bits procese el convertidor analgico-digital, ms valores digitales podr - 16 -
representar. Un convertidor de 8 bits representa 256 niveles de luminosidad. Uno de 12 bits representa unos 4096 niveles de luminosidad.
- 17 -
El convertidor compara la seal analgica de entrada con un voltaje de referencia. En una imagen en color, cada pxel recibe tres nmeros de 8 bits para los valores de luminosidad de rojo, verde y azul.
2.1.2.3 Calidad de la imagen digital Adems de las resoluciones espacial y de luminosidad, hay otros factores que influyen sobre la calidad de la imagen digital: El rango dinmico indica la manera en que el escner puede diferenciar entre los niveles de luz. Las fotografas analgicas son excelentes en cuanto a la distincin de pequeos cambios en el nivel de luz, mientras que las digitales tienen una gama de luminosidad limitada. El ruido. La informacin captada por un sensor contiene al mismo tiempo informacin grfica y ruido. El ruido aparece como pequeas variaciones aleatorias en la luminosidad del color. Los cantidad de ruido introducida depender de la relacin entre seal y ruido del sensor. Las distorsiones. Como el efecto Moir, que se produce al submuestrear una imagen. La tasa de muestreo debera basarse en la frecuencia espacial de la imagen (tasa a la que cambia la luminosidad de la imagen). Para eliminar el efecto Moir de una foto, el ndice de muestreo debera elevarse al doble que el de la frecuencia espacial.
- 18 -
escneres especficos, impresoras o cualquier otro hardware de visualizacin. Sin embargo, el formato TIFF presenta algunas variantes, lo que significa que ocasionalmente una aplicacin puede tener problemas en abrir un archivo TIFF creado con otra aplicacin o bajo una plataforma diferente. 2.1.3.2 Formato PICT El formato PICT es nativo de Macintosh. Apareci en 1984 con la introduccin del software MacDraw. Desde entonces, ha sido utilizado por muchas aplicaciones, especialmente cuando las imgenes se diseaban para previsualizaciones en pantalla. Ideal para presentaciones, proyecciones en pantalla y trabajo de vdeo. El formato PICT puede contener tanto grficos de mapa de bits como orientados a objeto. Es un formato estndar para grficos que son cortados o copiados al Portapapeles (clipboard). 2.1.3.3 Formato GIF Los archivos GIF (Graphics Interchange Format) definen un protocolo concebido para la transmisin en lnea y el intercambio de datos grficos de mapa de bits, de una forma que resulta independiente del hardware utilizado en su creacin o representacin. El formato GIF fue desarrollado en 1987 por CompuServe (uno de los servicios de boletn de anuncios con ms xito en el mundo) para comprimir imgenes de ocho bits, que pudiesen ser telecomunicadas a travs de su servicio - 20 -
e intercambiadas entre los usuarios. El archivo GIF se define en trminos de bloques y sub-bloques que contienen parmetros relevantes y datos utilizados en la reproduccin de un grfico. Una fuente de datos GIF es una secuencia de bloques de protocolo y sub-bloques representando una coleccin de grficos. 2.1.3.4 Formato JPEG JPEG es un mecanismo estandarizado de compresin de imagen. El nombre proviene del Joint Photographic Experts Group, nombre original del comit que escribi el estndar. En realidad, JPEG no es un formato de archivo, sino ms bien un mtodo de codificacin de datos utilizado para reducir el tamao de los archivos de datos. Es ms comnmente utilizado dentro de otros formatos como JFIF y TIFF. JPEG File Interchange Format (JFIF) es un mnimo formato de archivo que posibilita a la secuencia de bits JPEG ser intercambiados entre una amplia variedad de plataformas y aplicaciones. Este formato no incluye ninguna de las prestaciones avanzadas que se encuentran en la especificacin TIFF JPEG o en cualquier formato especfico de aplicaciones. JPEG est diseado para comprimir tanto imgenes a todo color como de escala de grises. Funciona bien con fotografas, dibujo artstico y materiales similares, pero no tan bien con texto o dibujo lineal. Se utiliza normalmente para transmisin en lnea; por ejemplo pginas web. Una imagen de 24 bits
- 21 -
salvada en formato JPEG puede ser reducido hasta alrededor de la vigsima parte de su tamao original.
- 22 -
Facilidad de conexin con el ordenador. Entre sus desventajas destacamos: Elevado coste de los equipos. Imgenes con calidad escasa para algunas aplicaciones. 2.1.4.3 Cmara de video analgica Entre sus ventajas destacamos: Costes cada vez mas reducidos. Entre sus desventajas: Necesidad de capturador de video que convierta las imgenes a digital. Necesidad de un sensor que nos indique que trama concreta de la seal de video debe tomarse. Entrelazado de la seal: desplazamiento entre las lneas pares e impares de la imagen, sobre todo en escenas con objetos en movimiento. Grandes prdidas en la conversin de la seal a digital. 2.1.4.4 Cmara de video digital Entre sus ventajas destacamos: Imagen digital por naturaleza. - 23 -
Mayor facilidad de conexin con el PC. Entre sus desventajas: Necesidad de un sensor que nos indique que imagen concreta de la seal de video debe tomarse. Equipos generalmente caros.
- 24 -
punto de la pantalla Necesidad de realizar turnos de operarios Coste de mano de obra de los operarios.
- 25 -
Despus, se aplican tcnicas de morfologa binaria para conseguir unir todos los caracteres en un rectngulo y borrar todo lo que no pertenezca a dicho rectngulo. Para ello, hay que suponer conocida la mxima distancia entre caracteres y la mxima y mnima altura de stos.
b)
Esta es la limitacin principal de este mtodo: slo se puede aplicar si el tamao de los caracteres es conocido. Generalmente, esto significa que se puede aplicar cuando la distancia entre la cmara y la placa es constante. Una vez aislada, la placa que resulta suele ser un poco ms pequea que la real por lo que se agranda con una dilatacin. Para mayor informacin sobre mtodos morfolgicos aplicados a imgenes les recomendamos la lectura de libros de tratamiento digital de imgenes. En nuestro caso hemos acudido a la seccin 8.4 de [2]. 2.2.2.2 Mtodo Gradiente
- 26 -
Este mtodo fue sacado del artculo [] de la Universidad de Vigo. Para buscar la placa, trataremos de modelar las zonas de caracteres presentes en la imagen. Nuestro modelo se basa en derivadas, para ello calculamos el gradiente Sobel horizontal de toda la imagen, pues la zona de los caracteres presenta valores altos positivos seguidos por otros valores altos negativos (o al revs). El gradiente Sobel se calcula aplicando el filtro de la figura 2.7. a la imagen. El operador de Sobel tiene la ventaja de realizar derivacin y
-1 0 1 -2 0 2 -1 0 1
b)
z1 z2 z3 z4 z5 z6 z7 z8 z9
a)
Figura 2.7. a) Representacin de la imagen b) Operador gradiente Sobel horizontal c) Expresin del gradiente Sobel para cada pxel.
a)
b)
- 27 -
suavizado en un mismo paso, siendo este ltimo efecto muy interesante pues como es sabido, la derivacin realza el ruido. El problema de esta implementacin consiste en saber qu son "valores altos" de gradiente. La eleccin de un umbral fijo, lleva a grandes problemas cuando vara el contraste de las imgenes de entrada. Es preciso pues, elegir un umbral adaptativo para distinguir los valores altos del gradiente. Para ello, usamos el histograma del valor absoluto del gradiente. Para elegir el valor adecuado de umbral recurrimos a un mtodo muy simple: buscar el valor u , tal que, la cola del histograma a partir de u contenga un rea mayor o igual que un porcentaje dado del total (experimentalmente, determinamos un valor de 2.5% para este umbral). As, se consigue que el umbral se adapte a la imagen y la localizacin por gradiente funcione incluso en imgenes de muy bajo contraste. Para mas informacin sobre mtodo de gradiente de Sobel aplicado a imgenes, recomendamos acudan a referencia [2] apartado 7.1.
- 28 -
a)
a)
La binarizacin por el mtodo porcentual consiste en escoger un umbral tal que se haya llegado a un determinado porcentaje, normalmente bajo (entre el 20-30 %), del rea del histograma. En la figura 2.11 se muestra el resultado de la binarizacin por este mtodo.
- 30 -
a)
= l p(l )
2 = (l ) 2 p(l )
Despus de eso, suponemos un umbral U. Entonces calculamos la media y varianza "por debajo" y "por encima" de U (lo que supone aplicar el concepto de probabilidad condicional a los casos l<U y l>U).
w1 = p(l )
0 U 1 0
U 1
w2 = p (l )
U +1 255
255
1 = l p(l ) w1
2 = l p(l ) w2
U +1
- 31 -
a)
1 2 = (l 1 )2 p (l ) w1
0
U 1
2 2 = (l 2 )2 p(l ) w2
U +1
255
Despus de eso podemos definir la "varianza conjunta despus de aplicar el umbral U": 2 = w1 1 + w2 2 .
2 2
La diferencia D = 2 2 es una medida de la calidad del umbral U. En un caso ideal, donde la imagen tuviera slo dos niveles de gris se cumplira D=0 cuando U no est entre los niveles y D = 2 > 0 si est entre ellos. El algoritmo consiste simplemente en calcular D para todos los posibles
- 32 -
umbrales y usar el que produce el mximo. Podemos ver que las frmulas son adecuadas para un clculo iterativo y rpido (podemos calcular las sumas para un valor de umbral a partir de las anteriores: sumando o restando un valor). Este mtodo es el ms robusto ante cualquier tipo de histograma y, de hecho, es el ms referenciado y utilizado de la literatura. Para mas informacin sobre el mtodo Otsu para la binarizacin de imgenes en escala de grises, recomendamos la bsqueda y lectura del artculo [3] de las referencias.
- 33 -
Las ventajas que presenta esta opcin son: Menor probabilidad de error. Inmediatez de implantacin del proyecto. Los inconvenientes son: Cansancio o fatiga del operario por estar todo el rato pendiente de la pantalla. Necesidad de realizar turnos de operarios Coste sueldo de los operarios.
- 34 -
proyecciones, mtodos que usan redes neuronales... Para no aumentar la complejidad del proyecto, se tom la decisin de no incluir esta parte en desarrollo del proyecto. Se deja as como futura lnea de ampliacin. Por lo tanto, en nuestro caso podramos usar programas de
reconocimiento ptico de caracteres (OCR) de libre distribucin como GOCR, versiones trial como Transym OCR (TOCR) o programas de pago perfectamente desarrollados como Omnipage Pro.
- 35 -
En teora, una base de datos se puede crear desde cero, pero lo normal ser utilizar los servicios de un sistema de gestin de bases de datos (SGBD). Los sistemas de gestin de bases de datos mas conocidos son Microsoft Access, Microsoft SQL Server y Oracle.
BASE DE DATOS
MODELO DE DATOS
- 36 -
El trmino base de datos se puede utilizar para describir cualquier cosa desde un sencillo conjunto de datos, como una lista de telfonos, hasta un complejo conjunto de herramientas como SQL Server. La Figura 2.13 muestra las relaciones existentes entre los trminos que se describen a continuacin. Aunque para las bases de datos relacionales no se pueden establecer analogas con entidades del mundo real, la mayora intentan modelar algn aspecto del mundo real. A esa pequea parte del mundo real es a lo que llamamos el espacio del problema. El espacio del problema es, por naturaleza, algo desordenado y complejo. Pero para que el proyecto resulte fructfero resulta crtico restringir el sistema de base de datos que se va a disear a un conjunto especfico y bien definido de objetos e interacciones. Utilizaremos el trmino modelo de datos para referirnos a la descripcin conceptual del espacio del problema. Esto incluye la definicin de entidades, sus atributos (un Cliente, por ejemplo, es una entidad que tendr atributos como el Nombre y la Direccin) y sus restricciones (tales como que Nombre-Cliente ha de tener valor). El modelo de datos tambin incluye una descripcin de las relaciones establecidas entre las entidades y cualquier restriccin que se aplique a esas relaciones. La definicin de la disposicin fsica -las tablas y vistas que se realizarn- es lo que se conoce como esquema de la base de datos. Se trata de la traduccin del modelo conceptual a una representacin fsica que se pueda realizar utilizando un sistema de gestin de bases de datos. El esquema no es - 37 -
ms que el modelo de datos expresado en los trminos que se utilizarn para describirlo en el motor de base de datos -tablas, disparadores y cosas similares-. Una de las ventajas de utilizar un motor de base de datos es que no es necesario tratar en ningn momento con la realizacin fsica. Una vez que se ha explicado al motor de base de datos la forma deseada para los datos, utilizando directamente cdigo o algn entorno interactivo como Microsoft Access, el motor crear algunos objetos fsicos (normalmente, aunque no siempre, en algn sitio de un disco fijo) en los que se guardarn los datos. La combinacin de estructura y datos es a lo que nos referiremos como base de datos. En la base de datos se incluyen las tablas fsicas, las vistas definidas, consultas y procedimientos almacenados, y las reglas que impondr el motor para proteger los datos. El trmino base de datos no engloba a la aplicacin, que consiste en una serie de formularios e informes con los que el usuario interacta, ni tampoco nada de lo que se utiliza para acoplar la interfaz con la maquinaria que trabaja por detrs -cosas como un software intermedio o el servidor de transacciones de Microsoft. El trmino base de datos tampoco engloba al motor de base de datos. As, un archivo .mdb -de Access- es una base de datos, mientras que Microsoft Jet es un motor de base de datos. Realmente, un archivo .mdb puede contener otras cosas, adems de la base de datos -formularios e informes, por ejemplo. Para referirnos a todos estos componentes -la aplicacin, la base de datos, el motor de base de datos y el software intermedio- utilizaremos el trmino - 38 -
sistema de base de datos. Todo el software y los datos que sirven para realizar un sistema de produccin se considera parte del sistema de base de datos.
DESARROLLO DE LA INTERFAZ Microsoft Access Microsoft Visual Basic C, Matlab, Delphi HTML ASP
MOTORES BASES DE DATOS Microsoft Jet Microsoft SQL Server Oracle Informix
- 39 -
les denomina soportes, aunque no resulta del todo adecuado, ya que el trmino soporte realmente se refiere a una arquitectura fsica especfica. Son los aparatos que gestionan la manipulacin fsica de los datos -almacenndolos en disco y proporcionndolos cuando son solicitados. Caben destacar dos motores de la compaa Microsoft, por ser de los mas usados y conocidos: el motor de base de datos Jet y SQL Server. Aunque el motor de base de datos Jet y SQL Server son bastante diferentes, se trata de dos estupendas herramientas para el almacenamiento y la manipulacin de datos. La diferencia entre ellos radica en sus arquitecturas y en sus mbitos de actuacin. Microsoft Jet es un motor de base de datos orientado hacia sistemas de pequeo a mediano tamao. SQL Server, por el contrario, utiliza una arquitectura cliente/servidor y est orientado hacia sistemas de gran envergadura, permitiendo trabajar a miles de usuarios con aplicaciones crticas (esto no debe dar a entender que el motor de base de datos Jet slo resulte adecuado para sistemas poco ms que triviales). 2.5.2.2 Modelo de Objetos de Acceso a Datos Un modelo de objetos de acceso a datos es una especie de pegamento entre el entorno de programacin y el motor de base de datos; proporciona un conjunto de objetos con propiedades y mtodos que se pueden manipular por medio del cdigo. Exiten variados modelos de objetos de acceso a datos: Objetos de acceso a datos (DAO), del que hay dos variantes, DAO/Jet y DAO/ODBCDirect; Objetos de datos remotos (RDO), utilizado - 40 -
normalmente para el acceso a orgenes de datos ODBC (conectividad abierta de bases de datos); y Objetos de datos ActiveX de Microsoft (ADO), que est llamado a sustituir tanto a DAO como a RDO en un futuro prximo. DAO, el decano de los tres, es la interfaz nativa del motor de base de datos Jet. RDO es similar a DAO, pero ha sido optimizado para el acceso a orgenes de datos como SQL Server y Oracle. ADO hace uso de una jerarqua de objetos ms pequea que las de los otros dos, consistiendo tan slo en cuatro objetos principales, y proporciona algunas ampliaciones notables del modelo -por ejemplo, su soporte para conjuntos de registros sin conexin y el modelado de datos. 2.5.2.3 Herramientas de desarrollo de la interfaz Los motores de bases de datos manejan los aspectos fsicos de la manipulacin de datos por nosotros, pero necesitamos alguna forma de indicarles cmo estructurar los datos. Existen multitud de mtodos para hacerlo, todos con una funcionalidad similar. Se puede definir la estructura de la base de datos por medio de cdigo, aunque en circunstancias normales no resulta recomendable. Las herramientas interactivas resultan ms rpidas, sencillas e intuitivas de usar. Una vez establecida la definicin fsica de la base de datos, necesitamos herramientas para crear los formularios e informes con los que interactuarn los usuarios. Sin duda alguna, cabe destacar la interfaz de Microsoft Access, muy
- 41 -
intuitiva, potente y fcil de manejar. Para ampliar sobre la materia de bases de datos recomendamos la lectura de libros de informtica sobre sistemas de bases de datos. Para la redaccin del proyecto nos hemos apoyado en [4] de la referencia.
- 42 -
3
HERRAMIENTAS UTILIZADAS
3.1 MATLAB
MATLAB es sin duda alguna el programa por excelencia de aplicacin en el sector industrial, la administracin y la universidad. A travs de su entorno en modo comando y su amplia gama de funciones y toolboxes (paquetes de funciones especficos), se puede implementar con un reducido nmero de instrucciones casi cualquier problema de ingeniera. MATLAB dispone de herramientas para:
Adquisicin de datos, tratamiento y presentacin de datos. Desarrollo de rutinas y programas. Presentacin de grficas. Adquisicin, procesado y presentacin de imgenes. Simulacin de sistemas.
MATLAB es un sistema cuyo elemento bsico es una matriz. Esto permite resolver problemas de computacin tcnica, especialmente aquellos con formulaciones vectoriales o matriciales.
- 43 -
HERRAMIENTAS UTILIZADAS
- 44 -
HERRAMIENTAS UTILIZADAS
3.1.2 Funciones
Las funciones o comandos mas utilizados son:
max: funcin que realiza una bsqueda por columnas de los mximos
de una matriz. Caso de tener una nica dimensin, devuelve el mximo de todos.
mean: funcin que realiza la media por columnas de una matriz. Caso
de tener una nica dimensin, devuelve la media total.
HERRAMIENTAS UTILIZADAS
- 46 -
HERRAMIENTAS UTILIZADAS
imhist: funcin que computa el histograma de la imagen. rgb2gray: funcin que convierte una imagen a color en una imagen en
escala de grises.
- 47 -
HERRAMIENTAS UTILIZADAS
La interfaz grfica est basada en una estructura de objetos, cada uno de los cuales tiene unas determinadas propiedades. Para implementar un objeto en la interfaz, basta con hacer clic en el men de los objetos y desplazarlo hacia nuestra interfaz. Los objetos disponibles son:
HERRAMIENTAS UTILIZADAS
Slider: Barra de desplazamiento. Frame: Para distinguir unos objetos de la interfaz de otras, ya sea por
motivos decorativos o por incompatibilidad entre los objetos.
- 49 -
HERRAMIENTAS UTILIZADAS
PopUp Menu: Similar a una lista de opciones pero desplegable. Axes: Objeto en el que se van a representar grficas, figuras, imgenes...
La mayora de los objetos llevan asociado un callback, que no es mas que una funcin que se ejecuta al realizar alguna accin (hacer clic, pulsar intro...) sobre ese objeto. El callback es la parte invisible del objeto y es la que hace que ese objeto tenga accin, pues si no tuviera callback sera simplemente una figura decorativa.
Bajo tiempo de cmputo. Baja tasa de errores. Versin gratuita o de prueba. Posibilidad de interconexin con MATLAB.
La primera opcin fue probar con programas de libre distribucin realizados en MATLAB, C o cualquier otro lenguaje de programacin. La tasa de error de estos programas era muy alta, y en ninguna matrcula acertaba todos los caracteres.
- 50 -
HERRAMIENTAS UTILIZADAS
Se decidi entonces en usar programas de distribucin comercial. El problema que presentan stos es que al ser productos cerrados, la nica interconexion posible con MATLAB es la de cambiar de una aplicacin a otra manualmente, cosa no muy recomendable pues uno de los objetivos del proyecto es que realice todos los pasos automticamente. Usamos entonces una versin de prueba de un programa de distribucin comercial, Transym OCR (http://www.sorcery.demon.co.uk). Este programa, adems de ofrecer unos excelentes resultados con la mayora de las matrculas, proporciona al usuario el cdigo fuente de su interfaz.
HERRAMIENTAS UTILIZADAS
modificar el interfaz y desarrollar un ejecutable -con el motor del programa original- que pasndole la imagen binaria de la matrcula nos devolviera en un archivo de texto los caracteres que contiene.
- 52 -
HERRAMIENTAS UTILIZADAS
3. Ir creando cada campo con sus respectivos tipos de datos y propiedades. 4. Elegir el campo clave, seleccionndolo y pulsando sobre el icono de la llave dorada.
Una vez creadas las tablas, se deben establecer las relaciones entre ellas. Para eso usamos la opcin de Access de crear relaciones (ver figura 3.4). Las relaciones se crean seleccionando el campo de una tabla y arrastrndolo hasta colocarlo encima del campo de la otra tabla con el que se relaciona. Se debe repetir este paso tantas veces como relaciones haya.
- 53 -
HERRAMIENTAS UTILIZADAS
2. Pulsar sobre el icono Origenes de datos (ODBC). 3. En la aplicacin que se abre, Pulsar sobre el botn Agregar.... (ver figura 3.5) 4. Seleccionar Microsoft Access Driver (*.mdb). 5. En la nueva ventana: dar un nombre al origen de datos, una breve - 54 -
HERRAMIENTAS UTILIZADAS
descripcin, y seleccionar la ruta donde se encuentra la base de datos (Ver figura 3.6)
- 55 -
HERRAMIENTAS UTILIZADAS
6. Pulsar sobre Aceptar. Ya estara creado el objeto de acceso a la base de datos. Ahora, para ponerlo en funcionamiento y darle utilidad, en el entorno de MATLAB se llamar este objeto mediante la funcin database del toolbox de base de datos de MATLAB (vase apartado 3.1.4).
- 56 -
4
DETALLE DEL PROYECTO
- 57 -
Para la localizacin horizontal de la matrcula se usa una metodologa muy sencilla y a la misma vez muy eficaz. Se toma como origen la imagen del gradiente horizontal, y se calcula por filas el nmero de pxeles que tiene un valor alto del gradiente horizontal.
- 58 -
Como se describe en el apartado 2.2.2.2 consideramos valores altos del gradiente aquellos que son mayores del punto en el que el histograma del gradiente tiene un rea del 2,5% del total empezando desde los valores menos frecuentes (que coincide con los valores mas altos del gradiente).
Conocido el umbral por el que vamos a distinguir, vamos calculando para cada fila el nmero de pxeles que tienen un valor mayor del umbral. Como se puede observar en la figura 4.2 en la zona donde se localiza la matrcula hay valores altos del gradiente. Eso es debido al gran nmero de transiciones de colores claros a colores oscuros y viceversa que hay en las matrculas espaolas. Basta con buscar desde el mximo hacia arriba y abajo los puntos donde el pico decae hasta ser casi cero. As entonces tenemos las coordenadas en la dimensin vertical donde posiblemente empiece y termine la matrcula. - 59 -
procedimiento que en horizontal, pero ya partimos del resultado de la localizacin horizontal y utilizamos solo las filas resultado del proceso anterior. - 60 -
En este caso tomamos los primeros puntos que empezando por los bordes de la imagen tienen un valor superior a un lmite dado (Vase figura 4.3). As se obtienen dos columnas por las que cortar para obtener la matrcula verticalmente. Entonces, con las filas y las columnas de corte resultados de la localizacin vertical y horizontal respectivamente podemos extraer la localizacin aproximada de la matrcula.
4.1.3 Binarizacin
Para la binarizacin de la matrcula hemos utilizado el mtodo porcentual (vase apartado 2.3.2) pues necesitbamos un valor de umbral bajo que nos permitiera eliminar elementos que tienen tonos de grises en torno al centro del histograma. Adems, cada imagen puede tener un contraste diferente dependiendo de la hora y las condiciones en la que se tome la fotografa, y los otros mtodos de binarizacin presentaban valores altos del umbral y apenas distingue entre imgenes de contraste alto e imgenes de contraste bajo. Posteriormente para mejorar los resultados de la binarizacin realizamos una operacin morfolgica de apertura, cuyo efecto es el de unir pequeos cortes y suavizar los contornos. Ya la imagen est lista para ser procesada por el motor de OCR.
- 61 -
PROPIETARIO
VEHICULO
Esta base de datos tan simple tiene un diagrama entidad-relacin como el de la figura 4.4. Para los que no estn muy puestos en materia de bases de datos y no entiendan dicha figura, les explicamos que en la base de datos hay 2 entidades principales que son el coche y el propietario. Los valores de 1 y N que
- 62 -
ponen junto a propietario vienen a significar que un propietario puede tener 1 o mas coches, pero que un coche pertenece a un solo propietario.
- 63 -
- 64 -
Como complemento adicional se han aadido sonidos, a modo de alarmas para el operador, para los casos en los que se reconoce la matrcula del coche y para los casos en que la matrcula no es reconocida.
4.2.1 Proyecto.m
function varargout = proyecto(varargin) % PROYECTO M-file for proyecto.fig % PROYECTO, by itself, creates a new PROYECTO or raises the existing % singleton*. % % H = PROYECTO returns the handle to a new PROYECTO or the handle to % the existing singleton*. % % PROYECTO('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in PROYECTO.M with the given input % arguments. % % PROYECTO('Property','Value',...) creates a new PROYECTO or raises % the existing singleton*. Starting from the left, property value % pairs are applied to the PROYECTO before proyecto_OpeningFunction % gets called. An unrecognized property name or invalid value makes % property application stop. All inputs are passed to % proyecto_OpeningFcn via varargin. % % *See PROYECTO Options on GUIDE's Tools menu. Choose "PROYECTO % allows only one instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help proyecto % Last Modified by GUIDE v2.5 24-Apr-2003 21:20:32 % Begin initialization code - DO NOT EDIT proyecto_Singleton = 1; proyecto_State = struct('proyecto_Name', mfilename, ... 'proyecto_Singleton', proyecto_Singleton, ... 'proyecto_OpeningFcn', @proyecto_OpeningFcn, ... 'proyecto_OutputFcn', @proyecto_OutputFcn, ... 'proyecto_LayoutFcn', [] , ... 'proyecto_Callback', []); if nargin & isstr(varargin{1}) proyecto_State.proyecto_Callback = str2func(varargin{1});
- 65 -
end if nargout [varargout{1:nargout}] = proyecto_mainfcn(proyecto_State, varargin{:}); else proyecto_mainfcn(proyecto_State, varargin{:}); end % End initialization code - DO NOT EDIT addpath funciones; % Aadimos un enlace directo a la carpeta donde estan las funciones a % utilizar % -------------------------------------------------------------------% --- Executes just before proyecto is made visible. function proyecto_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to proyecto (see VARARGIN) set(handles.BotonBuscar,'Enable','Off'); % El boton de busqueda automatica esta desactivado inicialmente set(handles.BotonOCR,'Enable','Off'); % El boton de OCR esta desactivado inicialmente set(handles.matricula_axes,'Visible','Off'); % Los ejes de la matricula estan no visibles set(handles.menu_guardarm,'Enable','Off'); set(handles.menu_guardarmbin,'Enable','Off'); % Desabilitamos en el menu Archivo las opciones de guardar set(handles.menu_buscar,'Enable','Off'); set(handles.menu_OCR,'Enable','Off'); % Desabilitamos las opciones en el menu de Accion iptsetpref('ImshowAxesVisible','on'); % Con esta sentencia indicamos que al hacer imshow de las imagenes se % hagan visibles los ejes. handles.YaMatricula=0; % Usamos una variable binaria global para indicar si ya hemos % realizado la bsqueda de la matricula handles.YaBinaria=0; % Usamos una variable binaria global para indicar si ya hemos % calculado la imagen binarizada de la matricula % Choose default command line output for proyecto handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes proyecto wait for user response (see UIRESUME) % uiwait(handles.principal);
- 66 -
% -------------------------------------------------------------------% --- Outputs from this function are returned to the command line. function varargout = proyecto_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % -------------------------------------------------------------------function menu_archivo_Callback(hObject, eventdata, handles) % hObject handle to archivo (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % -------------------------------------------------------------------function menu_abrir_Callback(hObject, eventdata, handles) % hObject handle to abrir (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Lanzamos un formulario de apertura de ficheros [filename, pathname] = uigetfile( ... {'*.bmp;*.jpg;*.gif','Archivos de imagenes (*.bmp,*.jpg,*.gif)'; '*.bmp', 'Windows Bitmap'; ... '*.jpg','JPEG'; ... '*.gif','GIF'; ... '*.*', 'Todos los archivos (*.*)'}, ... 'Abrir un archivo'); handles.coche=imread([pathname filename]); % Lectura de la imagen a variable axes (handles.coche_axes); % Cojemos los ejes de la imagen imshow (handles.coche); % Mostramos la imagen set(handles.coche_axes,'XTick',[],'YTick',[]); % Quitamos la numeracion de los ejes cla (handles.matricula_axes); set(handles.matricula_axes,'Visible','off'); % Limpiamos y quitamos los ejes de la matricula por si ya habia una % matricula anterior set(handles.BotonBuscar,'Visible','On','Enable','On'); % Hacemos el boton de busqueda automatica visible y habilitado set(handles.menu_buscar,'Enable','On'); % Habilitamos en el menu Accion la opcion de buscar la matricula set(handles.BotonOCR,'Enable','Off'); % Ponemos el boton de OCR desactivado set(handles.menu_OCR,'Enable','Off'); % Deshablitamos la opcion de hacer OCR a traves de la barra de menu set(handles.menu_guardarm,'Enable','Off');
- 67 -
set(handles.menu_guardarmbin,'Enable','Off'); %Desabilitamos en el menu Archivo las opciones de guardar set(handles.EditMatricula,'String',''); set(handles.EditMarca,'String',''); set(handles.EditModelo,'String',''); set(handles.EditPropietario,'String',''); % Limpiamos los Edit de la parte de OCR handles.YaMatricula=0; % Ponemos la variable global YaMatricula a 0 porque vamos a usar una figura % nueva handles.YaBinaria=0; % Ponemos la variable global YaBinarizada a 0 porque vamos a usar una % figura nueva % Update handles structure guidata(hObject, handles); % -------------------------------------------------------------------function menu_guardarm_Callback(hObject, eventdata, handles) % hObject handle to menu_guardarm (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %Lanzamos un formulario de guardar de ficheros [filename, pathname,filterindex] = uiputfile( ... {'*.bmp', 'Windows Bitmap'; ... '*.jpg','JPEG'; ... '*.gif','GIF'; '*.tif','TIF'}, ... 'Guardar imagen'); switch filterindex % Dependiendo de la opcion elegida por el usuario tendremos un formato % u otro case 1 formato='bmp'; case 2 formato='jpg'; case 3 formato='gif'; case 4 formato='tif'; end; if filterindex~=0 % El caso 0 es cuando el usuario le dio al boton cancelar imwrite (handles.matricula,[pathname filename,'.',formato],formato); end; % -------------------------------------------------------------------function menu_guardarmbin_Callback(hObject, eventdata, handles) % hObject handle to menu_guardarmbin (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB
- 68 -
% handles
%Lanzamos un formulario de guardar de ficheros [filename, pathname,filterindex] = uiputfile( ... {'*.bmp', 'Windows Bitmap'; ... '*.jpg','JPEG'; ... '*.gif','GIF'; '*.tif','TIF'}, ... 'Guardar imagen'); switch filterindex % Dependiendo de la opcion elegida por el usuario tendremos un formato % u otro case 1 formato='bmp'; case 2 formato='jpg'; case 3 formato='gif'; case 4 formato='tif'; end; if filterindex~=0 % El caso 0 es cuando el usuario le dio al boton cancelar imwrite (handles.binaria,[pathname filename,'.',formato],formato); end;
% -------------------------------------------------------------------% --- Executes on button press in BotonBuscar. function BotonBuscar_Callback(hObject, eventdata, handles) % hObject handle to BotonBuscar (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) set(handles.BotonBuscar,'Visible','Off'); %Deshabilitamos el boton de busqueda automatica %Realizamos la busqueda de la matricula si se ha hecho previamente if handles.YaMatricula==0 handles.matricula=encuentra(handles.coche); % Llamamos a la funcion encuentra.m que realiza la busqueda de la % matricula handles.YaMatricula=1; end; %Realizamos la binarizacion si no se ha hecho previamente if (handles.YaBinaria==0) handles.binaria=binariza(handles.matricula); % Llamamos a la funcion binariza.m que realiza la binarizacion de % la matricula handles.YaBinaria=1; end; checked=get(handles.CheckBinary,'Value');
- 69 -
switch checked % Segun este seleccionada la opcion de mostrar Imagen binaria o no... case 1 mostrar (hObject,handles,handles.binaria); %Mostramos la imagen binaria de la matricula case 0 mostrar (hObject,handles,handles.matricula); %Mostramos la imagen de la matricula sin binarizar end set(handles.BotonOCR,'Enable','On'); % Habilitamos el boton de OCR set(handles.menu_OCR,'Enable','On'); % Activamos la opcion de OCR del menu Accion % Update handles structure guidata(hObject, handles); % -------------------------------------------------------------------% --- Executes on button press in CheckBinary. function CheckBinary_Callback(hObject, eventdata, handles) % hObject handle to CheckBinary (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of CheckBinary % Si ya hemos realizado el proceso previo de localizacion de la % matricula y binarizacion... if (handles.YaBinaria==1) & (handles.YaMatricula==1) checked=get(handles.CheckBinary,'Value'); switch checked % Dependiendo de si se ha marcado o no la casilla de Mostrar % imagen binaria ... case 1 mostrar(hObject,handles,handles.binaria); % Mostramos la imagen binaria de la matricula case 0 mostrar(hObject,handles,handles.matricula); % Mostramos la imagen de la matricula sin binarizar end; end; % Update handles structure guidata(hObject, handles); % -------------------------------------------------------------------function mostrar (hObject,handles,imagen) % Funcion que muestra la imagen en los ejes de la matricula s=size (imagen); h=round(300/s(2)*s(1)); set(handles.matricula_axes,'Visible','On','Position',[75,100h,300,h]); %Realizamos unos calculos para colocar las matriculas en la misma % posicin ya que no todas tienen el mismo tamao. axes (handles.matricula_axes); %Seleccionamos como ejes los de la matricula imshow (imagen); set(handles.matricula_axes,'XTick',[],'YTick',[]);
- 70 -
%Quitamos la numeracion de los bordes de la imagen % -------------------------------------------------------------------% --- Executes on button press in BotonOCR. function BotonOCR_Callback(hObject, eventdata, handles) % hObject handle to BotonOCR (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) texto=hacerOCR(handles.binaria); % Llamamos a la funcion hacerOCR que devuelve en una variable la % cadena de la matricula set(handles.EditMatricula,'String',texto); % Mostramos la cadena obtenida del OCR en su cuadro de texto basedatos(handles,texto); % Llamamos a la funcion basedatos.m que realiza la busqueda de los % datos para esa cadena % -------------------------------------------------------------------function menu_accion_Callback(hObject, eventdata, handles) % hObject handle to menu_accion (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % -------------------------------------------------------------------function menu_salir_Callback(hObject, eventdata, handles) % hObject handle to menu_salir (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) close;
4.2.2 Encuentra.m
function mat = encuentra (Imcoche) % Funcion que localiza la matricula en una imagen de un coche % Imcoche es la matriz de imagen del coche % mat es la matriz de imagen de la matricula I1=rgb2gray(Imcoche); % Conversion a escala de grises I=imresize(I1,[240,320],'bilinear',3); % Escalado de la imagen para su procesado s=size (I); Gh=gsobelh(I); % Clculo del gradiente horizontal de la imagen Gh(:,1)=zeros(s(1),1); Gh(:,s(2))=zeros(s(1),1); Gh(1,:)=zeros(1,s(2)); Gh(s(1),:)=zeros(1,s(2)); % Eliminamos los posibles efectos de borde [histy,histx]=hist2D(abs(Gh),50); %Histograma completo de la imagen, pxel por pxel ux=umbral(histy,histx,0.025); %Clculo del umbral a superar por el gradiente horizontal para ser % candidato a matrcula
- 71 -
%LOCALIZACION HORIZONTAL DE LA MATRICULA num=sum ((abs(Gh)>ux)'); %Por filas, nmero de pxeles del gradiente horizontal con gradiente % superior al umbral replay=1; [yhorz,xhorz]=max(num); % Fila que contiene el mximo y su valor aux1=find (num(1:xhorz)<5); aux2=find (num((xhorz+1):length(num))<5); f1=aux1(length(aux1)); f2=aux2(1)+xhorz; % Puntos de corte para la localizacion horizontal de la matricula mathorz=I(f1:f2,:); % LOCALIZACION VERTICAL DE LA MATRICULA aux1=sum(abs(Gh(f1:f2,:))>ux); rect=ones(1,170); aux2=conv(aux1,rect)/length(rect); % Convolucionamos con un rectangulo para eliminar posibles picos % errneos [aux3,aux4]=max(aux2); aux5=aux4-170; %aux7 y aux6 son los limites dados por la convolucin del rectngulo aux6=find(aux1(aux5:aux4)>5); c1=aux6(1)+aux5; c2=aux6(length(aux6))+aux5; %Puntos de corte para la localizacion vertical de la matricula %LOCALIZACION DE LA MATRICULA EN IMAGEN 800x600 prop=320/800; %Porcentaje de la reduccin f1b=floor(f1/prop); %Ajuste de la fila superior al entero mas cercano por lo bajo f2b=ceil(f2/prop); %Ajuste de la fila inferior al entero mas cercano por lo alto c1b=floor(c1/prop); %Ajuste de la columna izquierda al entero mas cercano por lo bajo c2b=ceil(c2/prop); %Ajuste de la columna derecha al entero mas cercano por lo alto mat=I1 (f1b:f2b,c1b:c2b);
4.2.3 Binariza.m
function bin = binariza (I) % BINARIZACION DE LA IMAGEN (Metodo Histograma) h=imhist(I); H=cumsum(h); aux1=find(H>(0.3*sum(h))); umbral=aux1(1); bin=(I>umbral); % MEJORAS (Operacion Morfolgica de apertura) bin=bwmorph(bin,'open'); % Eliminacion de bordes % Por la izquierda flag=0; izq=1; while (flag==0)
- 72 -
end % Por la derecha flag=0; der=length(bin); while (flag==0) if (mean(bin(:,der))>0.7) flag=1; else der=der-1; end end % Recorte bin=bin(:,izq:der); % MEJORAS (Propiedades de las regiones) bin=not(bin); % Inversion de la imagen binaria [bw,nregs]=bwlabel(bin,4); %La funcion bwlabel busca regiones conexas en la imagen binaria. % Devuelve el numero de regiones que encuentra y una matriz del tamao % de la imagen binaria con con las regiones numeradas. regs=regionprops(bw,'BoundingBox'); % Hallamos la propiedad de cuadrado minimo que envuelve a cada region for i=1:length(regs) b(i)=regs(i).BoundingBox(4); end; % Si la altura es menor que el 50% de la altura de la matricula lo % descartamos c=find(b<(0.5*size(bin,1))); for i=1:length(c) [a,b]=find(bw==c(i)); bin(a,b)=0; end bin=not(bin);
4.2.4 HacerOCR.m
function TXT = hacerOCR (IMG) % Funcion que realiza las operaciones de OCR % IMG contiene la imagen binaria de la matricula en formato TIF % TXT devuelve una cadena con el resultado del OCR % I=imresize(IMG,0.5,'bilinear',3); imwrite(IMG,'c:\mat.tif','tif'); % Guardamos la imagen en un fichero con formato TIF !ocr % Ejecutamos el programa ocr.exe delete ('c:\mat.tif'); % Borramos la imagen de la matrcula fichero=fopen('c:\mat.txt'); texto=fgetl(fichero); % Abrimos el fichero de texto y extraemos la cadena de la matricula
- 73 -
i=1; j=1; % Realizamos un bucle que comprueba que los caracteres obtenidos son % caracteres alfanumricos while j<=length(texto) if (((texto(j)>='0')&(texto(j)<='9'))|((texto(j)>='A')&(texto(j)<='Z'))) txtcheck(i)=texto(j); i=i+1; j=j+1; else j=j+1; end end TXT=txtcheck; fclose(fichero); % Cerramos el fichero delete('c:\mat.txt'); delete('c:\log.txt'); % Borramos los ficheros resultado de la operacin de OCR
4.2.5 Basedatos.m
function basedatos (handles,texto) % Establecemos la conexion con la la fuente de datos Proyecto que % previamente debemos haber realizado con ODBC logintimeout(5); conexion=database('Proyecto','',''); sentencia=['SELECT MARCA,MODELO,NOMBRE,APELLIDO1,APELLIDO2 FROM COCHES INNER JOIN PROPIETARIOS ON COCHES.IDPROPIETARIO=PROPIETARIOS.IDPROPIETARIO WHERE MATRICULA=''',texto,'''']; % Esta es la sentencia SQL a ejecutar resultados=exec(conexion,sentencia); % Ejecutamos la sentencia resultados=fetch(resultados); datos=resultados.Data; if strcmp(datos(1),'No Data') % Si no tiene datos ejecutamos un sonido de alarma s=wavread('sounds/sirena.wav'); sound (s); else name=[char(datos(3)),' ',char(datos(4)),' ',char(datos(5))]; set(handles.EditMarca,'String',datos(1)); set(handles.EditModelo,'String',datos(2)); set(handles.EditPropietario,'String',name); % Insertamos en los Edit los datos de la consulta end
4.2.6 Gsobelh.m
function Gx = gsobelh (I) % GSOBELH realiza la operacin de gradiente horizontal sobre la imagen % mediante el mtodo de Sobel. % Gx es el resultado % I es la imagen original hx=-1*(fspecial('sobel'))';
- 74 -
4.2.7 Hist2D.m
function [H,X] = hist2D (M,n) % HIST2D realiza el histograma de una matriz bidimensional. % H devuelve el histograma de la imagen con el nmero de puntos % indicado en n % X devuelve la posicin central de los puntos. [preh,X]=hist(M,n); H=sum (preh');
4.2.8 Umbral.m
function umb = umbral (h,x,p) % UMBRAL detecta el umbral del gradiente % UMB es el valor del umbral % H es el resultado del histograma % X es la posicin de los puntos centrales del histograma % P es el porcentaje de integracion area=(x(2)-x(1))*sum(h); % Area del histograma u=length (h); i=1; while (i==1) acola=(x(2)-x(1))*sum(h(u:(length(h)))); % Area de la cola if (acola>(p*area)) i=0; else u=u-1; end end umb=x(u); % Umbral del histograma
- 75 -
5
CONCLUSIONES
SE8922DS
7753TP
- 76 -
CONCLUSIONES
SE2104AG
28E1215CL
SE6102AC
SE9692CH
58995BXY
- 77 -
CONCLUSIONES
SE2316CU
SE2048CM
SE8353CZ
SE7329DV
SE9139BN
- 78 -
CONCLUSIONES
SE3625CH
SE7175CC
SE7643DU
SE8268V
SE1051AZ
- 79 -
CONCLUSIONES
SE7419AT
CONCLUSIONES
que se le puede poner es que a veces se traga el smbolo de la comunidad europea y por consiguiente el OCR falla. Otra posibilidad es desarrollar el algoritmo de segmentacin de la matrcula utilizando otras tcnicas de segmentacin como las descritas en el apartado 2.2.2.
- 81 -
6
REFERENCIAS
www.kodak.es R. Gonzalez y R. Woods. Digital Image Processing. Addison-Wesley. F. Martin Rodriguez y X. Fernndez Hermida. RAMA: Reconocedor Automtico de Matrculas de Automviles. Universidad de Vigo
[4]
N. Otsu. "A Threshold Selection Method for Gray Level Histograms". IEEE Transactions on System, Man and Cybernetics. Enero, 1979.
[5]
R. Riordan. Diseo de bases de datos relacionales con Access y SQL Server. McGraw-Hill.
- 82 -