Upload
cesar-gomez
View
110
Download
1
Embed Size (px)
Citation preview
UNIVERSIDAD NACIONAL AUTÓNOMA
DE MÉXICO
FES ACATLÁN
MAC
SISTEMAS NTELIGENTES
“RECONOCEDOR DE PLACAS”
INTEGRANTES:
Prof. Ulises Abraham Chavez Ramírez
Fecha: Lunes 4 de Junio de 2012
RESUMEN / ABSTRACT
En este proyecto desarrollamos la manera en cómo reconocer los caracteres numéricos de
una placa vehicular, el algoritmo utilizado ha sido diseñado tanto en el campo de
procesamiento digital de imágenes como en el de redes neuronales artificiales.
Dentro del desarrollo del trabajo se realiza una breve descripción del modelo de red
neuronal tipo Hopfield, estableciendo los fundamentos teóricos necesarios para la
construcción y entrenamiento de dicha red. Además, se establecen los parámetros para el
diseño de la arquitectura de este tipo de red que nos permite una solución satisfactoria
para la problemática de clasificar los caracteres.
Lo que logramos como producto final, fue un programa que reconoce el área
perteneciente a la placa para, después, extraer cada uno de los caracteres de la placa que
son manipulados como objetos y posteriormente clasificarlos por medio de redes
neuronales.
Al final del trabajo, se encuentra un análisis de los resultados obtenidos junto con algunas
de las complicaciones que se presentaron en el desarrollo del mismo, además, dejamos
mencionado que para reconocer el resto de los caracteres se sigue un procedimiento muy
similar.
INTRODUCCIÓN
Actualmente, la situación del país es muy lamentable en todos los aspectos, pero con lo que
respecta al robo de autos, que ha incrementado, se han dispuesto diversas propuestas de solución
inmediata.
En este proyecto se desarrollará una técnica para el reconocimiento de placas, el cual se usa
principalmente para detectar a aquellos conductores que viajan a alta velocidad por la ciudad y
que en la mayoría de los casos no son multados. Con esta implementación se busca identificar a
esos conductores y aplicarles la sanción requerida, así mismo, tendrá la utilidad de detectar ciertos
autos que han sido robados y no localizados.
Hemos desarrollado un avance de los objetivos completos del proyecto. Trabajamos identificando,
únicamente, los caracteres numéricos. Sin embargo para detectar el resto de los caracteres se
seguiría un proceso similar.
Para el desarrollo del proyecto, que es el reconocimiento de los caracteres numéricos, utilizamos
la red neuronal de Hopfield discreto.
La red neuronal de Hopfield es conocida como un modelo de memoria auto asociativa de
patrones, ya que es capaz de aprender a reconstruir los patrones de entrada que memorizan
durante su entrenamiento a partir de información incompleta sobre los patrones.
La arquitectura de la red neuronal de Hopfield consiste en una única capa formada por n
elementos de procesamiento interconectados que cambian sus valores de activación
independientemente, cada una conectada a todas las demás, por lo tanto todos los elementos son
a su vez, entradas y salidas. Las neuronas de la red de Hpfield poseen dos estados, generalmente
{-1, 1} o {0, 1} (según convenga), que vienen determinados por el nivel de activación que recibe la
neurona. Además los pesos asociados a pares de neuronas son simétricos, es decir, existe la
igualdad W ij=W ji.
METODOLOGÍA
PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB
El procesamiento digital d imágenes se refiere a la manipulación de imágenes del mundo real de
forma digital haciendo uso de las computadoras. El principal objetivo es el mejorar el aspecto de
las imágenes y hacer más visibles en ellas ciertas características relevantes para la aplicación que
se desee desarrollar en su momento. La visión artificial se define como el conjunto de procesos
para la adquisición, caracterización e interpretación de imágenes. Éstos procesos pueden ser
subdivididos en cinco áreas:
1. Captura. Es el proceso a través del cual se obtiene una imagen digital utilizando un
dispositivo de captura, ya sea una cámara digital, video cámara, escáner, etc.
2. Pre procesamiento. Incluye técnicas que permiten mejorar la calidad de la imagen
tales como la reducción del ruido, realce del contraste, realce de ciertos detalles, o
características de la imagen.
3. Segmentación. Es el proceso mediante el cual se divide la imagen en regiones
importantes para los intereses de la aplicación.
4. Descripción. Es el proceso que obtiene características de los objetos dentro de una
imagen, las cuales permitirán diferenciar, un tipo de objeto del otro, como la forma, el
tamaño, el área, etc.
5. Reconocimiento e interpretación. Es la etapa en la que se identifica y se asocia un
significado a os diferentes objetos previamente segmentados en la imagen.
El toolbox de procesamiento de imágenes que proporciona MATLAB son un conjunto de funciones
que amplían las capacidades del software para el desarrollo de aplicaciones y de nuevos
algoritmos en el campo del procesamiento y análisis de imágenes. Entre las operaciones más
importantes que MATLAB soporta están:
Transformaciones espaciales de imágenes
Diseño de filtros y recuperación de imágenes
Mejora de imágenes
Operaciones morfológicas
Definición de mapas de colores y modificación gráfica
El toolbox de procesamiento de imágenes de MATLAB maneja cuatro tipos de imágenes básicos:
1. Imágenes indexadas
2. Imágenes con intensidad (niveles de grises)
3. Imágenes binarias
4. Imágenes RGB
Además soporta los siguientes formatos de imagen: JPEG, TIFF, GIF, BMP, PNG, HDF, PCX, XWD,
ICO y CUR.
MATLAB almacena la mayoría de las imágenes como arreglos bidimensionales (matrices) en los
cuales cada elemento de la matriz corresponde a la intensidad de un pixel en l a imagen.
A continuación se hará una descripción de las operaciones utilizadas para el procesamiento de las
imágenes en MATLAB.
OPERACIONES MORFOLÓGICAS
La morfología matemática es una técnica de procesado no lineal de imágenes, interesada en la
geometría de los objetos. Las operaciones morfológicas son operaciones sobre imágenes basadas
en formas o estructuras. Estas operaciones toman como entrada una imagen regresando como
resultado una imagen del mismo tipo pero modificada, el valor de cada pixel de la imagen
resultado es basado en el valor del correspondiente pixel de la imagen original y sus vecinos. Entre
sus principales aplicaciones están la eliminación de ruido y segmentación de objetos.
Existen tres tipos de morfología: morfología binaria, morfología de niveles de gris y morfología de
imágenes policromáticas.
ELEMENTOS DE PROCESAMIENTO MORFOLÓGICO
Los fundamentos del análisis y procesado morfológico se basan en el álgebra de conjuntos. Existen
tres elementos en el proceso:
1. Conjuntos (imágenes). En una imagen binaria los conjuntos están formados por
puntos en un espacio 2D, donde cada elemento es un punto de coordenadas (x,y) con
un valor de cero (que es el fondo) o uno (primer plano).
En una imagen de niveles de gris los elementos que forman los conjuntos se
encuentran en un espacio 3D, donde los dos primeros componentes de cada
elementos de refieren a las coordenadas de cada pixel y el tercer componente está
relacionado con la intensidad del mismo.
2. Elemento estructural. El elemento estructural es un conjunto de puntos que forman
una pequeña imagen que determinará la estructura de la imagen sobre la que se
aplicará la operación morfológica. Éste será el responsable de la forma y el tamaño de
los objetos que comprenden la imagen. El elemento estructural puede tener cualquier
tamaño y forma (horizontal, vertical, cuadrado, circular, etc.). En MATLAB se lo
implementa a través de la función strel el cual crea un elemento de estructura
morfológica.
3. Operaciones morfológicas
a. Dilatación. Expande los pixeles de los objetos presentes en la imagen sobre la
que se aplica. En MATLAB se lo implementa mediante la función imdilate.
b. Erosión. Es la operación inversa a la dilatación, produce un efecto de
encogimiento, reducción o contracción de los objetos de la imagen. Su
implementación en MATLAB se realiza mediante la función imerode.
c. Apertura (opening). Realiza una erosión seguida de una dilatación, utilizando
el mismo elemento estructural en ambas operaciones. Este método se aplica
cuando se desea eliminar los pequeños objetos y mantener el tamaño de los
grandes (eliminar ruido). En MATLAB se implementa mediante la función
imopen.
d. Cierre (closing). Dilatación seguida de una erosión. Este proceso se caracteriza
por rellenar huecos y conectar objetos que están próximos entre sí. Su
implementación en MATLAB se realiza mediante la función imclose.
FILTROS MORFOLÓGICOS
Los filtros morfológicos se realizan sobre una imagen en escala de grises o binaria usando un
elemento estructural y resaltan objetos de color contrario al fondo. Existen dos tipos de filtros:
1. Positivo (White top-hat). Esta operación es útil para resaltar detalles en la presencia
de sombras.
2. Negativo (Black top-hat o bottom-hat). Su aplicación es fundamentalmente para
resaltar detalles oscuros sobre un fondo local blanco.
FILTRADO ESPACIAL
El filtrado espacial es una técnica para modificar o mejorar a una imagen, resaltado o atenuando
características de la misma. El filtrado es una operación de vecindario, en la cual el valor de un
pixel dado en le imagen procesada se calcula mediante algún algoritmo que toma en cuenta los
valores de los pixeles de la vecindad de la imagen original. De esta forma es necesario configurar
una matriz que considere cuales vecinos y en qué forma influirán en la determinación del nuevo
pixel. Existen dos clases: filtros de paso bajo y filtros de paso alto.
1. Filtros espaciales de paso bajo (Suavizantes). Se emplean para hacer que la imagen
aparezca algo borrosa y también para reducir el ruido. Hay dos subtipos:
a. Filtro de promedio. Se basa en el promediado de los pixeles adyacentes al
pixel que se evalúa tomando en cuenta máscaras de vecindad cuadráticas. Su
implementación en MATLAB se realiza mediante funciones fspecial e imfilter.
b. Filtro de la mediana. Éste filtro se basa en sustituir en valor de un pixel por el
de la mediana del conjunto formado por el mismo y sus ocho vecinos, se suele
utilizar en el procesamiento de imágenes para reducir el ruido. En MATLAB
este filtro se encuentra implementado en la función medfilt2.
2. Filtros espaciales de paso alto. Los filtros espaciales de paso alto se corresponden con
las altas frecuencias, suelen corresponder a los bordes de los objetos presentes en las
imágenes. Se pueden utiliza para el realce de bordes o para la detección de contornos.
a. Realce de bordes. Consiste en resaltar aquellos pixeles que tienen un valor de
gris diferente al de sus vecinos. Si la imagen contiene ruido, su efecto se
multiplicará, por lo que primero se debe eliminar el ruido. Su implementación
en MATLAB se consigue con el uso de la función filter2.
b. Detección de contornos. Es un paso intermedio en el reconocimiento de
patrones en imágenes digitales. En una imagen, los contornos corresponden a
los límites de los objetos presentes en la imagen. Para hallar los contornos se
buscan los lugares en la imagen en los que la intensidad del pixel cambia
rápidamente. Su implementación en MATLAB se realiza usando la función
edge y se aplica a imágenes de niveles de gris. Se pueden usar varios métodos
están: Sobel, Prewitt, Robert o Canny.
SEGMENTACIÓN
La segmentación es uno de los procesos más importantes y complejos en el reconocimiento de
placas.; si la segmentación falla, un carácter puede ser inapropiadamente dividido en dos piezas, o
dos caracteres pueden ser unidos por error. La segmentación consiste en dividir la imagen digital
en regiones homogéneas o similares con respecto a una o más características (brillo, color,
tamaño, longitud, área, forma, etc.) con el fin de facilitar su posterior análisis y reconocimiento.
No existe un método universal de segmentación. Su proceso está ligado al tipo de área que se
desea resolver y termina cuando satisface los objetivos del observador, es decir, cuando se hayan
detectado todos los objetos de interés para una aplicación específica. Existen dos tipos de
segmentación:
1. Segmentación basada en el cálculo del umbral. Es un proceso que permite
convertir una imagen de niveles de gris o color en una imagen binaria, de tal forma
que los objetos de interés se etiqueten con un valor distinto de los pixeles del
fondo. Es una técnica rápida y su costo computacional es bajo. El método de
mayor confiabilidad es el método de Otsu el cual permite encontrar el umbral
óptimo para la segmentación de la imagen a segmentar. MATLAB posee la función
graythresh, que calcula el umbral de la imagen global utilizando el método de
Otsu.
2. Segmentación basada en regiones. Es utilizada para separar los objetos de interés.
En este caso, la imagen es particionada en diferentes regiones, quedándose cada
una relacionada en ciertas características y conjuntos de pixeles conectados. Así, a
partir de la segmentación de la imagen en regiones, pueden ser realizadas las
medidas sobre cada región y las relaciones entre las regiones adyacentes pueden
ser establecidas. La segmentación por regiones está implementada en MATLAB a
través de los siguientes comandos:
Bwlabel. Etiqueta los componentes conectados en una imagen binaria.
Regionprops. Mide las propiedades de las regiones etiquetadas
previamente en un imagen. Permite tener valores de propiedades como:
área, caja que cubre la región, centroide, excentricidad, etc.
REDES NEURONALES ARTIFICIALES (RNA)
Una red neuronal artificial es u procesador masivo paralelo formado por unidades simples de
procesamiento que tienen una propensión natural para almacenar conocimiento experimental,
haciéndolo viable para sus uso. La red neuronal se asemeja al cerebro en dos aspectos:
1. El conocimiento adquirido por la red desde su entorno a través de un proceso de
aprendizaje.
2. Las fuerzas de las conexiones entre neuronas, conocidas como pesos sinápticos, son
usadas para almacenar el conocimiento.
Las redes neuronales artificiales (RNA) son un conjunto de unidades de procesamiento
elementales como una arquitectura definida que tratan de asemejar el funcionamiento de las
redes neuronales biológicas, como se puede apreciar en la siguiente imagen:
Su unidad de procesamiento es la neurona artificial, la cual está constituida por varios elementos
como son:
Conjunto de elementos de entrada. Señales de entrada pueden ser discretas o
continuas.
Pesos sinápticos. Representan la intensidad de interacción en una sinapsis. Estos pesos
pueden ser variables o fijos.
Regla de propagación. Permite obtener a partir de las entradas y los pesos sinápticos
el valor del potencial post-sináptico.
Función de activación. Llamada también función de transferencia, proporciona el
estado actual de activación en función de su estado anterior y el valor post-sináptico
para posteriormente entregar la salida global de la neurona. Las funciones de
activación pueden ser de distintas formas.
RED NEURONAL UTILIZADA
RED NEURONAL DE HOPFIELD
El modelo Hopfield consiste en una red monocapa estableciendo conexiones laterales (cada
neurona se encuentra conectada a las demás) pero no existen conexiones auto recurrentes, entre
las N neuronas y los valores de salida son binarios 0/1 ó -1/+1, existen 2 tipos de este modelo:
1. Hopfield discreto: Contaba con entradas y salidas binarias y las funciones de activación de
las neuronas eran de tipo escalón.
2. Hopfield continuo: En este modelo las entradas y salidas son analógicas, con funciones de
activación tipo sigmoidal.
El modelo que utilizamos en el proyecto es discreto, pues nuestras salidas y entradas son binarias,
por tanto la función de activación será de tipo escalón como se muestra en la siguiente imagen:
Función de activación tipo escalón
En el modelo discreto de Hopfield se adopta un valor proporcional a la suma de los pesos de las
conexiones de cada neurona con el resto.
θi=k∑j=1
n
wij
Como se trabaja con los valores de salida binarios -1, +1. Suele considerarse el valor nulo para θi.
Hopfield es una red auto asociativa, así los patrones diferentes pueden ser almacenadas en la red,
durante la etapa del aprendizaje. Así cuando a la red se le presentan a la entrada alguna de las
informaciones ya almacenadas la red evoluciona hasta estabilizarse, ofreciendo en la salida la
información almacenada. Si por otro lado a la entrada se le presenta no coincide con ninguna de
las almacenadas por estar distorsionada o incompleta la red evoluciona generando como salida la
más parecida.
La información que recibe este modelo fue previamente codificada y representada en forma de
vector (como una configuración binaria para nuestra red discreta), cada neurona recibe una parte
de la información un elemento del vector que representa dicha información, la suma de todos
estos valores constituirá el valor de entrada neta de la neurona.
Este proceso continua hasta que las salidas de las neuronas se estabilizan, lo cual ocurrirá cuando
el valor deje de cambiar.
Este funcionamiento puede expresarse matemáticamente de la siguiente forma:
1. En el instante inicial (t=0) se aplica la información de entrada
S(t=0)=e 1<=i<=N
2.- La red realiza iteraciones hasta alcanzar la convergencia (hasta que s(t+1) sea igual a s(t)).
si (t+1 )=f ¿
Esta es la función de activación de las neuronas en la red, que en el caso de nuestro modelo
discreto, si se trabaja con valores binarios -1 y +1, la salida se obtendría según la función
escalón.
El funcionamiento corresponde a una red Hopfield discreta clásica ya que se trabaja con
informaciones binarias, se pueden distinguir diferentes versiones del modelo en función de la
forma temporal en que se lleva a cabo la degeneración o actualización de las salidas de las
neuronas de la red.
APRENDIZAJE
La red de Hopfield tiene un mecanismo de aprendizaje OFF LINE. Por tanto, existe una etapa
de aprendizaje y otra de funcionamiento de la red.
Esta red utiliza un aprendizaje no supervisado de tipo hebbiano, de tal forma que el peso de
una conexión entre una neurona i y otra j se obtiene mediante el producto de los
componentes i-esimo y j-esimo del vector que representa la información o patrón que debe
almacenar.
El algoritmo de aprendizaje también puede ser expresado utilizando uan notación matricial.
Considerando tal caso se podría tener en cuenta una matriz W de dimensiones NxN que
represente los pesos de la red.
Dicha matriz es simétrica y de y valores nulos en la diagonal principal debido a la no existencia
de valores auto recurrentes.
Un ejemplo de cómo se obtienen los pesos podría consistir en el entrenamiento de una red
para que aprenda patrones correspondientes a sendas figuras mediante un cierto número de
pixeles.
Los pixeles negros podrían representarse mediante el valor binario +1 y los blancos con el
valor de -1. En este caso las informaciones serian dos vectores M=2 de cuatro elementos N=4
que contienen los valores de los pixeles. La red por tanto tendría 4 neuronas para que cada
neurona tuviera un pixel.
Los valores de los vectores que forman la figura A y B respectivamente son:
El aprendizaje de estas dos informaciones consistirá en la obtención de los pesos de la red
Una vez finalizada la fase del aprendizaje la red podría ser utilizada como memoria asociativa
de acceso por contenido de tal forma que al pasarle una información más parecida de la
almacenada durante el aprendizaje.
DESARROLLO DE LA RED NEURONAL DE HOPFIELD
Comando para ejecutar el programa:
>>placas
Ejecuta la red neuronal “Hopfield”, el proceso de aprendizaje, carga el “archivo elementos. txt” el
cual contiene los vectores matriciales en forma de columna que representan los número del 0
hasta el 9.
%Red Neuronal HopField load elementos.txt % archivo donde almacenamos numeros del 0-9 en forma de vector columnaE=elementos;[fil,col]=size(E);W=zeros(fil,fil);for i=1:col v=E(:,i); V=v*v'; W=W+V;endh=0;load pruebaU.txt % archivo que contiene el numero a comparar, en forma de vector columnaP=pruebaU;P=P';fin=0;while(fin==0) R=P*W; [R]=binarizacion(R);%Cambia los elementos 0 a -1 y 1 a 1 [fin]=estabiliza(P,R);% P=R;endif(fin==1) N=anticolumna(R); N=antivectorero(N); imshow(N);end
Nota al ingresar el numero para realizar el aprendizaje (archivo prueban.txt) el resultado que nos
arroja es una imagen en la cual reconstruye el número que más se parece, pero más sin en cambio
hemos tenido un problema pues independientemente del número (0-9)que ingresemos siempre
nos arroja el mismo resultado una imagen de la cual no se distingue bien que numero representa.
Uno Dos Nueve Cinco
Y dado que no logramos que el programa regresara el número que ingresábamos, no pudimos
continuar con el proceso de saber que combinación de números correspondía a cada placa de
automóvil.
Matriz que contiene los numero del 0-9 en forma de vector columna.
Pasos para generar el vector de “entrada” (archivo elementos.txt) de cada uno de los números (del
0 al 9)
Realzando de Imágenes, los siguientes pasos muestran las técnicas de procesado, para generar los
vectores.
1. En primer lugar tenemos que leer la imagen con la función imread siempre de tipo TIFF y
la guardamos en una variable, como lo muestra el siguiente ejemplo.
Variable: I
Función: imread( ‘ Direccion y nombre la imagen ’ )
I=imread( ' C:/Users/PC/Documents/MATLAB/Segmentada/imagen.tif ' );
2. Se le aplica un cambio a escala de grises.
I = I( : , : , 2);
3. Se le hace un ajuste para que exista un mayor contraste.
I = imadjust(I);
4. Se binariza la imagen para que se pueda manipular mucho mejor
level = graythresh (I) devuelve la eficacia métrica, level, como el argumento de la segunda
salida. La eficacia métrica es un valor en el intervalo [0 1] que indica la eficacia del umbral
de la imagen de entrada. El límite inferior es alcanzable sólo por las imágenes que tienen
un nivel de gris único, y el límite superior es alcanzable sólo por dos valores de las
imágenes.
II = im2bw (I, level) convierte la imagen en escala de grises a una imagen binaria.
bwareaopen(II, 50) eliminará cualquier área superior a 8000 píxeles.
level = graythresh(I);
II = im2bw(I , level );
II = bwareaopen (II, 50);
5. Se hace una dilatación.
se=strel(forma, parámetros), crea un elemento estructurante de una forma determinada o
un arreglo de elementos estructurales.
II = imdilate(II,SE) y = Imerode(II,se) la imagen II puede ser binaria o en gris
se = strel( 'diamond' , 1)
II = Imdilate(II,se)
II = Imerode(II,se)
6. Creamos un arreglo solo de unos con ones y la guardamos con imwrite().
size(ss)
m=ones(127,70);
imwrite(II , 'NombreDeLaImagen.tiff' )
Los siguientes dos pasos nos muestran como generar el vector con parámetros 1 y -1.
Cargamos la imagen ya procesada, con imread y la guardamos en una nueva variable
imaNumero= imread( ‘ Path en donde esta guarda la imagen ’ )
imaNum=read(C:/Users/PC/Documents/MATLAB/Segmentada/imagen.tif’)
Con la función ya programada llamada vectorero podremos transformar la matriz de unos y ceros
en unos y menos unos.
imaNum2 = vectorero( imaNum )
Binarizacion
function[R]=binarizacion(R)[fil,col]=size(R);for i=1:fil for j=1:col if(R(i,j)>0) R(i,j)=1; else if(R(i,j)<0) R(i,j)=-1; end end endendend
Estabilizacion
function[fin]=estabiliza(P,R)if(P==R) fin=0;else fin=1;endend