UNIVERSIDAD DE LOS LLANOS INGENIERIA ELECTRONICA OPTIMIZACION DE PROCESOS ESTOCASTICOS PROYECTO FINAL DE SEMESTRE
FRANKLIN JANCOVICK VARON HUERTAS JAIME NICOLAS RODRIGUEZ MIGUEL ANGEL ROJAS
VILLAVICENCIO-META DICIEMBRE-2014
UNIVERSIDAD DE LOS LLANOS INGENIERÍA ELECTRÓNICA FACULTAD DE CIENCIAS BÁSICAS E INGENIERÍA OPTIMIZACIÓN DE PROCESOS ESTOCÁSTICOS SEGUIMIENTO DE OBJETOS
RESUMEN: la temática que abarca el curso de optimización de procesos estocásticos, compete todo proceso aleatorio, en el cual la variación aleatoria se da tanto en la variable de los posibles eventos como en el tiempo que rige los mismos, es decir puede darse el caso de una variación de eventos constante y este puede o no poseer una instancia de variación de tiempos distintas a un mismo evento anterior. Con lo anterior se pretende que el estudiante establezca métodos de trabajo , más exactamente de procesamiento de imágenes para lograr el control de un sistema electrónico, que reconozca el entorno con un sensor de imagen (cámara), obtenga la mayor cantidad de información del mismo, la procese y diseñe un algoritmo que emparente un movimiento capaz de seguir el movimiento de algún punto en específico.
1 INTRODUCCION En la temática del curso se hace hincapié en la visión de la probabilidad y sus métodos de cálculo como herramienta para poseer una garantía en los posibles resultados del funcionamiento de cualquier sistema, sus estados de funcionamiento óptimo, las fallas más leves, entre otras cosas. Estas herramientas se pretender poner en practica con el diseño de un proyecto a pequeña escala de seguimiento, en el cual como se especificó anteriormente se diseñe todo un sistema que lea la información de su entorno y con un método fijado por el alumno se procese dicha información y se obtenga como conclusión la dirección en la que el objeto se desplaza para su seguimiento.
principales, se hace uso del software MATLAB_2010, debido a que este software presenta amplia gama de librerías encargadas del procesamiento de imágenes así como otros artilugios matemáticos que nos permiten determinar colores así como un 90% de la información real de la imagen. Además de las grandes capacidades de procesamiento brindadas por MATLAB, se incorporó un módulo de funcionamiento que compete a una tarjeta de programación ARDUINO UNO, esta presenta un amplia gama de funciones, fue considerada óptima para la implementación a razón de la simpleza de sus sentencias. Sépase que la tarjeta arruino uno se logra con el uso de archivos reservados (librerías ) vincular a MATLAB y este es considerado el bloque principal de funcionamiento. Arduino posee soporte de carga capaz de incluirse en la carpeta lib de MATLAB, lo que brinda a Matlab la capacidad de compilar, ejecutar y cargar pseudocódigo en todo tipo de tarjeta perteneciente a el dominio de ARDUINO. A su vez se cuenta con un archivo reservado que se debe cargar en la tarjeta Arduino que brinda la posibilidad de que la tarjeta se deje controlar por MATLAB. Sépase que estos archivos de soporte se encuentran en la página de Matworks, con la denominación de ARDUINO-IO.
2.3 DESCRIPCION DEL PROCESAMIENTO El seguimiento se realizara total a razón de un plano, es decir con seguimiento bidimensional.
2 PLANTEAMIENTO 2.1 OPTENCION DE LA INFORMACION: Para la lectura del entorno se hace uso de una cámara VGA –USB 2.0, con esta se pretende realizar la lectura de la imagen, con la que se visualizara el posible movimiento del objeto. 2.2 ELEMENTOS DE PROCESAMIENTO Para el procesamiento, que se realiza en tiempo real es necesario dos módulos
MATLAB:
Sépase que Matlab es un software que trabaja en su mayoría con el uso de matrices, presenta un lenguaje de programación de alto nivel que pertenece al dominio de Matworks. Con Matlab se realiza todo lo que se reconoce en el proyecto como proceso RGB, el proceso RGB, compete el reconocimiento de un punto (color) con el procesamiento de la imagen.
PAUTAS DE RECONOCIMIENTO: Para el reconocimiento se realiza, como se especificó anteriormente la transformación de la captura del video, la imagen se pasa con el uso de una librería reservada de MATLAB_2012 a escala de grises, como se observa a continuación: Imagen:
->en la sección inicial del pseudocódigo se encuentra la inicialización de la imagen en tiempo real, se inicia el video entonces para ello tenemos: %de winvideo, numero de dispositivo y formato de la camara, si no sabes usa la %funcion imaqtool para averiguarlo es YUY o RGB vid=videoinput( 'winvideo' ,1,'YUY2_352x288' ); %640x480 160x120
El código del cuadro anterior, representa el inicio de la imagen. Ahora realizamos la configuración de la lectura de la imagen: % Se configura las opciones de adquision de video set(vid, 'FramesPerTrigger' , Inf); set(vid, 'ReturnedColorspace' , 'rgb') vid.FrameGrabInterval = 5; %framegrabinterval significa que tomara cada 5 frame del stream de video adquirida %con start(vid) se activa la adquisicion, pero todavia se toma la primera foto start(vid)
Con la sentencia start se inicia la captura del video ya configurado. Ahora se diseña un ciclo encargado de estar sacando la lectura de la imagen para el procesamiento necesario, en este caso un while, luego de este se encuentra un serie de transformaciones que se le realizan a la imagen para detectar el color definido. Cuando MATLAB realizar la lectura o procesamiento de una imagen, dado el modo de trabajo de Matlab este obtiene una matriz de cada pixel, cada pixel esta representado por tres valores , o lo que denominamos RGB (red, Green, blue).
Imagen en escala de grises:
De la imagen en escala de grises se realiza el filtrado pretendiendo reducir el ruido de la imagen, con el uso de una librería incorporada en Matlab:
Ahora se realiza la binarizacion de la imagen filtrada: %%UNIVERSIDAD DE LOS LLANOS %%FRANKLIN JANCOVICK VARON HUERTAS %%INGENIERIA ELECTRONICA %%PROCESAMIENTO DE IMAGENES
ros=imread('rosa.jpg');%% lectura de una imagen
Este resultado también se obtiene con el uso de una sentencia reservada de Matlab, que veremos más adelante en el pseudocódigo. Ahora necesitamos evitar los errores, para lo cual descartamos puntos de color, rojo en este caso, muy pequeños, menores a 300 pixeles.
%imshow(ros); gr=rgb2gray(ros); %%escala de grises figure; %imshow(gr); fil= medfilt2(gr, [3 3]);%%filtrado de la imagen figure; %imshow(fil); bi=im2bw(fil); %%binarizac ion de la imagen %imshow(bi)
des = bwareaopen(bi,300); %%desc arte de los puntos menores a 300 pixeles
Luego de eliminar posibles puntos insignificantes que no pertenezcan a el objeto que deseamos seguir, hacemos uso de una instrucción reservada “regiónprops”, con esta pretendemos identificar (procesar ) solo los pixeles rojos, esta brinda la ubicación del punto especificado, sus características entre otras cosas. El pseudocódigo que compete el procesamiento anterior es el siguiente:
et = bwlabel(des, 8);%% etiquetado de los puntos detectados imshow(et) %%graficado del resultado res=regionprops(et, 'BoundingBox' , 'Centroid'); %%funcion qiue arroja la mayor canntidad de %%informacion de laa lectura
SEGUIMIENTO: Para el seguimiento (movimiento), junto con el Arduino se hace uso de dos servo motores, estos aportan su cualidad suspicaz de girar a escritura polar, estos motores brinda la posibilidad de realizar un giro entre 0°-180° con la escritura de un angulo entero que se encuentre entre dicho rango, estos motores presentan tres pines de conexión, dos de polarización y uno de conexión para escritura de dato u orde.
Ahora dada ya la obtención del movimiento del objeto, se realizan las líneas que permiten el desplazamiento de la cámara según sea el movimiento, es decir las líneas encargadas de hacer el giro en los servo motores.
Como se aprecia en el pseudocódigo, el modo como se realiza el seguimiento es estableciendo unos pixeles limites, entre los cuales deberá estar el objeto, y dado un desborde por cual sea el sentido, el programa escribirá en los servos un desplazamiento en el sentido del desbordamiento de pixeles del objeto, hasta tener nuevamente este entre la escala deseada.
La visualización del montaje se presenta a continuación:
%% PARA X-----------------------------------if (x<180) angulo=(angulo+5); if(angulo>170)angulo=180; %%minimo NGULO end serv.servoWrite(9,angulo) ; end if (x>100) angulo=angulo-5; if(angulo<10) angulo=0; end
Arduino:
serv.servoWrite(9,angulo) ; end %% PARA Y------------ if (y<180) angulo=(angulo-15); if(angulo<10) angulo=0; end serv.servoWrite(10,angulo ); end if (y>100) angulo=angulo+15; if(angulo>174) angulo=180; end serv.servoWrite(10,angulo ); end
PROBLEMATICAS ->como problemáticas iniciales encontramos la lentitud de procesamiento, la ejecución de Matlab, así como su procesamiento de las imágenes involucra un tiempo significativo, es decir se presentaba un retardo a la respuesta de un evento como el movimiento del objeto.
CONCLUSIONES:
El procesamiento de imágenes con MATLAB requiere una cantidad significativa de recursos informáticos, así como tiempo de procesamiento,
esto podría mejorarse con el empleo de un sistemas de procesamiento de posea otro método de identificación, pues el de Matlab es un significativamente lento.