lunes, 16 de febrero de 2009

Resultados:

Con el uso de la instruccion de matlab mmreader es posible leer archivos de video desde varios formatos.


Los videos utilizados para evaluar el programa final pueden ser econtrados en:

http://www.4shared.com/file/88016578/eeaa7dd5/vi_online.html


  • Los comandos 2 y 4 son no son diferenciados completamente por la red nuronal y en ocasiones son tomados por el sistema como uno solo.

jueves, 12 de febrero de 2009

Rendimiento

La medida de tiempo que la maquina invierte en realizar el procesamiento es:

Elapsed time is 0.236029 seconds.

El tiempo en que procesa un frame es de 0.236029 segundos, por lo tanto en un segundo procesaría 4.2367 frames.

Aunque el rendimiento en MATLAB se ve afectado por problemas de acumulación en memoria de todas las variables que esta procesando, por este motivo los primeros frames los procesos sin problema alguno, pero los últimos se nota un cambio en la velocidad de procesamiento.

A continuación se muestran algunos frames de los resultados obtenidos:


miércoles, 11 de febrero de 2009

Procesamiento de video

Ahora se presenta el procesamiento de un video leído desde archivo utilizando comandos de MATLAB se recurrienron a funciones para trabajar con archivos de video del toolbox que se expliacaran a continuación:

El archivo lo pudes descargar Aqui.

avi = aviread('Video_Complet_iLook\vid4.avi');

video = {avi.cdata};

aviread se encarga de cargar el la variable avi desde un archivo de video, dado que el video conserva su audio se separa solamente los datos con avi.data.

for a = 1:length(video)

imagesc(video{a});

axis image off

drawnow;

end;

esta es la forma de desplegar el video en una ventana le grafiza cada uno de los frames, realizando un recorrido del tamaño del video.

nFrames = size(pixels,4);

for f = 1:nFrames

pixel(:,:,f) = (rgb2gray(pixels(:,:,:,f)));

end

Conversion del color del video, es mapeado por intensidad .

for l = 1:2:nFrames

im = pixel(:,:,l);

%I2 = imfilter(im,h);

im2= imadjust(im);

im = im2bw(im2,0.29);

im2 = imclose(im,se);

im = imopen(im2,se);

[Label,n] = bwlabel(im,4);

graindata = regionprops(Label,'BoundingBox', 'Area');

Areas = [graindata.Area];

minimox = max(Areas);

[r,c] = find(Areas == minimox);

Bounding = graindata(c).BoundingBox;

% Calculo de los momento de Hu

HM = HuMom(Label == c);

%Clasificador

A = dataset([HM(1,x) HM(1,y)],10);

LABELS = labeld(A,W2);

imshow(pixel(:,:,l))

hold on;

rectangle('position',Bounding,'edgecolor','r');

message = sprintf('CMD = %i', LABELS);

text(15,230,message,'Color','y','FontWeight','bold');

drawnow;

clear im im2 Label graindata n Areas minimox r c Bounding HM A LABELS

end

Procesamiento de cada uno de los frames, las funciones utilizadas ya se describieron el publicaciones anteriores.

martes, 10 de febrero de 2009

Adecuacion de la escena

Para lograr mejores resultados con algoritmos sencillos, se tuvo que adecuar la escena de acuerdo a condiciones de iluminación y limitaciones del fondo, así que se limito a un cuadro de fondo negro donde solo se observe la mano con su gesto en particular, y por obvias razones la iluminación debe ser fija y constante.


además ya que se encontraron grandes cambios en los momentos de Hu cuando la parte del brazo se encontraba en la imagen, mejor dicho cuando el gesto se encontraba el la parte superior del cuadro imagen, se introducía a el segmento a analizar una mayor área, cambiando drásticamente los momentos de Hu, este problema se soluciono simplemente colocando un elemento del mismo color del fondo sobre la mano, este objeto es una manilla del mismo color del fondo, el análisis de los momentos de Hu se realizan con la mano solamente y no con la parte que pertenece al brazo.


lunes, 9 de febrero de 2009

Utilizacion de PRTools


PRTools es un Toolbox para MATLAB que brinda las herramientas necesarias para realizar una clasificación basado en el reconocimiento de patrones, la pagina oficial del toolbox es http://prtools.org/ En esta pagina se puede descargar el toobox, así como una guía para la utilización de cada una de sus funciones y la creación de los datos que caracterizarán nuestras imágenes segmentadas.


Después de haber leído y analizado, se explicaran las funciones que necesitaremos para realizar nuestra clasificación que como parámetro recibirá dos de los siete momentos de HU, primero se crearan los datos para entrenar nuestro clasificador.

features = [Z(:,x) Z(:,y)];

classes = Z(:,8);

A = dataset(features,classes);

Donde x, y representan los momentos de Hu que se utilizaran en la clasificación Z es la matriz de los momentos de Hu que se debe calcular con anterioridad, y Z(:,8) es la clase a la cual pertenece cada momento de Hu osea el target para el entrenamiento, la función dataset que recibe como parámetros features y classes es la que se encarga de crear los datos para entrenamiento, cabe aclarar que esta función se encuentra dentro de PRTool.

scatterd(A);

W2 = bpxnc(A,5);

plotc(W2);


scatterd se encarga de graficar las dos características (features) que se crearon en el paso anterior, la función bpxnc crea y entrena un clasificador con una red neuronal con 5 capas, y por ultimo plotc grafica los que el clasificador ha hecho

LABELS = labeld(B,W2);

Labeld es una forma de utilizar el clasificador creado y entrenado en el paso anterior el la variable LABELS devuelve la clase a la cual pertenecen los datos B.