Академический Документы
Профессиональный Документы
Культура Документы
Deepak Malani, REC Calicut Anant Malewar, IIT Bombay Emitido por inters pblico por: Nex Robotics Pvt. Ltd. (www.nex-robotics.com)
Prologo: La amplia rea de sistemas autnomos basados en visin es en trminos generales llamada visin de maquina. Hemos tratado con un modulo con nivel de principiante en este campo, al cual nos referimos como movimiento controlado de visin (VCM). Palabras Clave: Visin de Maquina, Adquisicin de Imagen, MATLAB, Control de Robot basado en Visin
http://www.nex-robotics.com/workshop.html
Tabla de Contenidos
1
1.1 1.2
Introduccion______________________________________________________ 3
Descripcion del Sistema:________________________________________________ 3 Herramientas para el Procesamiento de Imgenes__________________________ 4
2
2.1 2.2
2.3 2.4
ArchivosM___________________________________________________________ 10 Funciones__________________________________________________________ 12
3
3.1 3.2 3.3 3.4
Adquisicion de Imagenes____________________________________________ 13
Presentacion preliminar de Imagenes____________________________________ 14 Capturar and almacenar imagenes ______________________________________ 15 Avanzar con Adquisicion de Imagenes________________________________ 16 Interface con puertos PC ___________________________________________ 18
Puerto Paralelo____________________________________________________________ 18 Puerto Serial______________________________________________________________ 19
3.4.1 3.4.2
4
4.1
Appendice _______________________________________________________ 21
Espacios a color_______________________________________________________ 21
Referencias_______________________________________________________ 23
1 Introduccion
En esta seccin se explica el movimiento controlado de visin (VCM) como un sistema.
Control de la maquina ej. Usar puerto paralelo para controlar motores izquierdo y derecho.
1. Capturar Imgenes puede realizarse usando una cmara de video disponible en varias resoluciones. Ej. 640 x 480 pixeles. Existen dos tipos de cmaras generalmente disponibles: Cmaras digitales (CCD- dispositivo cargado en pareja y sensor basado en CMOS) y cmaras anlogas. Las Cmaras digitales generalmente tienen un interface directo con la computadora (puerto USB), pero las cmaras anlogas requieren una tarjeta apropiada de grabacin o una tarjeta sintonizadora para TV para hacer interface con la PC. Requerimientos de Energa: cmaras CCD proporcionan imgenes de alta calidad. Generan una seal anloga y usan un convertidor digital anlogo (ACD) y por ende consumen energa alta. Cmaras CMOS tienen menos sensibilidad resultando en imgenes de poca calidad pero consumen menos energa lo que resulta en una vida de la batera mas larga. 2. El anlisis de imgenes consiste en la extraccin de informacin til de las imgenes capturadas. Primeramente decidimos las caractersticas del objeto que buscamos en la imagen. Esta caracterstica del objeto debe ser tan robusta como sea posible. Generalmente, para el propsito de rastrear o identificar el objeto se utiliza: i. Color ii. Intensidad iii. Textura o patrn
iv. Orillas rallas circulares, derechas, verticales v. Estructura Distribucin de objetos en una manera especifica Anlisis de Imagen Cuantitativo/ Estadstico: i. Centro de gravedad punto donde se pueden balancear los pixeles deseados ii. Cuenta de pixeles una cuenta de pixeles alta indica presencia de objetos iii. Blob un rea de pixeles conectados
Workspace Esta ventana muestra las variables definidas por tu sesin en MATLAB.
Command History almacena la lista de comandos usados recientemente para hacer referencia a ellos rpidamente.
Escribir instrucciones bsicas: En MATLAB, las variables son almacenadas como matrices (singular: matrix), el cual puede ser un entero, nmeros reales o aun nmeros complejos. Estas matrices tienen semejanza a las array data structures (usada en programacin de computadoras). Comencemos con instrucciones simples en la ventana de comandos de MATLAB. Para definir un entero, escribe a=5 y haz enter. >> a=5 En cuanto hagas enter, el valor de a se muestra de nuevo en la ventana de comando. Tambin esta variable se almacen como una matriz 1x1, como puede verse en el workspace. Para evitar ver la variable, agrega un punto y coma despus de la instruccin. >> a=5; De igual manera para definir una matriz 2x2, la instruccin en MATLAB se escribe como >> b=[ 1 2; 3 4]; Si estas familiarizado con operaciones en matrices, puedes encontrar la determinante o la inversa de la matriz. >> determin= det(b) >> d=inv(b)
La imagen cameraman.tif es almacenada en mi computadora en la locacin siguiente (C:\Program Files\MATLAB71\toolbox\images\imdemos) Puedes alternativamente almacenar una imagen en la locacin siguiente y leerla con el comando siguiente. C:\Program Files\MATLAB71\work
Para conocer el alcance y la altura de la imagen, use la funcin size >>s=size(im); >>s Observe y Entienda En MATLAB, una imagen se almacena como una matriz bidimensional, donde la matriz contiene los valores de la intensidad de la luz de los pixeles. Un pixel es la imagen mas pequea que puede aparecer en tu pantalla. La resolucin de una imagen es igual al numero de pixeles que caben en una pulgada cuadrada en tu monitor. Para ver los valores almacenados en esta matriz, escribe >> im(1:10,1:10)
>> figure,imshow(im(50:150,50:150));
>> imG(:,:,2) = imRGB(:,:,2); >> imB = zeros(384,512,3); >> imB(:,:,3) = imRGB(:,:,3); >> imtemp=[imR imG imB imRGB]; >> figure,imshow(imtemp); Normalmente cada component de color en una imagen a color puede ser accesado por separado como una matriz en 2D como la siguiente, >> R = imRGB(:,:,1); >> size(R) ans = 384 512 >> figure, imshow(R); 4. Cursor de Datos Para ver los valores de los colores in la figura de la ventana, ve a Tools>Data Cursor, y haz clock en cualquier punto en la imagen. Puedes ver los valores del RGB del pixel en la ubicacion (X,Y). 5. Convirtiendo una imagen RGB a una imagen a escala de grises Una imagen a color se puede convertir en una imagen a escala de grises usando la funcion rgb2gray (funcion disponible en la caja de herramientas image processing) >>imGRAY=rgb2gray(imRGB); 6. Thresholding Una imagen a escala de grises (tambien llamada imagen de intensidad) se puede convertir en una imagen binaria con un proceso llamado thresholding. La caja de herramientas Image Processing provee una function llamada graythresh para calcular un threshold optimo para convertise en una imagen binaria en escala de grises. >> level=graythresh(imGRAY); >> imBW = im2bw(imGRAY,level); >> figure, imshow(imBW); Esta funcion convierte la intensidad de pixeles entre 0 hasta el nivel de intensidad cero (negro) y entre level+1 a 255 hasta maximo (blanco)
2.3 Archivos M
MATLAB provee facilidad para ejecutar declaraciones de mltiples comandos con un solo comando. Esto se realiza escribiendo un archivo m ir a File > New > M-file Por ejemplo, la funcin graythresh puede escribirse manualmente de la siguiente manera:
im=imread('cameraman.tif'); figure,imshow(im);
10
s=size(im);
temp=im; thresh=128; for i=1:s(1,1)
for j=1:s(1,2) if temp(i,j)<thresh temp(i,j)=0; else temp(i,j)=255; end end end figure,imshow(temp);
Guarda este archivo como threshold.m en el directorio work y escribe >>threshold En la ventana de comando de MATLAB. La siguiente imagen muestra como aparecen los archivos m. en el editor de matlab.
11
Comentarios: Observa que, los comentarios (en verde) pueden escribirse despus del smbolo %. Lo que tiene comentarios no se considera para ejecucin. Los archivos m se vuelven una herramienta practica para escribir programas extensos y pueden ser guardados y editados segn se requiera. Ahora veremos como definir nuestras propias funciones en MATLAB.
2.4 Funciones
Las funciones ayudan a escribir cdigos organizados con repeticin de lgica mnima. Al escribir archivos m, a menudo es existen instrucciones que se requieren repetitivamente. En lugar de escribir nuevamente la instruccin, puedes definir la funcin, donde necesitas pasar la informacin para ser operada y escoger los valores que necesitas que regrese. La siguiente funcin calcula el centro de gravedad de un objeto en la imagen. Este archivo se debe guardar con el mismo nombre que el de la funcin (ej. centro.m). function [cent]= center(im) s=size(im); cx=0;cy=0; n=1; for i=1:s(1,1) for j=1:s(1,2) if im(i,j)==255 % 1 or 255 n=n+1; cx=cx+i; cy=cy+j; end end end cxavg=cx/n; cyavg=cy/n; [cent]=[cyavg,cxavg]; Esta funcin se puede llamar de la siguiente manera: >>cog=center(imscan); La instruccin pasara la matriz imscan a la funcin, y almacena el valor que la funcin regresa a la variable cog.
12
3 Adquisicin de Imagen
Antes de avanzar, veamos el apoyo que la caja de herramientas de image adquisition en MATLAB nos proporciona. Hoy en da la mayora de las cmaras estn disponibles con interface USB. Una vez que instalaste el controlador para la cmara, la computadora detecta el dispositivo en cualquier momento que lo conectes. Alternativamente, si tienes una cmara de video digital o una cmara CCD conectada con una tarjeta de captura y con interface de la computadora, sistema operativo Windows, automticamente detecta el dispositivo. Para poder ejecutar ms instrucciones necesitaras una cmara USB funcional conectada a tu PC. En MATLAB, puedes checar si el apoyo est disponible para tu cmara. MATLAB tiene adaptadores para accesar estos dispositivos. Un adaptador es un software que MATLAB usa para comunicarse con un dispositivo para adquirir una imagen. >> imaqhwinfo >> cam=imaqhwinfo; >> cam.InstalledAdaptors
Para adquirir ms informacin del dispositivo, escribe >>dev_info = imaqhwinfo('winvideo',1) Nota: En lugar de winvideo, si imaqhwinfo muestra otro adaptador, entonces escribe el nombre de ese adaptador en lugar de winvideo.
13
Los datos de salida deben ser similares a los que se muestran en la siguiente imagen.
Ahora para ver el video que est siendo capturado por la cmara, usa el comando preview command >> preview(vid)
14
Entonces saltara una ventana, que expone lo que la cmara est capturando.
La cmara tal vez resista formatos de video mltiples. Para ver por usted mismo todos los formatos, escriba
>>dev_info = imaqhwinfo('winvideo',1); >>celldisp(dev_info.SupportedFormats); %displays list of supported formats
Mire usted mismo otros formatos, remplazando `RGB24_320x240` con otros formatos, en definicin del objeto vid.
15
En el cdigo anterior, el objeto im se escribe dems mientras se ejecuta cada uno de los loops for. Para poder ver las cinco imgenes, remplace im con im(:,:,:,i). En este cdigo, las instrucciones 2-5 establecen las del objeto vid. triggerconfig establece el objeto para detonar manualmente, ya que su detonacin automtica es de tipo inmediato. En detonacin inmediata, el video es capturado tan pronto como empiece el objeto vid. Los marcos capturados son almacenados en la memoria. La funcin getdata puede usarse para accesar estos marcos. Pero en la detonacin manual recibe la imagen solo cuando detonas el video. FramesPerTrigger decide el nmero de marcos que quiere capturar cada vez trigger es ejecutado. TriggerRepeat tiene que ser igual al nmero de marcos que se quieren procesar en el programa o bien puede ser establecido a Inf. Para establecerlo Inf, puede usar trigger las veces que requiera. Si se establece a cualquier nmero entero positivo, necesitara empezar la captura del video nuevamente despus de que trigger ha sido usado ese nmero de veces. Tambin, una vez que termine con la adquisicin de marcos y tenga las imgenes guardadas, puede parar la captura de video y borrar los marcos guardados de la memoria, usando los siguientes comandos: >>stop(vid); >>delete(vid); >>clear vid;
16
Nota: getsnapshot regresa un marco de imagen y es independiente de la propiedad FramesPerTrigger. Entonces, si desea continuar capturando imgenes, puede escribir un archivo m como el siguiente: vid=videoinput(winvideo,1) triggerconfig(vid,'manual'); set(vid,'FramesPerTrigger',1); set(vid,'TriggerRepeat', Inf); start(vid); while(1) { trigger(vid); im= getdata(vid,1); % write your image processing algorithm here % % you may break this infinite while loop if a certain condition is met }
17
http://www.nex-robotics.com/workshop.html
MATLAB tiene una adaptador para accesar a un puerto paralelo (similar al adaptador para adquisicin de imgenes). Para accesar al puerto paralelo en MATLAB, define un objeto >> parport= digitalio('parallel','LPT1');
Puede obtener la direccin del puerto de la siguiente manera
18
Tiene que definir los pins 2-9 como pins de salida, usando la funcin addline. >> addline(parport, 0:7, 'out') Ahora ponga la informacin que quiere de salida al puerto paralelo en una matriz >> dataout = logical([1 0 1 0 1 0 1 1]); Ahora para que salgan estos valores, use la funcin putvalue >> putvalue(parport,dataout); Alternativamente, puede escribir los equivalente decimales de la informacin binaria. >> data = 23; >> putvalue(parport,data);
Puede conectar los pins del puerto paralelo al controlador IC para los motores izquierdos y derechos del robot, y controlar el movimiento del vehiculo a la izquierda, derecha, para enfrente y reversa. Necesitara un puente H para manejar el motor en ambas direcciones sentido del reloj y contra las manesillas del reloj.
El pin 3 es el que transmite(TX), el pin 2 es el que recibe (RX) y el pin 5 es el de tierra. Otros pins son usados para controlar la comunicacin de informacin en el caso de un modem. Para transmitir informacin, colo los pins 3 y 5 son requeridos.
19
En el lado de recepcin, necesita un convertidos de nivel de voltaje llamado RC232 IC, el cual es un estndar para comunicacin serial. Para interpretar la informacin serial, un microcontrolador con UART (Universar Asynchronus reciever transmitter) es requerido en el robot. La mayora de los microcontroladores como AVR ATMEGA 8, Atmel/Philips 8051 o microcontroladores PIC tienen UART. UART necesita estar iniciado para recibir informacin serial desde la PC. En este caso, el microcontrolador se conecta al controlador del motor ICs que controla los motores derecho e izquierdo. Despues de procesar la imagen, y decidir el movimiento del robot, transmita cdigo para izquierda y derecha derecho y reversa para el microcontrolador por el puerto serial (ej. 1-Iquierda, 2-Derecha, 3-Derecho, 4-Reversa). El cdigo para accesar al puerto serial de MATLAB es el siguiente: >> ser= serial('COM1','BaudRate',9600,'DataBits',8); >> fopen(ser); Para mandar datos por medio del puerto serial, estos comandos estn disponibles >> fwrite (ser,1); % for left motion >> fwrite (ser,2); % for right motion Puede cerrar el puerto en caso de haber otras aplicaciones utilizando el puerto usando el comando fclose. >> fclose(ser);
El microcontrolador tiene un puerto de salida cuyos pins pueden ser utilizados para controlar el controlador IC. El microcontrolador interpreta los datos seriales de la PC y controla los motores mediante pins de salida y el controlador del motor o el puente H.
20
4 Appendice
4.1 Espacios a Color
Para almacenar el contenido de la informacin de una imagen, pueden usarse varios formatos de color y espacio. Uno de los espacios a color es RGB (rojo, verde, azul). De hecho en pantallas de TFT LCD, el sustrato del filtro de color contiene estos tres filtros de los colores primarios. Otros espacios a color son YCbCr Y HSV(tono, saturacin y color) Formato YCbCr En este formato,la informacin de la intensidad de la luz se almacena en una componente solo (Y), y la informacin de chrominance se almacena como componentes de diferencia de dos colores (Cb y Cr). Cb representa la diferencia entre el componente rojo y el valor de referencia. (YUV, otro espacio a color usado ampliamente para video digital, es muy similar al YCbCr pero no idntico.) Puede convertir la imagen de RGB a formato YCbCr.
>>imrgb=imread('peppers.png'); >>imycbcr=rgb2ycbcr(imrgb); >> figure,imshow(imrgb),figure,imshow(imycbcr)
21
Segn el tono vara de 0 a 1.0, los colores correspondientes varian de rojo a amarillo, verde, turquesa, azul, magenta, y de nuevo al rojo, asi que en realidad 0 y 1.0 son ambos valores rojos. Segn la saturacin varia de 0 a 1.0, los colore correspondientes (tonos) varian de insaturado (sombras de gris) a completamente saturado (sin componente blanco). Segn el valor, o brillo vara de 0 a 1.0, los correspondientes colores se vuelven mas brillantes. Nuevamente en este caso, una imagen puede ser convertida entre formatos RGB y HSV. >> imrgb = imread('peppers.png'); >> imhsv= rgb2hsv(imrgb); >> figure,imshow(imrgb),figure,imshow(imhsv);
22
http://www.nex-robotics.com/workshop.html
5 Referencias
Amplia documentacin de MATLAB esta disponible en MATLAB Full Product Family Help. En esta documentacin, algunas de las ilustraciones y explicaciones han sido tomadas directamente de la seccin de ayuda de MATLAB. Cuando imgenes han sido tomadas de paginas web, la fuente ha sido avisada. Material de Consulta Para cubrir bien los conceptos en procesamiento de imgenes, los siguientes libro han sido usados por los autores de este documento. Libros 1. Digital Image Processing Using MATLAB por Gonzalez y Woods Paginas Web Algunas de las pginas web usadas para escribir este documento: 1. www.roborealm.com/machine_vision.php 2. www.roborealm.com/tutorial/line_following/slide010.php 3. www.roborealm.com/links/vision_software.php 4. www.roborealm.com/tutorial/color_object_tracking_2/slide010.php 5. www.societyofrobots.com/programming_computer_vision_tutorial.shtml Notas de Lectura Como area de investigacin, Machine Vision se relaciona con muchas matematicas relacionadas con varias areas como geometra cardenal, algebra de vectores, calculo, probabilidad, y estadstica etc. Este campo tambin se relaciona con el reconocimiento de patrones, biometra. La siguiente pagina web es una lectura en Machine Vision para descarga mediante OpenCourseware(OCW) en la pagina de MITS. http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-ComputerScience/6-801Fall-2004/CourseHome/ Videos Videos de un curso en procesamiento de imgenes estn disponibles para descarga gratis desde Purdue University y University of California, Berkeley. 1. www.ecn.purdue.edu/VISE/visevideo/ee637S05/ 2. webcast.berkeley.edu/course_details.php?seriesid=1906978282
23
PDF to Word