el siguiente codigo que se muestra el toda la programacion en Matlab para la vision por medio de una webcam que en este caso es la Eye 312 de Genius.
%Dar de alta la camara resolucion y caracteristicas
imaqhwinfo; %informacion de las camaras detectadas(*******************NO ES NECESARIO PARA EL PROGRAMA)
vid = videoinput('winvideo',1, 'RGB24_320x240');
%Configuracion del puerto serial para la comunicacion con el micro
SerPIC = serial('COM3');
set(SerPIC,'BaudRate', 2400, 'DataBits', 8, 'Parity', 'none','StopBits', 1, 'FlowControl', 'none');
fopen(SerPIC);
%Declaracion de variables y vectores
objetos=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
laser=66;
grandote=0;
%Reconocimiento de ambiente
a=getsnapshot(vid);
aa=rgb2gray(a);
%Ciclo principal en el que se correra el programa
for k = 0:0.25:7
%Obtiene imagen con cambios
b=getsnapshot(vid);
bb=rgb2gray(b);
%Diferencia entre imagen actual y el entorno aprendido
c=imsubtract(bb,aa);
%binarizacion de la imagen resultado(se calibra a las condiciones de luz)
d=c>=20;
%filtro antiruido
magic=strel('square', 2);
link=imerode(d, magic);
%Despliega foto(*************NO ES NECESARIO PARA EL PROGRAMA)
imshow(link);
hold on
%Obtener informacion de la foto
cen = regionprops(link);
num = numel(cen);
%Condicion donde se debe detectar minimo 1 objeto
if (num ~= 0)
%Identificador de objetos(se tiene que calibrar a las condiciones de luz)
for l = 1:num
if (cen(l).Area <= 47)&&(cen(l).Area >= 5)
laser = l;
end
objetos(l)=cen(l).Area;
end
%algoritmo burbuja para ordenar objetos de mas grande a mas chico
for i=1:9
for j=i+1:10
if (objetos(i) < objetos(j))
temp = objetos(i);
objetos(i) = objetos(j);
objetos(j) = temp;
end
end
end
%fin de algoritmo burbuja
%detectar el num del objeto mas grande
for z=1:num
if (cen(z).Area == objetos(1))
grandote = z;
end
end
%Condiciones para mover la pistola
if (laser == 66)
master = 100;
disp(['DISPARA']); %Despliega en la pantalla(*************NO ES NECESARIO PARA EL PROGRAMA)
else
if (objetos(1) ~= cen(laser).Area)
salidax = cen(grandote).Centroid(1) - cen(laser).Centroid(1);
saliday = cen(grandote).Centroid(2) - cen(laser).Centroid(2);
if (salidax > 0)&&(saliday > 0)
master=41; %muevete a la derecha y arriba
disp(['derecha abajo ']); %Despliega en la pantalla(*************NO ES NECESARIO PARA EL PROGRAMA)
else if (salidax < 0)&&(saliday > 0)
master = 69; %muevete izquerda y arriba
disp(['izquierda abajo ']); %Despliega en la pantalla(*************NO ES NECESARIO PARA EL PROGRAMA)
else if (salidax > 0)&&(saliday < 0)
master = 22; %muevete derecha y abajo
disp(['dereha arriba ']); %Despliega en la pantalla(*************NO ES NECESARIO PARA EL PROGRAMA)
else if (salidax < 0)&&(saliday < 0)
master = 255; %muevete izquierda y abajo
disp(['izquierda arriba ']); %Despliega en la pantalla(*************NO ES NECESARIO PARA EL PROGRAMA)
end
end
end
end
end
end
end
puppet = typecast(master, unit8);
fwrite(SerPIC, '%s', puppet); %Mandar la variable master para mover o disparar
laser=66;
end
%fin del ciclo principal del programa
fclose(SerPIC)
delete(SerPIC)
clear SerPIC
%fin de programa
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario