Post on 02-Jan-2016
ESCUELA SUPERIOR DE INGENIEROS
DE TELECOMUNICACION
PROYECTO FIN DE CARRERA
Reconocimiento Automático de
Matrículas de Vehículos
Autor: José Pablo Caballero Moreno
A mis padres, por haberme dado la oportunidad de
llegar estudiar esta carrera. Y sobre todo a mi novia, Pili,
por su ayuda, comprensión y paciencia en los momentos mas difíciles.
Sin ellos, no habría llegado hasta aquí....
INDICE
1. INTRODUCCIÓN ...................................................................... 8
1.1 INTRODUCCION AL PROBLEMA..........................................................8
1.2 HERRAMIENTAS NECESARIAS.............................................................9
1.2.1 Entorno ..............................................................................................9
1.2.2 Adquisición.......................................................................................9
1.2.3 Procesamiento ................................................................................10
1.3 OBJETIVO DEL PROYECTO ...................................................................10
1.4 APLICACIONES DEL PROYECTO ........................................................10
2. PRESENTACIÓN DEL PROBLEMA........................................... 12
2.1 ADQUISICION DE LA IMAGEN DIGITAL .........................................12
2.1.1 Fundamentos de la Imagen Digital .............................................12
2.1.1.1 Gráficos de vector y de mapa de bits........................................12
2.1.1.2 Calidad de la imagen ...............................................................13
2.1.2 Captación de la imagen digital ....................................................15
2.1.2.1 Captación.................................................................................15
2.1.2.2 Muestreo y Cuantización ........................................................16
2.1.2.3 Calidad de la imagen digital ....................................................18
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 captación de la imagen digital ...............................22
2.1.4.1 Cámara fotográfica analógica ..................................................22
2.1.4.2 Cámara fotográfica digital .......................................................22
2.1.4.3 Cámara de video analógica ......................................................23
2.1.4.4 Cámara de video digital ...........................................................23
2.2 SEGMENTACIÓN DE LA MATRICULA..............................................24
2.2.1 Segmentación Manual ...................................................................24
2.2.2 Segmentación Automática............................................................25
2.2.2.1 Método Morfológico ................................................................25
2.2.2.2 Método Gradiente....................................................................26
2.3 BINARIZACIÓN DE LA MATRÍCULA.................................................28
2.3.1 Binarización Método Simple ........................................................29
2.3.2 Binarización Método Porcentual .................................................29
2.3.3 Binarización Método Otsu............................................................30
2.4 RECONOCIMIENTO DE LOS CARACTERES .....................................33
2.4.1 Reconocimiento Manual ...............................................................33
2.4.2 Reconocimiento Automático ........................................................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
3. HERRAMIENTAS USADAS ..................................................... 43
3.1 MATLAB.....................................................................................................43
3.1.1 Tipos de datos.................................................................................44
3.1.2 Funciones ........................................................................................45
3.1.3 Biblioteca de Tratamiento Digital de Imágenes.........................46
3.1.4 Biblioteca de Bases de Datos ........................................................47
3.1.5 Interfaz gráfica de usuario (GUI).................................................48
3.2 RECONOCIMIENTO OPTICO DE CARACTERES (OCR) .................50
3.3 BASES DE DATOS.....................................................................................52
3.3.1 Implementación de la Base de Datos con Access ......................52
3.3.2 Definición del Objeto de acceso a Datos.....................................54
4. DETALLE DEL PROYECTO ..................................................... 57
4.1 DESCRIPCIÓN TEÓRICA........................................................................57
4.1.1 Adquisición de la imagen digital.................................................57
4.1.2 Localización de la matrícula.........................................................58
4.1.2.1 Localización Horizontal...........................................................58
4.1.2.2 Localización vertical ................................................................60
4.1.3 Binarización ....................................................................................61
4.1.4 Reconocimiento de los caracteres (OCR)....................................62
4.1.5 Base de datos ..................................................................................62
4.1.6 Interfaz gráfica de usuario............................................................63
4.2 DESCRIPCION PRÁCTICA (RUTINAS) ...............................................65
4.2.1 Proyecto.m ......................................................................................65
4.2.2 Encuentra.m....................................................................................71
4.2.3 Binariza.m .......................................................................................72
4.2.4 HacerOCR.m...................................................................................73
4.2.5 Basedatos.m ....................................................................................74
4.2.6 Gsobelh.m .......................................................................................74
4.2.7 Hist2D.m .........................................................................................75
4.2.8 Umbral.m ........................................................................................75
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 segmentación de la matricula..............................80
5.2.2 Reconocimiento Óptico de Caracteres (OCR)............................81
5.2.3 Interfaz gráfica de usuario............................................................81
6. REFERENCIAS......................................................................... 82
- 8 -
1 INTRODUCCIÓN
1.1 INTRODUCCION AL PROBLEMA
El proyecto que les vamos a describir a continuación trata sobre
reconocimiento automático de matrículas de vehículos.
En la figura 1.1 se puede observar el equipamiento necesario para la
elaboración del proyecto.
Figura 1.1. Montaje para la elaboración del proyecto
Como se observa en la figura 1.1. el montaje consta de 3 módulos bien
diferenciadas. A continuación les describimos de forma abreviada cada uno de
los módulos:
• Entorno: Ambiente que rodea a las imágenes que pasarán a formar
parte del proyecto. Depende mucho de la aplicación que se le quiera
Entorno Adquisición Procesamiento
INTRODUCCION
- 9 -
dar.
• Adquisición: Método de adquisición de las imágenes. La fuente puede
ser analógica en cuyo caso las imágenes deben ser digitalizadas para su
procesamiento en el ordenador.
• Procesamiento: Conjunto de programas y rutinas que ejecutadas
realizan la detección automática de la matrícula.
Nuestro proyecto se centra en la parte software del procesamiento.
1.2 HERRAMIENTAS NECESARIAS
Para la elaboración del proyecto se han utilizado los siguientes equipos.
1.2.1 Entorno
Se ha utilizado un entorno de la rampa de un garaje particular, con la
cámara fija mediante trípode en un punto alto de la entrada al garaje. Todas las
fotos fueron tomadas en el mismo día a una hora en la que hay mayor tránsito
de entrada al garaje.
1.2.2 Adquisición
Se ha utilizado una cámara fotográfica digital modelo Sony Mavica con
salida de diskette. Las fotos han sido tomadas a gran resolución en formato
JPEG con una resolución de 800x600 pixels. Posteriormente se observará que
entre los pasos necesarios para la detección automática de la matrícula es
INTRODUCCION
- 10 -
necesario una reducción de la imagen pues con tanta resolución el programa
presentaba fallos en algunas fotos.
1.2.3 Procesamiento
Se ha utilizado un ordenador personal. El software instalado para la
elaboración del proyecto ha sido MATLAB en su versión 6.5, así como un
programa de Reconocimiento Óptico de Caracteres (OCR) de libre distribucion.
1.3 OBJETIVO DEL PROYECTO
El objetivo del proyecto ha sido desarrollar un programa que permita
reconocer matrículas de vehículos en el menor tiempo posible para su futura
aplicación en sistemas de tiempo real. Para ello se ha optimizado el tiempo de
procesamiento al mínimo con los mejores resultados posibles.
1.4 APLICACIONES DEL PROYECTO
Entre las aplicaciones que se le puedan dar al proyecto vamos a destacar
las siguientes:
• Detección de matriculas falsas: Utilización del proyecto con acceso a
base de datos de vehículos en circulación para la posible detección de
vehículos con matriculas falsas.
• Control de acceso a garaje privado: Uso del proyecto con acceso a base
de datos de vehículos registrados en un garaje para permitir el acceso al
garaje sin necesidad de tarjeta ni llave, llevar el control de las plazas
INTRODUCCION
- 11 -
ocupadas, de las horas de llegada y salida...
• Control de acceso a garaje público: Uso del proyecto con acceso a base
de datos en la que se tienen los datos de los vehículos y sus usuarios
con lo que se podría transferir directamente el importe a su cuenta
corriente sin necesidad de abonar a la salida.
- 12 -
2 PRESENTACIÓN DEL PROBLEMA
2.1 ADQUISICION DE LA IMAGEN DIGITAL
En el presente apartado profundizaremos en conceptos de la imagen
digital (basado en referencia [1]). Posteriormente se presentarán distintos
métodos de adquisición de la imagen digital, exponiendo las ventajas e
inconvenientes de cada uno de ellos.
2.1.1 Fundamentos de la Imagen Digital
Una imagen digital queda representada mediante valores digitales
(discretos), procedentes del muestreo de una imagen analógica.
Antes de analizar con detalle la imagen digital, es necesario comprender
las diferencias entre las dos maneras utilizadas por el ordenador para
almacenar información de imágenes: gráficos vectoriales y gráficos de mapa de
bits.
2.1.1.1 Gráficos de vector y de mapa de bits
Los gráficos vectoriales, también conocidos como gráficos orientados a
objetos, son creados mediante programas de dibujo. Las imágenes vectoriales se
PRESENTACION DEL PROBLEMA
- 13 -
almacenan como una lista que describe la ubicación y las propiedades de
los objetos que configuran la imagen; tales como formas, arcos y líneas.
Los gráficos de mapa de bits los crean escáneres y cámaras digitales. Es
sin duda alguno el mas usado y por ello, a partir de este momento hablaremos
siempre de las imágenes de mapa de bits. Las imágenes de mapa de bits se
componen de una matriz de elementos denominados pixeles (Píxel es la
abreviatura de picture element -elemento de la imagen-). Cada píxel se
almacena en un área de memoria llamada mapa de bits. Cada píxel tiene una
dirección numerada.
2.1.1.2 Calidad de la imagen
La calidad de una imagen de mapa de bits se determina durante la
captación según dos factores: resolución espacial y resolución de luminosidad.
Como veremos en el apartado de captación, el tamaño del píxel queda
determinado por la frecuencia con que se muestrea la imagen. Un intervalo
amplio de muestreo origina una imagen de escasa resolución espacial. Un
intervalo más corto origina una mayor resolución espacial.
La luminosidad o el valor del color para cada píxel queda definido por un
bit o por un grupo de bits. Cuantos más bits se utilicen, la resolución de
luminosidad es mayor. También puede hablarse de profundidad de color o de
pixel. A mayor número de bits, mayor profundidad y más colores posibles.
PRESENTACION DEL PROBLEMA
- 14 -
Una imagen de un bit sólo puede tener dos valores: blanco o negro.
Mediante la agrupación de pixeles blancos y negros tratan de imitar el gris.
Una imagen de escala de grises de 8 bits cada píxel contiene uno de los
28=256 matices de gris.
Figura 2.1. Imagen de 1 bit
Figura 2.2. Imagen de 8 bits
PRESENTACION DEL PROBLEMA
- 15 -
En una imagen de 24 bits, cada píxel queda descrito por tres grupos de 8
bits que representan los valores de luminosidad para el rojo (Red en inglés) , el
verde (Green en ingés) y el azul (Blue en inglés) de aquí las siglas RGB. Las
imágenes de alta resolución de 24 bits muestran 16,7 millones de colores
(224=256 rojos x 256 azules x 256 verdes).
2.1.2 Captación de la imagen digital
2.1.2.1 Captación
Hasta el momento y en líneas generales, las películas fotográficas detectan
más información visual de la que es posible captar con un sistema digital. Pero
cada día salen a la luz cámaras digitales de reducidas dimensiones con gran
resolución.
Un sistema básico de captación de la imagen contiene una lente y un
Figura 2.3. Imagen de 24 bits (8 bits x 3 colores)
PRESENTACION DEL PROBLEMA
- 16 -
detector. En una cámara fotográfica digital, el detector es un sensor sólido 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 células fotosensibles microscópicas, se crean los pixeles
mediante la captación de la intensidad luminosa de pequeñas secciones de la
imagen.
Para captar imágenes en color, se montan sobre las células fotosensibles
filtros para el rojo, el verde y el azul.
2.1.2.2 Muestreo y Cuantización
La calidad de una imagen se determina por el tamaño del píxel (resolución
espacial) y por la profundidad de color (resolución de luminosidad). Esto se
relaciona con los dos pasos básicos del proceso de captación digital:
1. El muestreo determina el tamaño del píxel, el cual depende del número
de células fotosensibles.
Un CCD con pocas células fotosensibles muestrea a baja
resolución y los los pixeles pueden verse a simple vista. Esto se
denomina pixelización. Un CCD con mas células fotosensibles,
muestrea con mayor resolución espacial. En las imágenes de este tipo,
no se pueden ver los píxeles individuales.
2. La cuantización del píxel determina su profundidad. Cuantos más bits
procese el convertidor analógico-digital, más valores digitales podrá
PRESENTACION DEL PROBLEMA
- 17 -
representar. Un convertidor de 8 bits representa 256 niveles de
luminosidad. Uno de 12 bits representa unos 4096 niveles de
luminosidad.
Figura 2.4. Imagen pixelada
Figura 2.5. Imagen no pixelada
PRESENTACION DEL PROBLEMA
- 18 -
El convertidor compara la señal analógica de entrada con un voltaje
de referencia. En una imagen en color, cada píxel recibe tres números de
8 bits para los valores de luminosidad de rojo, verde y azul.
2.1.2.3 Calidad de la imagen digital
Además de las resoluciones espacial y de luminosidad, hay otros factores
que influyen sobre la calidad de la imagen digital:
• El rango dinámico indica la manera en que el escáner puede diferenciar
entre los niveles de luz. Las fotografías analógicas son excelentes en
cuanto a la distinción de pequeños cambios en el nivel de luz, mientras
que las digitales tienen una gama de luminosidad limitada.
• El ruido. La información captada por un sensor contiene al mismo
tiempo información gráfica y ruido. El ruido aparece como pequeñas
variaciones aleatorias en la luminosidad del color. Los cantidad de
ruido introducida dependerá de la relación entre señal y ruido del
sensor.
• Las distorsiones. Como el efecto Moiré, que se produce al submuestrear
una imagen. La tasa de muestreo debería 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 debería elevarse al doble que el de la frecuencia espacial.
PRESENTACION DEL PROBLEMA
- 19 -
2.1.3 Formatos de archivo de la imagen digital
Durante los años iniciales del desarrollo de los gráficos por ordenador y la
carrera por el dominio del hardware y el software que mantuvieron los
fabricantes, se diseñaron muchos formatos propietarios. Cada programa gráfico
salvaba los archivos en su formato propietario, por lo que cualquier archivo
salvado desde una aplicación específica y utilizado exclusivamente por esa
aplicación era conocido como un archivo nativo. Desafortunadamente, estos
archivos nativos no eran siempre comprensibles para otras aplicaciones.
Hoy día, la mayoría de las aplicaciones gráficas pueden salvar y abrir
archivos tanto en su formato nativo como en un buen número de otros formatos
que pueden utilizarse para transferir imágenes desde una aplicación a otra y de
una a otra plataforma.
2.1.3.1 Formato TIFF
TIFF (Tag Image File Format) fue desarrollado por Aldus Corporation en
1986, específicamente para salvar imágenes desde escáneres, grabadores de
pantalla y programas de pintura y retoque fotográfico.
Aún hoy, es probablemente el formato de mapa de bits más versátil,
seguro y con mayor soporte. Es capaz de describir datos de imagen en dos
colores, escala de grises, paleta de color y color completo en varios espacios de
color.
Incluye un buen número de esquemas de compresión y no está ligado a
PRESENTACION DEL PROBLEMA
- 20 -
escáneres específicos, impresoras o cualquier otro hardware de visualización.
Sin embargo, el formato TIFF presenta algunas variantes, lo que significa que
ocasionalmente una aplicación puede tener problemas en abrir un archivo TIFF
creado con otra aplicación o bajo una plataforma diferente.
2.1.3.2 Formato PICT
El formato PICT es nativo de Macintosh. Apareció en 1984 con la
introducción del software MacDraw. Desde entonces, ha sido utilizado por
muchas aplicaciones, especialmente cuando las imágenes se diseñaban para
previsualizaciones en pantalla. Ideal para presentaciones, proyecciones en
pantalla y trabajo de vídeo.
El formato PICT puede contener tanto gráficos de mapa de bits como
orientados a objeto. Es un formato estándar para gráficos 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 transmisión en línea y el intercambio de datos gráficos de
mapa de bits, de una forma que resulta independiente del hardware utilizado
en su creación o representación.
El formato GIF fue desarrollado en 1987 por CompuServe (uno de los
servicios de boletín de anuncios con más éxito en el mundo) para comprimir
imágenes de ocho bits, que pudiesen ser telecomunicadas a través de su servicio
PRESENTACION DEL PROBLEMA
- 21 -
e intercambiadas entre los usuarios.
El archivo GIF se define en términos de bloques y sub-bloques que
contienen parámetros relevantes y datos utilizados en la reproducción de un
gráfico. Una fuente de datos GIF es una secuencia de bloques de protocolo y
sub-bloques representando una colección de gráficos.
2.1.3.4 Formato JPEG
JPEG es un mecanismo estandarizado de compresión de imagen. El
nombre proviene del Joint Photographic Experts Group, nombre original del
comité que escribió el estándar.
En realidad, JPEG no es un formato de archivo, sino más bien un método
de codificación de datos utilizado para reducir el tamaño de los archivos de
datos. Es más comúnmente utilizado dentro de otros formatos como JFIF y
TIFF. JPEG File Interchange Format (JFIF) es un mínimo 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 especificación TIFF JPEG o en
cualquier formato específico de aplicaciones.
JPEG está diseñado para comprimir tanto imágenes a todo color como de
escala de grises. Funciona bien con fotografías, dibujo artístico y materiales
similares, pero no tan bien con texto o dibujo lineal. Se utiliza normalmente
para transmisión en línea; por ejemplo páginas web. Una imagen de 24 bits
PRESENTACION DEL PROBLEMA
- 22 -
salvada en formato JPEG puede ser reducido hasta alrededor de la vigésima
parte de su tamaño original.
2.1.4 Metodos de captación de la imagen digital
A continuación exponemos de forma breve las ventajas e inconvenientes
de los posibles métodos de adquisición de la imagen digital.
2.1.4.1 Cámara fotográfica analógica
Entre sus ventajas cabe destacar:
Muy buena calidad de imagen.
Equipamiento barato.
Entre sus desventajas destacamos:
Coste por revelado de las fotos.
Degradación de la calidad de la imagen con el tiempo.
Necesidad de escáner para digitalizar la imagen, lo que conlleva a
una posible pérdida de calidad en la conversión.
2.1.4.2 Cámara fotográfica digital
Entre sus ventajas destacamos:
Imagen digital por naturaleza.
No hay pérdidas de conversión.
PRESENTACION DEL PROBLEMA
- 23 -
Facilidad de conexión con el ordenador.
Entre sus desventajas destacamos:
Elevado coste de los equipos.
Imágenes con calidad escasa para algunas aplicaciones.
2.1.4.3 Cámara de video analógica
Entre sus ventajas destacamos:
Costes cada vez mas reducidos.
Entre sus desventajas:
Necesidad de capturador de video que convierta las imágenes a
digital.
Necesidad de un sensor que nos indique que trama concreta de la
señal de video debe tomarse.
Entrelazado de la señal: desplazamiento entre las líneas pares e
impares de la imagen, sobre todo en escenas con objetos en
movimiento.
Grandes pérdidas en la conversión de la señal a digital.
2.1.4.4 Cámara de video digital
Entre sus ventajas destacamos:
Imagen digital por naturaleza.
PRESENTACION DEL PROBLEMA
- 24 -
Mayor facilidad de conexión con el PC.
Entre sus desventajas:
Necesidad de un sensor que nos indique que imagen concreta de la
señal de video debe tomarse.
Equipos generalmente caros.
2.2 SEGMENTACIÓN DE LA MATRICULA
Ésta es, sin duda, la parte más importante del proyecto y es por ello donde
mas se ha profundizado y desarrollado.
Comentaremos en el presente apartado los posibles métodos de
segmentación de la matrícula partiendo de una foto de un coche.
2.2.1 Segmentación Manual
Es un método obvio, pero que aun así debe ser considerado. Consistiría en
un operario encargado de mirar constantemente la pantalla y accionando el
ratón selecciona la zona de la matrícula.
Las ventajas de este método son:
Las probabilidades de error son mínimas.
Rápida implantación del proyecto.
Las desventajas son:
Cansancio o fatiga del operario al tener que mirar siempre el mismo
PRESENTACION DEL PROBLEMA
- 25 -
punto de la pantalla
Necesidad de realizar turnos de operarios
Coste de mano de obra de los operarios.
2.2.2 Segmentación Automática
No es tan seguro como el anterior, pero ofrece mayores prestaciones. Entre
ellas cabe destacar: el tiempo de cómputo es menor, el coste de la operación es
menor y el tiempo de funcionamiento es continuo.
A continuación exponemos distintos métodos de segmentación de
matrículas:
2.2.2.1 Método Morfológico
La base de este método es: los caracteres son objetos formados por trazos
finos y colocados sobre un fondo de color opuesto. Eso permite detectarlos con
el operador morfológico llamado top-hat, que se basa en borrar los caracteres y
obtener la resta entre la imagen original y la imagen procesada.
El borrado de caracteres se consigue, en este caso, aplicando un closing
(operador morfológico para escala de grises que suaviza contornos, elimina
pequeños “hoyos” y rellena huecos en el contorno) a la primera imagen con un
elemento estructurante que no quepa dentro del trazo de las letras.
Para completar la localización se binariza la imagen que resulta del top-
hat, eligiendo un umbral con el conocido método de Otsu (véase referencia [3]).
PRESENTACION DEL PROBLEMA
- 26 -
Después, se aplican técnicas de morfología binaria para conseguir unir todos los
caracteres en un rectángulo y borrar todo lo que no pertenezca a dicho
rectángulo. Para ello, hay que suponer conocida la máxima distancia entre
caracteres y la máxima y mínima altura de éstos.
Esta es la limitación principal de este método: sólo se puede aplicar si el
tamaño de los caracteres es conocido. Generalmente, esto significa que se puede
aplicar cuando la distancia entre la cámara y la placa es constante. Una vez
aislada, la placa que resulta suele ser un poco más pequeña que la real por lo
que se agranda con una dilatación.
Para mayor información sobre métodos morfológicos aplicados a
imágenes les recomendamos la lectura de libros de tratamiento digital de
imágenes. En nuestro caso hemos acudido a la sección 8.4 de [2].
2.2.2.2 Método Gradiente
a) b)
Figura 2.6. a) Imagen original b) Imagen realizado el Top-Hat
PRESENTACION DEL PROBLEMA
- 27 -
Este método fue sacado del artículo [] 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 revés).
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 derivación y
a) b)
Figura 2.8. a) Imagen original b) Imagen aplicada el gradiente Sobel horizontal
-1 0 1 -2 0 2 -1 0 1
b)
z1 z2 z3 z4 z5 z6 z7 z8 z9
a)
Gh=(z3 + 2z6 + z9) - (z1 + 2z4 + z7) c)
Figura 2.7. a) Representación de la imagen b) Operador gradiente Sobel horizontal
c) Expresión del gradiente Sobel para cada píxel.
PRESENTACION DEL PROBLEMA
- 28 -
suavizado en un mismo paso, siendo este último efecto muy interesante pues
como es sabido, la derivación realza el ruido.
El problema de esta implementación consiste en saber qué son "valores
altos" de gradiente. La elección de un umbral fijo, lleva a grandes problemas
cuando varía el contraste de las imágenes 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 método 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 localización por gradiente funcione incluso en
imágenes de muy bajo contraste.
Para mas información sobre método de gradiente de Sobel aplicado a
imágenes, recomendamos acudan a referencia [2] apartado 7.1.
2.3 BINARIZACIÓN DE LA MATRÍCULA
Nuestro objetivo es encontrar el umbral óptimo que permita separar los
píxeles pertenecientes al fondo de aquellos pertenecientes a los caracteres.
Todos los métodos se basan, directa o indirectamente, en estudiar el histograma
de grises de la imagen. Éste será un histograma con dos grandes máximos y un
valle central, como se puede observar en la figura 2.9.
PRESENTACION DEL PROBLEMA
- 29 -
A continuación pasamos a describir posibles métodos de binarización de
la imagen.
2.3.1 Binarización Método Simple
El método mas simple de binarización es elegir como umbral el centro
geométrico del histograma. Es esto, si la imagen tiene 256 niveles de gris
(imagen de 8 bits), el umbral por el método simple sería 128. En la figura 2. 10
se observa el resultado de aplicar este método tomando como origen la
matrícula de la imagen 2.9.
2.3.2 Binarización Método Porcentual
a)
b)
Figura 2.9. a) Matricula original b) Histograma de la matrícula
PRESENTACION DEL PROBLEMA
- 30 -
La binarización por el método 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 binarización por este método.
2.3.3 Binarización Método Otsu
A partir del histograma de la imagen podemos inferir algunos parámetros
estadísticos. Primero, calculamos la media y varianza globales de los niveles de
gris.
a)
b) Figura 2.10 a) Matricula y b) histograma Método Simple
PRESENTACION DEL PROBLEMA
- 31 -
∑= )(· lplµ ∑ −= )(·)( 22 lpl µσ
Después 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).
∑−
=1
01 )(
U
lpw ∑+
=255
12 )(
Ulpw
∑−
=1
011 )(·
U
wlplµ ∑+
=255
122 )(·
Uwlplµ
a)
b)
Figura 2.11 a) Matricula y b) histograma Método Porcentual
PRESENTACION DEL PROBLEMA
- 32 -
( )∑−
−=1
01
21
21 )(
U
wlpl µσ ( )∑+
−=255
12
22
22 )(
Uwlpl µσ
Después de eso podemos definir la "varianza conjunta después de aplicar
el umbral U": 222
211
2 σσψ ww += .
La diferencia 22 ψσ −=D es una medida de la calidad del umbral U. En
un caso ideal, donde la imagen tuviera sólo dos niveles de gris se cumpliría D=0
cuando U no está entre los niveles y 2σ=D > 0 si está entre ellos.
El algoritmo consiste simplemente en calcular D para todos los posibles
a)
b)
Figura 2.12. a) Matricula y b) histograma Método Otsu
PRESENTACION DEL PROBLEMA
- 33 -
umbrales y usar el que produce el máximo. Podemos ver que las fórmulas son
adecuadas para un cálculo iterativo y rápido (podemos calcular las sumas para
un valor de umbral a partir de las anteriores: sumando o restando un valor).
Este método es el más robusto ante cualquier tipo de histograma y, de
hecho, es el más referenciado y utilizado de la literatura.
Para mas información sobre el método Otsu para la binarización de
imágenes en escala de grises, recomendamos la búsqueda y lectura del artículo
[3] de las referencias.
2.4 RECONOCIMIENTO DE LOS CARACTERES
Una vez localizada la matrícula, el siguiente paso es el de reconocer los
caracteres. En este apartado debemos resolver el problema de asignar a una
imagen o porción de una imagen el carácter alfanumérico que mas se le
parezca, atendiendo a criterios de forma, área, número de huecos...
Estudiaremos dos posibilidades de reconocimiento de caracteres,
exponiendo sus ventajas y desventajas.
2.4.1 Reconocimiento Manual
El reconocimiento manual es una opción que, aun siendo obvia no debe
omitirse. El procedimiento necesario para reconocer la matrícula manualmente
sería básicamente el de ir escribiendo en forma de texto la matrícula tal y como
se percibe por los ojos del operario a cargo.
PRESENTACION DEL PROBLEMA
- 34 -
Las ventajas que presenta esta opción son:
Menor probabilidad de error.
Inmediatez de implantación 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.
2.4.2 Reconocimiento Automático
El siguiente paso, una vez localizada y binarizada la matrícula, es el de
reconocer los caracteres de la matrícula. Los pasos necesarios para reconocer los
caracteres son:
• Segmentación de los caracteres: proceso de “separacion” de los
caracteres que componen la matrícula. Para ello se pueden utilizar
métodos tan simples como una proyección vertical de la imagen binaria
y cortar por donde la proyección sea mínima.
• Rechazo de caracteres no válidos: rechazo de caracteres que no
cumplan unas determinadas normas como: altura mínima y máxima,
área mínima y máxima...
PRESENTACION DEL PROBLEMA
- 35 -
• Reconocimiento de patrones: usar métodos que permitan asignar a una
imagen el carácter que mas se le asemeje atendiendo a determinadas
características. Así, se podrían utilizar métodos basados en
proyecciones, métodos que usan redes neuronales...
Para no aumentar la complejidad del proyecto, se tomó la decisión de no
incluir esta parte en desarrollo del proyecto. Se deja así como futura línea de
ampliación.
Por lo tanto, en nuestro caso podríamos usar programas de
reconocimiento óptico de caracteres (OCR) de libre distribución como GOCR,
versiones trial como Transym OCR (TOCR) o programas de pago perfectamente
desarrollados como Omnipage Pro.
2.5 CONCEPTOS BASICOS DE BASES DE DATOS
Simplificando, se puede decir que una base de datos es una herramienta
para el mantenimiento y la manipulación de la información de una forma
eficiente y efectiva. “Eficiente y efectiva” en el sentido de que los datos se
protegen frente a pérdidas o daños accidentales, no utilizan más recursos
(humanos o informáticos) de los necesarios y se pueden recuperar de diferentes
formas dentro de unos límites de rendimiento aceptables.
La base de datos en sí misma es la realización física de un modelo
relacional, que es una forma de describir algunos aspectos del mundo real de
acuerdo con una serie de reglas.
PRESENTACION DEL PROBLEMA
- 36 -
En teoría, una base de datos se puede crear desde cero, pero lo normal
será utilizar los servicios de un sistema de gestión de bases de datos (SGBD).
Los sistemas de gestión de bases de datos mas conocidos son Microsoft Access,
Microsoft SQL Server y Oracle.
2.5.1 ¿Qué es una Base de Datos?
ESPACIO DEL PROBLEMA
MODELODE DATOS
ESQUEMA DE LABASE DE DATOS
SISTEMA DE BASE DE DATOS
APLICACION
MOTOR BASE DE DATOS
BASE DE DATOS
Figura 2.13. Terminología de Bases de Datos
PRESENTACION DEL PROBLEMA
- 37 -
El término base de datos se puede utilizar para describir cualquier cosa
desde un sencillo conjunto de datos, como una lista de teléfonos, hasta un
complejo conjunto de herramientas como SQL Server. La Figura 2.13 muestra
las relaciones existentes entre los términos que se describen a continuación.
Aunque para las bases de datos relacionales no se pueden establecer
analogías con entidades del mundo real, la mayoría intentan modelar algún
aspecto del mundo real. A esa pequeña 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 fructífero
resulta crítico restringir el sistema de base de datos que se va a diseñar a un
conjunto específico y bien definido de objetos e interacciones.
Utilizaremos el término modelo de datos para referirnos a la descripción
conceptual del espacio del problema. Esto incluye la definición de entidades,
sus atributos (un Cliente, por ejemplo, es una entidad que tendrá atributos
como el Nombre y la Dirección) y sus restricciones (tales como que
Nombre-Cliente ha de tener valor). El modelo de datos también incluye una
descripción de las relaciones establecidas entre las entidades y cualquier
restricción que se aplique a esas relaciones.
La definición de la disposición física -las tablas y vistas que se
realizarán- es lo que se conoce como esquema de la base de datos. Se trata de la
traducción del modelo conceptual a una representación física que se pueda
realizar utilizando un sistema de gestión de bases de datos. El esquema no es
PRESENTACION DEL PROBLEMA
- 38 -
más que el modelo de datos expresado en los términos que se utilizarán 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 ningún momento con la realización física.
Una vez que se ha “explicado” al motor de base de datos la forma deseada
para los datos, utilizando directamente código o algún entorno interactivo
como Microsoft Access, el motor creará algunos objetos físicos (normalmente,
aunque no siempre, en algún sitio de un disco fijo) en los que se guardarán los
datos. La combinación de estructura y datos es a lo que nos referiremos como
base de datos. En la base de datos se incluyen las tablas físicas, las vistas
definidas, consultas y procedimientos almacenados, y las reglas que impondrá
el motor para proteger los datos.
El término base de datos no engloba a la aplicación, que consiste en una
serie de formularios e informes con los que el usuario interactúa, ni tampoco
nada de lo que se utiliza para acoplar la interfaz con la maquinaria que trabaja
por detrás -cosas como un software intermedio o el servidor de transacciones de
Microsoft. El término 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, además de la base de datos -formularios e informes, por ejemplo.
Para referirnos a todos estos componentes -la aplicación, la base de datos,
el motor de base de datos y el software intermedio- utilizaremos el término
PRESENTACION DEL PROBLEMA
- 39 -
sistema de base de datos. Todo el software y los datos que sirven para realizar
un sistema de producción se considera parte del sistema de base de datos.
2.5.2 Herramientas de Bases de Datos
Son muchas las herramientas, por lo que conviene que nos detengamos un
poco ahora para ver cuáles son y cómo encajan entre ellas. La figura 2.14
muestra las herramientas que describiremos.
2.5.2.1 Motores de Bases de Datos
En el nivel inferior se encuentran los motores de base de datos. A veces, se
Microsoft Access Microsoft Visual Basic C, Matlab, Delphi…
HTML ASP
DESARROLLO DE LA INTERFAZ
ADO DAO/Jet
DAO/ODBCDirect RDO
MODELO OBJETOS ACCESO A DATOS
Microsoft Jet Microsoft SQL Server
Oracle Informix
MOTORES BASES DE DATOS
Figura 2.14. Herramientas de Bases de Datos
PRESENTACION DEL PROBLEMA
- 40 -
les denomina soportes, aunque no resulta del todo adecuado, ya que el término
“soporte” realmente se refiere a una arquitectura física específica. Son los
aparatos que gestionan la manipulación física de los datos -almacenándolos en
disco y proporcionándolos cuando son solicitados.
Caben destacar dos motores de la compañía 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 manipulación de datos.
La diferencia entre ellos radica en sus arquitecturas y en sus ámbitos de
actuación. Microsoft Jet es un motor de base de datos orientado hacia sistemas
de pequeño a mediano tamaño. 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 críticas
(esto no debe dar a entender que el motor de base de datos Jet sólo resulte
adecuado para sistemas poco más 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 programación y el motor de base de datos; proporciona un
conjunto de objetos con propiedades y métodos que se pueden manipular por
medio del código. 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
PRESENTACION DEL PROBLEMA
- 41 -
normalmente para el acceso a orígenes 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 próximo.
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 orígenes
de datos como SQL Server y Oracle. ADO hace uso de una jerarquía de objetos
más pequeña que las de los otros dos, consistiendo tan sólo en cuatro objetos
principales, y proporciona algunas ampliaciones notables del modelo -por
ejemplo, su soporte para conjuntos de registros sin conexión y el modelado de
datos.
2.5.2.3 Herramientas de desarrollo de la interfaz
Los motores de bases de datos manejan los aspectos físicos de la
manipulación de datos por nosotros, pero necesitamos alguna forma de
indicarles cómo estructurar los datos. Existen multitud de métodos para
hacerlo, todos con una funcionalidad similar.
Se puede definir la estructura de la base de datos por medio de código,
aunque en circunstancias normales no resulta recomendable. Las herramientas
interactivas resultan más rápidas, sencillas e intuitivas de usar.
Una vez establecida la definición física de la base de datos, necesitamos
herramientas para crear los formularios e informes con los que interactuarán los
usuarios. Sin duda alguna, cabe destacar la interfaz de Microsoft Access, muy
PRESENTACION DEL PROBLEMA
- 42 -
intuitiva, potente y fácil de manejar.
Para ampliar sobre la materia de bases de datos recomendamos la lectura
de libros de informática sobre sistemas de bases de datos. Para la redacción del
proyecto nos hemos apoyado en [4] de la referencia.
- 43 -
3 HERRAMIENTAS UTILIZADAS
3.1 MATLAB
MATLAB es sin duda alguna el programa por excelencia de aplicación en
el sector industrial, la administración y la universidad. A través de su entorno
en modo comando y su amplia gama de funciones y toolboxes (paquetes de
funciones específicos), se puede implementar con un reducido número de
instrucciones casi cualquier problema de ingeniería.
MATLAB dispone de herramientas para:
• Adquisición de datos, tratamiento y presentación de datos.
• Desarrollo de rutinas y programas.
• Presentación de gráficas.
• Adquisición, procesado y presentación de imágenes.
• Simulación de sistemas.
MATLAB es un sistema cuyo elemento básico es una matriz. Esto permite
resolver problemas de computación técnica, especialmente aquellos con
formulaciones vectoriales o matriciales.
HERRAMIENTAS UTILIZADAS
- 44 -
El sistema de MATLAB consta principalmente de:
• Entorno de trabajo: la interfaz que presenta MATLAB con el usuario y
su amplia documentación hacen de MATLAB un programa intuitivo,
fácil de aprender y usar.
• Librerías: la extensa gama de librerías de funciones incluidas en
MATLAB facilitan el ahorro de tiempo y esfuerzo en la programación,
proporcionando además unos resultados óptimos.
• Lenguaje MATLAB: es un lenguaje de alto nivel, que trabaja con
vectores. Además, al estar basado en el lenguaje C, la mayoría de las
funciones y comandos son conocidos por un usuario iniciado en la
programación.
A continuación describiremos de forma mas detallada cada una de las
partes utilizadas en la elaboración del proyecto.
3.1.1 Tipos de datos
Principalmente el tipo de datos usado es la matriz de números enteros.
Cabe recordar que una imagen digital no es mas que una matriz de píxeles,
cada píxel con un número (imagen en escala de grises) o una tripleta de
números (imagen en color).
Aparte de las matrices de números enteros, también se han usado datos
del tipo estructura, sobre todo en el intercambio de datos entre las funciones de
HERRAMIENTAS UTILIZADAS
- 45 -
callback de la interfaz gráfica.
3.1.2 Funciones
Las funciones o comandos mas utilizados son:
• size: función de MATLAB que devuelve las dimensiones de la variable
que se le pasa como entrada.
• length: función de MATLAB que devuelve la longitud a lo largo de la
dimensión horizontal de la variable que se le pasa como entrada.
• zeros: función que devuelve una matriz de ceros de las dimensiones
pasadas como parámetros.
• ones: función que devuelve una matriz de unos de las dimensiones
pasadas como parámetros.
• sum: función que realiza la suma por columnas de una matriz. En el
caso de tener una única dimensión, realiza la suma total a lo largo de
esa dimensión.
• max: función que realiza una búsqueda por columnas de los máximos
de una matriz. Caso de tener una única dimensión, devuelve el máximo
de todos.
• mean: función que realiza la media por columnas de una matriz. Caso
de tener una única dimensión, devuelve la media total.
• find: función que realiza una búsqueda en el vector de entrada de los
HERRAMIENTAS UTILIZADAS
- 46 -
valores que cumplen una determinada condición.
• filter2: función que realiza el filtrado en 2 dimensiones de una matriz de
entrada.
• get: devuelve el valor de una o varias propiedades de un objeto. Muy
usado en los callbacks de la interfaz.
• set: asigna el valor de una o varias propiedades de un objeto. Muy
usado en los callbacks de la interfaz.
3.1.3 Biblioteca de Tratamiento Digital de Imágenes
El toolbox de tratamiento digital de la imagen de MATLAB versión 3.2 ha
sido muy útil para la elaboración del proyecto, pues sin él la mayoría de las
operaciones relacionadas con imágenes se tendrían que haber realizado a nivel
de entero y con infinidad de bucles. Esto llevaría a una gran lentitud en la
elaboración del proyecto y lo que es peor, en el tiempo de cómputo del
programa.
Las funciones del toolbox mas utilizadas son:
• imread: función que realiza la lectura de la imagen en varios formatos
(jpg, bmp, gif, tif...) y la almacena en una matriz.
• imwrite: función que graba la imagen en varios formatos tomando como
origen una matriz con los valores de los píxeles.
• imshow: función que muestra la imagen en pantalla.
HERRAMIENTAS UTILIZADAS
- 47 -
• imresize: función que escala el tamaño de la imagen a un tamaño mayor
o menor.
• imhist: función que computa el histograma de la imagen.
• rgb2gray: función que convierte una imagen a color en una imagen en
escala de grises.
• bwmorph: función que realiza operaciones morfológicas como apertura,
cierre, erosión, dilatación... sobre una imagen binaria.
• bwlabel: función que numera en una imagen binaria el número de partes
conexas.
3.1.4 Biblioteca de Bases de Datos
El toolbox de bases de datos contiene cantidad de funciones para el
tratamiento de datos con MATLAB. En nuestro caso hemos usado un reducido
número de ellas, pues sólo realizamos acciones de consulta.
• database: función que realiza la conexión con la base de datos a través
del objeto de acceso a base de datos (ADO).
• exec: ejecuta la acción que se le indique como parámetro ya sea consulta
de acción, de actualización, de visualización...
Los datos son devueltos en forma de estructura, luego para acceder a ellos
hay que emplear la metodología usada para las estructuras.
HERRAMIENTAS UTILIZADAS
- 48 -
3.1.5 Interfaz gráfica de usuario (GUI)
Crear una interfaz gráfica con MATLAB es muy sencillo. Para ello
MATLAB dispone de una entorno gráfico intuitivo como el de la figura 3.1.
La interfaz gráfica 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:
• Push Button: boton que al apretar se realiza una acción. Un ejemplo
Figura 3.1. Entorno para el desarrollo de GUI
HERRAMIENTAS UTILIZADAS
- 49 -
sería el típico botón de “Aceptar” de Windows.
• Toggle Button: Botón que al presionar se queda hundido y no se levanta
hasta que vuelve a ser presionado. Un ejemplo sería el boton de negrita
de un procesador de textos.
• Radio Button: Normalmente suelen aparecer en grupos. Botón que al
pulsar sobre él queda marcado y no se puede marcar ninguno de los
demás. Un ejemplo sería el de “Acepto las condiciones” o “No acepto
las condiciones” al instalar un programa.
• Check Box: Casilla de verificación que al pulsar sobre él se pone un tick
la casilla y al volver a pulsar se quita. Un ejemplo típico es el de
seleccionar las opciones en el menú de instalación de un programa.
• Edit Text: Cuadro en el que se puede insertar, editar o borrar texto. Un
ejemplo es el cuadro de texto de un buscador.
• Static Text: Etiqueta de texto cuya misión es meramente informativa
pues no es editable.
• 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.
• Listbox: Lista de opciones en la que se puede señalar una o varias de
ellas con la tecla Control.
HERRAMIENTAS UTILIZADAS
- 50 -
• PopUp Menu: Similar a una lista de opciones pero desplegable.
• Axes: Objeto en el que se van a representar gráficas, figuras, imágenes...
La mayoría de los objetos llevan asociado un callback, que no es mas que
una función que se ejecuta al realizar alguna acción (hacer clic, pulsar intro...)
sobre ese objeto. El callback es la parte “invisible” del objeto y es la que hace
que ese objeto tenga acción, pues si no tuviera callback sería simplemente una
figura decorativa.
3.2 RECONOCIMIENTO OPTICO DE CARACTERES (OCR)
Para el reconocimiento de los caracteres, al no entrar dentro de las
especificaciones del proyecto, el objetivo era buscar un motor de OCR que
respondiera a nuestras necesidades. Para ello debía reunir unos requisitos
mínimos:
• Bajo tiempo de cómputo.
• Baja tasa de errores.
• Versión gratuita o de prueba.
• Posibilidad de interconexión con MATLAB.
La primera opción fue probar con programas de libre distribución
realizados en MATLAB, C o cualquier otro lenguaje de programación. La tasa
de error de estos programas era muy alta, y en ninguna matrícula acertaba
todos los caracteres.
HERRAMIENTAS UTILIZADAS
- 51 -
Se decidió entonces en usar programas de distribución comercial. El
problema que presentan éstos es que al ser productos “cerrados”, la única
interconexion posible con MATLAB es la de cambiar de una aplicación a otra
manualmente, cosa no muy recomendable pues uno de los objetivos del
proyecto es que realice todos los pasos automáticamente.
Usamos entonces una versión de prueba de un programa de distribución
comercial, Transym OCR (http://www.sorcery.demon.co.uk). Este programa,
además de ofrecer unos excelentes resultados con la mayoría de las matrículas,
proporciona al usuario el código fuente de su interfaz.
Fue necesario entonces aprender a programar en Visual Basic para
Figura 3.2. Interfaz del programa Transym OCR
HERRAMIENTAS UTILIZADAS
- 52 -
modificar el interfaz y desarrollar un ejecutable -con el motor del programa
original- que pasándole la imagen binaria de la matrícula nos devolviera en un
archivo de texto los caracteres que contiene.
3.3 BASES DE DATOS
Para esta última parte se ha utilizado el entorno de base de datos
Microsoft Access, por su sencillez y por ser el mas conocido en el mercado.
Posteriormente hemos creado un objeto de acceso a base de datos ODBC
que servirá de enlace entre MATLAB y el motor de base de datos (Jet en este
caso, por utilizar Access).
3.3.1 Implementación de la Base de Datos con Access
Antes de ponerse con Microsoft Access a crear tablas y campos, se debe
tener bien claro la estructura de datos del problema. Una base datos creada
directamente sin haber pasado por el proceso previo de modelado de datos y
esquematización puede dar lugar a inconsistencias y cualquier incidencia que
surja llevará a una reforma total de la base de datos.
Una vez realizado los pasos de modelado y esquematización, la creación
de la base datos en Access es muy sencilla. Los pasos a seguir para crear cada
una de las tablas son:
1. Hacer clic en el objeto Tablas del menú de la izquierda.
2. Hacer doble clic en “Crear una tabla en vista diseño”.
HERRAMIENTAS UTILIZADAS
- 53 -
3. Ir creando cada campo con sus respectivos tipos de datos y
propiedades.
4. Elegir el campo clave, seleccionándolo 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 opción de Access de crear relaciones (ver figura 3.4). Las
relaciones se crean seleccionando el campo de una tabla y arrastrándolo hasta
colocarlo encima del campo de la otra tabla con el que se relaciona. Se debe
repetir este paso tantas veces como relaciones haya.
Figura 3.3. Diseño de tablas en Microsoft Access
HERRAMIENTAS UTILIZADAS
- 54 -
3.3.2 Definición del Objeto de acceso a Datos
Al estar implementada la base de datos con Microsoft Access debemos
crear un objeto de acceso a datos ODBC para el motor Microsoft Jet, pues Jet es
el motor que maneja los datos de Access.
Los pasos a seguir para crear un objeto ODBC en Windows son:
1. Ir a Panel de Control Herramientas Administrativas.
2. Pulsar sobre el icono Origenes de datos (ODBC).
3. En la aplicación que se abre, Pulsar sobre el botón 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
Figura 3.4. Definición de relaciones en Access
HERRAMIENTAS UTILIZADAS
- 55 -
descripción, y seleccionar la ruta donde se encuentra la base de datos
(Ver figura 3.6)
Figura 3.5. Administrador de origenes de datos ODBC
Figura 3.6. Configuración de ODBC de Access
HERRAMIENTAS UTILIZADAS
- 56 -
6. Pulsar sobre Aceptar.
Ya estaría 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 función database del toolbox de base de datos de
MATLAB (véase apartado 3.1.4).
- 57 -
4 DETALLE DEL PROYECTO
4.1 DESCRIPCIÓN TEÓRICA
Nos disponemos a detallar los pasos seguidos para la elaboración del
proyecto. Cada decisión ha sido tomada atendiendo a unos criterios muy
definidos. Así, en algunos pasos se optó por la opción que proporcionaba una
mayor sencillez, en otras se optó por la de mayor precisión y en otras por ser la
única opción entre las posibles.
4.1.1 Adquisición de la imagen digital
Este fue el primer paso en dar para la elaboración del proyecto, pues sin
unas imágenes con las que trabajar y contemplar resultados, difícilmente se
podría haber avanzado.
Optamos por utilizar una cámara digital fotográfica de alta gama, ya que
se nos presentó la posibilidad de disponer de ella por un tiempo limitado.
Las fotos fueron tomadas a una resolución de 800x600 píxels pues para el
reconocimiento óptico de caracteres cuanto mayor sea la resolución del carácter,
menor es la probabilidad de error.
DETALLE DEL PROYECTO
- 58 -
4.1.2 Localización de la matrícula
En este paso se usó la técnica del gradiente de Sobel (véase apartado
2.2.2.2) porque las herramientas que proporciona MATLAB para la utilización
de este método son sencillas y el tiempo de cómputo es muy reducido.
El algoritmo utilizado se ha realizado atendiendo medidas variables de
matrículas, evitando usar valores fijos, siendo así apto para imágenes con la
matrícula cercanas al objetivo como para matrículas lejanas.
El primer paso del algoritmo fue el de reducir la matrícula a una
resolución de 320x240 pues se observó que con imágenes de gran resolución el
algoritmo de detección presentaba fallos en algunas matrículas. El segundo
paso es el de aplicar el gradiente horizontal de Sobel a la imagen (véase
apartado 2.2.2.2).
Llegados a este punto, destacamos que el algoritmo realiza la localización
de la matrícula en 2 pasos, localizando primero la matrícula en horizontal y
luego en vertical.
4.1.2.1 Localización Horizontal
Para la localización horizontal de la matrícula se usa una metodología
muy sencilla y a la misma vez muy eficaz.
Se toma como origen la imagen del gradiente horizontal, y se calcula por
filas el número de píxeles que tiene un valor alto del gradiente horizontal.
DETALLE DEL PROYECTO
- 59 -
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 número de píxeles que tienen un valor mayor del umbral. Como se
puede observar en la figura 4.2 en la zona donde se localiza la matrícula hay
valores altos del gradiente. Eso es debido al gran número de transiciones de
colores claros a colores oscuros y viceversa que hay en las matrículas españolas.
Basta con buscar desde el máximo hacia arriba y abajo los puntos donde el
pico decae hasta ser casi cero. Así entonces tenemos las coordenadas en la
dimensión vertical donde posiblemente empiece y termine la matrícula.
Figura 4.1. Histograma del gradiente de la imagen y umbral seleccionado
DETALLE DEL PROYECTO
- 60 -
4.1.2.2 Localización vertical
Para localizar la matrícula verticalmente realizamos el mismo
procedimiento que en horizontal, pero ya partimos del resultado de la
localización horizontal y utilizamos solo las filas resultado del proceso anterior.
Figura 4.2. Zonas donde el gradiente es alto
Figura 4.3. Zonas de la matrícula horizontal donde el gradiente es alto
DETALLE DEL PROYECTO
- 61 -
En este caso tomamos los primeros puntos que empezando por los bordes de la
imagen tienen un valor superior a un límite dado (Véase figura 4.3). Así se
obtienen dos columnas por las que “cortar” para obtener la matrícula
verticalmente.
Entonces, con las filas y las columnas de corte resultados de la localización
vertical y horizontal respectivamente podemos extraer la localización
aproximada de la matrícula.
4.1.3 Binarización
Para la binarización de la matrícula hemos utilizado el método porcentual
(véase apartado 2.3.2) pues necesitábamos un valor de umbral bajo que nos
permitiera eliminar elementos que tienen tonos de grises en torno al centro del
histograma.
Además, cada imagen puede tener un contraste diferente dependiendo de
la hora y las condiciones en la que se tome la fotografía, y los otros métodos de
binarización presentaban valores altos del umbral y apenas distingue entre
imágenes de contraste alto e imágenes de contraste bajo.
Posteriormente para mejorar los resultados de la binarización realizamos
una operación morfológica de apertura, cuyo efecto es el de unir pequeños
cortes y suavizar los contornos.
Ya la imagen está lista para ser procesada por el motor de OCR.
DETALLE DEL PROYECTO
- 62 -
4.1.4 Reconocimiento de los caracteres (OCR)
Como ya se ha dicho previamente, esta parte no formaba parte de las
especificaciones del proyecto, por lo que apenas se ha trabajado en ella.
En este apartado donde mas se ha trabajado fue en modificar el código
fuente del interfaz del programa TOCR (véase apartado 3.2) para adecuarlo a
nuestras necesidades. Así, conseguimos desarrollar un ejecutable que tomando
una imagen de la matrícula de una dirección dada, guarda el resultado del OCR
en un fichero de texto en la misma ubicación.
Ya nuestra labor en MATLAB fue la de prepararle la imagen al programa,
ejecutarlo y tomar los datos del fichero de texto.
4.1.5 Base de datos
Elaboramos una base de datos simple en Access con los campos básicos de
un coche, como pueden ser: color, marca, modelo, propietario, teléfono....
Esta base de datos tan simple tiene un diagrama entidad-relación como el
de la figura 4.4. Para los que no estén 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
VEHICULO PROPIETARIO1 N
Figura 4.4 Diagrama entidad-relación de la base de datos del proyecto
DETALLE DEL PROYECTO
- 63 -
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.
4.1.6 Interfaz gráfica de usuario
Con la ayuda de las herramientas que proporciona MATLAB para la
creación de interfaces gráficas de usuario (véase apartado 3.1.5), ha sido fácil
desarrollar una interfaz agradable a la vista del usuario.
Como en todo lenguaje de programación visual, la interfaz lleva por
detrás un código que hace que funcione como se desea. Esto quiere decir que
cada una de las opciones (botones, menús, checkbox...) que se incluyen en el
interfaz lleva asociada una función de callback donde se detallan las sentencias a
realizar. Todo este código es guardado automáticamente por MATLAB en un
fichero .m con el mismo nombre que la interfaz de usuario. En el caso particular
de nuestro proyecto se detalla mas adelante el código de este fichero.
Como se observa en la figura 4.5, nuestra interfaz consta básicamente de:
• Barra de menús: En ella se distinguen el menú “Archivo” que incluye
acciones propias de estos menús como abrir o guardar una imagen y
salir del programa. En el menú “Acción” se puede realizar las
operaciones de búsqueda de matrícula y de OCR.
• Imagen de la matrícula: Ejes donde va a ir ubicada la imagen original
de la matrícula, reducidos a un tamaño de 400x300.
DETALLE DEL PROYECTO
- 64 -
• Casilla de imagen binarizada: Si seleccionamos esta casilla se mostrará
la imagen binarizada de la matrícula. Si no está seleccionada se muestra
en escala de grises.
• Boton de búsqueda automática: Botón de acción que lanza el algoritmo
de localización de la matrícula explicado en el apartado 4.1.2.
• Boton de OCR: Botón de acción que lanza el procedimiento de OCR de
la matrícula (véase apartado 4.1.4) y la búsqueda de los datos en la base
de datos (véase apartado 4.1.5).
• Campos de texto en donde se presentan los datos del coche, resultado
de la consulta realizada a la base de datos.
Figura 4.5. Interfaz gráfica del proyecto
DETALLE DEL PROYECTO
- 65 -
Como complemento adicional se han añadido sonidos, a modo de alarmas
para el operador, para los casos en los que se reconoce la matrícula del coche y
para los casos en que la matrícula no es reconocida.
4.2 DESCRIPCION PRÁCTICA (RUTINAS)
A continuación exponemos el código de las rutinas empleadas para la
realización del proyecto.
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});
DETALLE DEL PROYECTO
- 66 -
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; % Añadimos 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 búsqueda 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);
DETALLE DEL PROYECTO
- 67 -
% -------------------------------------------------------------------- % --- 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');
DETALLE DEL PROYECTO
- 68 -
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
DETALLE DEL PROYECTO
- 69 -
% 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.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');
DETALLE DEL PROYECTO
- 70 -
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,100-
h,300,h]); %Realizamos unos calculos para colocar las matriculas en la misma % posición ya que no todas tienen el mismo tamaño. axes (handles.matricula_axes); %Seleccionamos como ejes los de la matricula imshow (imagen); set(handles.matricula_axes,'XTick',[],'YTick',[]);
DETALLE DEL PROYECTO
- 71 -
%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); % Cálculo 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, píxel por píxel ux=umbral(histy,histx,0.025); %Cálculo del umbral a superar por el gradiente horizontal para ser % candidato a matrícula
DETALLE DEL PROYECTO
- 72 -
%LOCALIZACION HORIZONTAL DE LA MATRICULA num=sum ((abs(Gh)>ux)'); %Por filas, número de píxeles del gradiente horizontal con gradiente % superior al umbral replay=1; [yhorz,xhorz]=max(num); % Fila que contiene el máximo 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 % erróneos [aux3,aux4]=max(aux2); aux5=aux4-170; %aux7 y aux6 son los limites dados por la convolución del rectángulo 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 reducción 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 Morfológica de apertura) bin=bwmorph(bin,'open'); % Eliminacion de bordes % Por la izquierda flag=0; izq=1; while (flag==0)
DETALLE DEL PROYECTO
- 73 -
if (mean(bin(:,izq))>0.7) flag=1; else izq=izq+1; end 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 tamaño % 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 matrícula fichero=fopen('c:\mat.txt'); texto=fgetl(fichero); % Abrimos el fichero de texto y extraemos la cadena de la matricula
DETALLE DEL PROYECTO
- 74 -
i=1; j=1; % Realizamos un bucle que comprueba que los caracteres obtenidos son % caracteres alfanuméricos 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 operación 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 operación de gradiente horizontal sobre la imagen % mediante el método de Sobel. % Gx es el resultado % I es la imagen original hx=-1*(fspecial('sobel'))';
DETALLE DEL PROYECTO
- 75 -
% hx contiene el filtro de sobel horizontal Gx=filter2(hx,I);
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 número de puntos % indicado en n % X devuelve la posición 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 posición 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
- 76 -
5 CONCLUSIONES
5.1 RESULTADOS
5.1.1 Resultados individuales
A continuación se presenta una tabla en la que se muestra las imágenes de
18 fotografías de coches, la localización de la matrícula que ofrece el proyecto y
el resultado que da el motor de OCR:
FOTO ORIGINAL MATRICULA BINARIZADA OCR
SE8922DS
7753TP
CONCLUSIONES
- 77 -
SE2104AG
28E1215CL
SE6102AC
SE9692CH
58995BXY
CONCLUSIONES
- 78 -
SE2316CU
SE2048CM
SE8353CZ
SE7329DV
SE9139BN
CONCLUSIONES
- 79 -
SE3625CH
SE7175CC
SE7643DU
SE8268V
SE1051AZ
CONCLUSIONES
- 80 -
SE7419AT
5.1.2 Resultados totales
Tomando los resultados parciales, podemos inferir unos datos estadísticos
sobre el funcionamiento en su totalidad del proyecto:
• Numero de imágenes de coches: 18
• Matriculas de coche localizadas: 18 (100%)
• OCR:
Correctas: 13 (72%)
Erróneas por símbolo CEE: 2 (11%)
Erróneas por fallo motor OCR: 3 (17%)
• Tiempo medio de respuesta (tiempo que se tarda en localizar la
matrícula y presentar los resultados) : 1,05 segundos
5.2 LINEAS DE AMPLIACION
5.2.1 Algoritmo de segmentación de la matricula
Como se ha destacado en esta memoria, el algoritmo de segmentación de
la matrícula presenta pocos fallos y es rápido en el cómputo. El único pero
CONCLUSIONES
- 81 -
que se le puede poner es que a veces se traga el símbolo de la comunidad
europea y por consiguiente el OCR falla.
Otra posibilidad es desarrollar el algoritmo de segmentación de la
matrícula utilizando otras técnicas de segmentación como las descritas en el
apartado 2.2.2.
5.2.2 Reconocimiento Óptico de Caracteres (OCR)
Como se ha mencionado anteriormente, el motor de OCR no fue incluido
en las especificaciones del proyecto. Una futura línea de ampliación del
proyecto consistiría en implementar un motor de OCR específico para el
reconocimiento de matrículas.
5.2.3 Interfaz gráfica de usuario
En todo programa, es de agradecer que la interfaz que presenta sea
sencilla y manejable. Aparte de esas características, con los avanzados lenguajes
de programación que existen hoy en día, se pueden crear interfaces muy
potentes, con animaciones y gráficos. Se deja como posible línea de ampliación
la elaboración de un proyecto que sea independiente de MATLAB y que pueda
ser ejecutado en cualquier sistema operativo.
- 82 -
6 REFERENCIAS
[1] www.kodak.es
[2] R. Gonzalez y R. Woods. “Digital Image Processing”. Addison-Wesley.
[3] F. Martin Rodriguez y X. Fernández Hermida. “RAMA: Reconocedor
Automático de Matrículas de Automóviles”. 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. “Diseño de bases de datos relacionales con Access y SQL
Server”. McGraw-Hill.