Reconocimiento automático de matrículas de vehículos

82
ESCUELA SUPERIOR DE INGENIEROS DE TELECOMUNICACION PROYECTO FIN DE CARRERA Reconocimiento Automático de Matrículas de Vehículos Autor: José Pablo Caballero Moreno

Transcript of Reconocimiento automático de matrículas de vehículos

Page 1: Reconocimiento automático de matrículas de vehículos

ESCUELA SUPERIOR DE INGENIEROS

DE TELECOMUNICACION

PROYECTO FIN DE CARRERA

Reconocimiento Automático de

Matrículas de Vehículos

Autor: José Pablo Caballero Moreno

Page 2: 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, comprensión y paciencia en los momentos mas difíciles.

Sin ellos, no habría llegado hasta aquí....

Page 3: Reconocimiento automático de matrículas de vehículos

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

Page 4: Reconocimiento automático de matrículas de vehículos

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

Page 5: Reconocimiento automático de matrículas de vehículos

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

Page 6: Reconocimiento automático de matrículas de vehículos

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

Page 7: Reconocimiento automático de matrículas de vehículos

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

Page 8: Reconocimiento automático de matrículas de vehículos

- 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

Page 9: Reconocimiento automático de matrículas de vehículos

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

Page 10: Reconocimiento automático de matrículas de vehículos

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

Page 11: Reconocimiento automático de matrículas de vehículos

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.

Page 12: Reconocimiento automático de matrículas de vehículos

- 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

Page 13: Reconocimiento automático de matrículas de vehículos

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.

Page 14: Reconocimiento automático de matrículas de vehículos

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

Page 15: Reconocimiento automático de matrículas de vehículos

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)

Page 16: Reconocimiento automático de matrículas de vehículos

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á

Page 17: Reconocimiento automático de matrículas de vehículos

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

Page 18: Reconocimiento automático de matrículas de vehículos

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.

Page 19: Reconocimiento automático de matrículas de vehículos

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

Page 20: Reconocimiento automático de matrículas de vehículos

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

Page 21: Reconocimiento automático de matrículas de vehículos

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

Page 22: Reconocimiento automático de matrículas de vehículos

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.

Page 23: Reconocimiento automático de matrículas de vehículos

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.

Page 24: Reconocimiento automático de matrículas de vehículos

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

Page 25: Reconocimiento automático de matrículas de vehículos

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]).

Page 26: Reconocimiento automático de matrículas de vehículos

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

Page 27: Reconocimiento automático de matrículas de vehículos

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.

Page 28: Reconocimiento automático de matrículas de vehículos

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.

Page 29: Reconocimiento automático de matrículas de vehículos

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

Page 30: Reconocimiento automático de matrículas de vehículos

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

Page 31: Reconocimiento automático de matrículas de vehículos

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

Page 32: Reconocimiento automático de matrículas de vehículos

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

Page 33: Reconocimiento automático de matrículas de vehículos

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.

Page 34: Reconocimiento automático de matrículas de vehículos

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...

Page 35: Reconocimiento automático de matrículas de vehículos

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.

Page 36: Reconocimiento automático de matrículas de vehículos

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

Page 37: Reconocimiento automático de matrículas de vehículos

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

Page 38: Reconocimiento automático de matrículas de vehículos

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

Page 39: Reconocimiento automático de matrículas de vehículos

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

Page 40: Reconocimiento automático de matrículas de vehículos

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

Page 41: Reconocimiento automático de matrículas de vehículos

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

Page 42: Reconocimiento automático de matrículas de vehículos

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.

Page 43: Reconocimiento automático de matrículas de vehículos

- 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.

Page 44: Reconocimiento automático de matrículas de vehículos

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

Page 45: Reconocimiento automático de matrículas de vehículos

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

Page 46: Reconocimiento automático de matrículas de vehículos

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.

Page 47: Reconocimiento automático de matrículas de vehículos

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.

Page 48: Reconocimiento automático de matrículas de vehículos

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

Page 49: Reconocimiento automático de matrículas de vehículos

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.

Page 50: Reconocimiento automático de matrículas de vehículos

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.

Page 51: Reconocimiento automático de matrículas de vehículos

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

Page 52: Reconocimiento automático de matrículas de vehículos

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”.

Page 53: Reconocimiento automático de matrículas de vehículos

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

Page 54: Reconocimiento automático de matrículas de vehículos

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

Page 55: Reconocimiento automático de matrículas de vehículos

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

Page 56: Reconocimiento automático de matrículas de vehículos

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).

Page 57: Reconocimiento automático de matrículas de vehículos

- 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.

Page 58: Reconocimiento automático de matrículas de vehículos

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.

Page 59: Reconocimiento automático de matrículas de vehículos

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

Page 60: Reconocimiento automático de matrículas de vehículos

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

Page 61: Reconocimiento automático de matrículas de vehículos

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.

Page 62: Reconocimiento automático de matrículas de vehículos

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

Page 63: Reconocimiento automático de matrículas de vehículos

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.

Page 64: Reconocimiento automático de matrículas de vehículos

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

Page 65: Reconocimiento automático de matrículas de vehículos

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});

Page 66: Reconocimiento automático de matrículas de vehículos

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);

Page 67: Reconocimiento automático de matrículas de vehículos

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');

Page 68: Reconocimiento automático de matrículas de vehículos

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

Page 69: Reconocimiento automático de matrículas de vehículos

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');

Page 70: Reconocimiento automático de matrículas de vehículos

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',[]);

Page 71: Reconocimiento automático de matrículas de vehículos

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

Page 72: Reconocimiento automático de matrículas de vehículos

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)

Page 73: Reconocimiento automático de matrículas de vehículos

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

Page 74: Reconocimiento automático de matrículas de vehículos

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'))';

Page 75: Reconocimiento automático de matrículas de vehículos

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

Page 76: Reconocimiento automático de matrículas de vehículos

- 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

Page 77: Reconocimiento automático de matrículas de vehículos

CONCLUSIONES

- 77 -

SE2104AG

28E1215CL

SE6102AC

SE9692CH

58995BXY

Page 78: Reconocimiento automático de matrículas de vehículos

CONCLUSIONES

- 78 -

SE2316CU

SE2048CM

SE8353CZ

SE7329DV

SE9139BN

Page 79: Reconocimiento automático de matrículas de vehículos

CONCLUSIONES

- 79 -

SE3625CH

SE7175CC

SE7643DU

SE8268V

SE1051AZ

Page 80: Reconocimiento automático de matrículas de vehículos

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

Page 81: Reconocimiento automático de matrículas de vehículos

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.

Page 82: Reconocimiento automático de matrículas de vehículos

- 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.