ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Reconocimiento De Firma Manuscritas - Matlab


Enviado por   •  12 de Mayo de 2014  •  1.689 Palabras (7 Páginas)  •  758 Visitas

Página 1 de 7

Objetivo

El objetivo principal es el diseño y elaboración de un programa en Matlab el cual permita el reconocimiento de firmas y su clasificación, a partir de una imagen, tomada mediante la cámara de una lap top, a una hoja blanca en la cual se encuentran cuatro firmas distintas realizadas con un plumón negro.

Introducción

Para entender lo que el programa realizará debemos de tener en cuenta algunos conceptos, como lo son los siguientes:

Umbralización

Es aquella que permite etiquetar la imagen resultante de los procesos de filtrado del ruido y realce de los bordes a fin de obtener los píxels en los que se produce un borde. Los principales problemas que se presentan en la umbralización son los siguientes:

Pérdidas de conectividad entre los píxels que forman parte del borde, bien por la existencia de bordes poco definidos, por la utilización de fuertes algoritmos de filtrado de ruido, o por condiciones de umbralización muy exigentes.

Generación de bordes de anchura múltiple por la existencia de bordes muy difuminados después del filtrado del ruido, o por condiciones de umbralización poco exigentes.

Existencia de falsos bordes, preferentemente por la existencia de ruido.

Histograma

Es una representación gráfica de una variable en forma de barras, donde la superficie de cada barra es proporcional a la frecuencia de los valores representados.

En el eje vertical se representan las frecuencias, y en el eje horizontal los valores de las variables, normalmente señalando las marcas de clase, es decir, la mitad del intervalo en el que están agrupados los datos.

Segmentación

Es el proceso de dividir una imagen digital en varias partes u objetos y su objetivo principal es simplificar y/o cambiar la representación de una imagen en otra más significativa y más fácil de analizar, se usa tanto para localizar objetos como para encontrar los límites de estos dentro de una imagen.

Programa

A continuación se presenta el programa, una pequeña explicación de algunas de las partes del mismo y sus ilustraciones correspondientes.

Fase de Entrenamiento

Primero lee la imagen desde un archivo, si la imagen es RGB, la convierte a escala de grises, en caso contrario sólo toma la imagen tal y como se lee en escala de grises.

imagen=imread('test2.jpg');

if size(imagen,3)==3

gris=rgb2gray(imagen);

else

gris=imagen;

end

Segmentación

Ya que se tiene la imagen en escala de grises, se convierte a imagen binaria, ya que asi es mas facil manipularla, despues de eso se hace uso de la funcion strel para analizar dicha imagen en busca de lineas que contengan el valor de 1.

Im_bin=im2bw(gris,0.3);

Im_bin2=not(Im_bin);

SE=strel('line',10,0);

Im_erode=imerode(Im_bin2,SE);

Im_dilate=imdilate(Im_erode,SE);

Im_label=bwlabel(Im_dilate,8);

n=max(max(Im_label));

Lo siguiente sólo indica al programa, de acuerdo a la imagen que lee, que elimine los picos y los huecos respectivamente.

bina=bwmorph(Im_label,'open');

bina=bwmorph(Im_label,'close');

Aqui la variable "L" toma el valor de la imagen binaria ya segmentada con un total de 7 objetos contenidos y despues es mostrada, luego la variable stats toma el valor de las caracteristicas de cada objeto por separado, tales como su area, ejeMayor, ejeMenor, etc., estos valores los obtiene la funcion regionprops().

L=bwlabel(bina);

imshow(L)

stats = regionprops(L,'all');

TY = zeros(n,1);

Extraccion de Caracteristicas

El for indica que en el primer objeto que se detecte, en este caso la primer firma, se obtengan los valores de area, ejeMayor, ejeMenor, etc., indicándole así a que firma pertenece, si a la F1, F2, F3, F4, en este caso, pertenece a la primer firma.

for i = 1:n

disp(sprintf('%3d) EjeMayor=%6.2f EjeMenor = %6.2fd Area =%5d',i,stats(i).MajorAxisLength,stats(i).MinorAxisLength,stats(i).Area));

figure(3)

imshow(L==i)

TY(i) = input('Ingrese F1=1 F2=2 F3=3 F4=4)');

end

En esta parte en donde la variable area, axis1, axis0 toman el valor de la caracateristica correspondiente y le indica que si el valor que ingresaste es 1, entonces las caracteristicas dadas del objetos se van a referenciar a la primer firma, en pocas palabras, se le indica al programa que características pertenecen a cada firma.

area = [stats.Area]';

axis1 = [stats.MajorAxisLength]';

axis0 = [stats.MinorAxisLength]';

axisR = axis0./axis1;

iF1 = find(TY==1);

iF2 = find(TY==2);

iF3 = find(TY==3);

iF4 = find(TY==4);

Lo siguiente nos va a ayudar a graficar la razon de ejes y el area de cada firma y le asignará un identificador a cada una de ellas.

figure(4)

clf

plot(axisR(iF1),area(iF1),'rx')

hold on

plot(axisR(iF2),area(iF2),'*')

hold on

plot(axisR(iF3),area(iF3),'+')

hold on

plot(axisR(iF4),area(iF4),'O')

xlabel('Razon de Ejes');

ylabel('area')

legend('F1','F2','F3','F4')

axis([0 1 0 150000]);

Con la presentación de las características extraidas concluye la Fase de entrenamiento.

Fase de Prueba

Con el siguiente código el programa obtendrá la imagen desde la cámara web.

disp('Parte 2: Prueba (presione enter)');

pause

close all

cam=imaqhwinfo('winvideo',1);

video=videoinput('winvideo',1, 'YUY2_640x480');

set(video, 'ReturnedColorSpace', 'rgb');

preview(video)

disp('Coloque la imagen frente a la camara depues presione enter)');

pause

imrgb=getsnapshot(video);

imwrite(imrgb, 'test1.jpg');

I = imread('test1.jpg');

[N,M] = size(I);

figure(1)

imshow(I,[]);

Una vez obtenida la imagen del sensor (cámara), se tendrá que segmentar, el proceso de segmentación será el mismo que se utilizó en la Fase de Entrenamiento.

Se obtienen los valores

...

Descargar como (para miembros actualizados) txt (11 Kb)
Leer 6 páginas más »
Disponible sólo en Clubensayos.com