Cricbot_tutorial_new español.docx

47
Introducción al Análisis de Video usando MATLAB Deepak Malani, REC Calicut Anant Malewar, IIT Bombay Emitido por interés público por: Nex Robotics Pvt. Ltd. (www.nex- robotics.com)

Transcript of Cricbot_tutorial_new español.docx

Page 1: Cricbot_tutorial_new español.docx

Introducción al Análisis de Video usando

MATLAB

Deepak Malani, REC CalicutAnant Malewar, IIT Bombay

Emitido por interés público por:

Nex Robotics Pvt. Ltd. (www.nex-robotics.com)

Page 2: Cricbot_tutorial_new español.docx

Prologo:La amplia área de sistemas autónomos basados en visión es en términos generales llamada visión de maquina. Hemos tratado con un modulo con nivel de principiante en este campo, al cual nos referimos como movimiento controlado de visión (VCM).

Palabras Clave:Visión de Maquina, Adquisición de Imagen, MATLAB, Control de Robot basado en Visión

© Nex Robotics Pvt. Ltd. 1

Page 3: Cricbot_tutorial_new español.docx

http://www.nex-robotics.com/workshop.html

Page 4: Cricbot_tutorial_new español.docx

Tabla de Contenidos

1 Introduccion______________________________________________________ 3

1.1 Descripcion del Sistema:________________________________________________ 3

1.2 Herramientas para el Procesamiento de Imágenes__________________________ 4

2 Comenzar con MATLAB______________________________________ 5

2.1 Interface MATLAB __________________________________________________ 5

2.2 Trabajar con Imagenes_______________________________________________ 6

2.2.1 Leer una Imagen________________________________________________________ 6 2.2.2 Visualizar una Imagen______________________________________________________

7 2.2.3 Generar una Imagen _____________________________________________________ 9

2.3 ArchivosM___________________________________________________________ 10

2.4 Funciones__________________________________________________________ 12

3 Adquisicion de Imagenes____________________________________________ 13

3.1 Presentacion preliminar de Imagenes____________________________________ 14

3.2 Capturar and almacenar imagenes ______________________________________ 15

3.3 Avanzar con Adquisicion de Imagenes________________________________ 16

3.4 Interface con puertos PC ___________________________________________ 18

3.4.1 Puerto Paralelo____________________________________________________________ 18

3.4.2 Puerto Serial______________________________________________________________ 19

4 Appendice _______________________________________________________ 21

4.1 Espacios a color_______________________________________________________ 21

5 Referencias_______________________________________________________ 23

Page 5: Cricbot_tutorial_new español.docx

© Nex Robotics Pvt. Ltd. 2http://www.nex-robotics.com/workshop.html

Page 6: Cricbot_tutorial_new español.docx

1 Introduccion

En esta sección se explica el movimiento controlado de visión (VCM) como un sistema.

1.1 Descripción del Sistema:

El sistema para VCM consiste de:1. Adquisición de Imágenes: Consiste de una cámara de video, cámara web, o una cámara análoga con interface adecuada para conectarla a un procesador. 2.Procesador: Consiste ya sea de una computadora personal o una unidad dedicada de procesamiento de imágenes. 3. Análisis de Imágenes: Ciertas herramientas son usadas para analizar el contenido en la imagen capturada y conclusiones derivadas ej. Localizar la posición de un objeto. 4. Control de la maquina: Después de hacer la conclusión se deben hacer acciones mecánicas ej. Usar puertos seriales o paralelos de un PC para controlar motores derechos e izquierdos de un robot para dirigirlo hacia la pelota.

Pictóricamente, el sistema puede ser representado de la siguiente manera:

Dispositivo de Adquisición de Imagen

Procesador de Imagen

Herramienta de Análisis de Imagen

ej. PC, DSPej. camara CCD ej. MATLAB

Control de la maquina ej. Usar puerto paralelo para controlar motores izquierdo y derecho.

1.Capturar Imágenes puede realizarse usando una cámara de video disponible en varias resoluciones. Ej. 640 x 480 pixeles. Existen dos tipos de cámaras generalmente disponibles: Cámaras digitales (CCD- dispositivo cargado en pareja y sensor basado en CMOS) y cámaras análogas. Las Cámaras digitales generalmente tienen un interface directo con la computadora (puerto USB), pero las cámaras análogas requieren una tarjeta apropiada de grabación o una tarjeta sintonizadora para TV para hacer interface con la PC.

Requerimientos de Energía: cámaras CCD proporcionan imágenes de alta calidad. Generan una señal análoga y usan un convertidor digital análogo (ACD) y por ende consumen energía alta. Cámaras CMOS tienen menos sensibilidad resultando en imágenes de poca calidad pero consumen menos energía lo que resulta en una vida de la batería mas larga.

2.El análisis de imágenes consiste en la extracción de información útil de las

Page 7: Cricbot_tutorial_new español.docx

imágenes capturadas. Primeramente decidimos las características del objeto que buscamos en la imagen. Esta característica del objeto debe ser tan robusta como sea posible. Generalmente, para el propósito de rastrear o identificar el objeto se utiliza: i. Color ii. Intensidadiii. Textura o patrón

© Nex Robotics Pvt. Ltd. 3http://www.nex-robotics.com/workshop.html

Page 8: Cricbot_tutorial_new español.docx

iv. Orillas – rallas circulares, derechas, verticales v. Estructura – Distribución de objetos en una manera especifica

Análisis de Imagen Cuantitativo/ Estadístico:i. Centro de gravedad – punto donde se pueden balancear los pixeles

deseadosii. Cuenta de pixeles – una cuenta de pixeles alta indica presencia de objetos iii. Blob – un área de pixeles conectados

3. El control de maquina consiste en controlar un robot basado en la conclusión derivada del análisis de imágenes.

Para lograr esto usando PC, su puerto paralelo o serial puede ser usado para manejar el robot. Ej. Puente H, control PWM puede ser usado extensivamente para movimiento derecho e izquierdo de un robot. El Puerto serial puede ser usado para transferir información, el cual necesita un micro controlador en el robot para interpretar la información.

1.2 Herramientas para Procesar Imágenes

Una vez que la adquisición de la imagen este instalada, las imágenes capturadas necesitan ser almacenadas en un formato apropiado para procesarlas. Generalmente, una imagen sin refinar es almacenada como una matriz de intensidad de colores.MATLAB provee una plataforma para adquirir y procesar imágenes muy sencillas. Aun se puede tener acceso a puertos seriales y paralelos usando MATLAB. Sirve como una herramienta útil para un nivel principiante VCM. Provee una biblioteca poderosa de muchas funciones para procesar imágenes útiles.Una fuente abierta equivalente de MATLAB es SCILAB (puede descargarse de http://www.scilab.org gratis) y Scilab Image Processing (SIP) caja de herramientas (http://siptoolbox.sourceforge.net). Sin embargo, el apoyo disponible en SIP es limitado ya que con pocos los que contribuyen a esta caja de herramientas.

© Nex Robotics Pvt. Ltd. 4http://www.nex-robotics.com/workshop.html

Page 9: Cricbot_tutorial_new español.docx

2 Comenzar con MATLAB

MATLAB son siglas para MATrix LABoratory, un software desarrollado por Mathworks Inc (www.mathworks.com). MATLAB provee una biblioteca extensa para varios dominios de computaciones y simulaciones científicas y de ingeniería.

2.1 Interface MATLAB

Cuando haces click en el icono MATLAB (de tu escritorio o Inicio>Todos los Programas), típicamente ves tres ventanas: Command Window, Workspace y Command History. Imágenes de esas ventanas se muestran a continuación.

Command Window:Esta es la ventana donde escribes los comandos y ves las salidas.

WorkspaceEsta ventana muestra las variables definidas por tu sesión en MATLAB.

Command History almacena la lista de comandos usados recientemente para hacer referencia a ellos rápidamente.

Page 10: Cricbot_tutorial_new español.docx

© Nex Robotics Pvt. Ltd. 5http://www.nex-robotics.com/workshop.html

Page 11: Cricbot_tutorial_new español.docx

Escribir instrucciones básicas:

En MATLAB, las variables son almacenadas como matrices (singular: matrix), el cual puede ser un entero, números reales o aun números complejos. Estas matrices tienen semejanza a las “array data structures” (usada en programación 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. También esta variable se almacenó como una matriz 1x1, como puede verse en el workspace. Para evitar ver la variable, agrega un punto y coma después de la instrucción.

>> a=5;

De igual manera para definir una matriz 2x2, la instrucción 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)

2.2 Trabajar con Imágenes

Comencemos con las instrucciones básicas para leer y visualizar una imagen en MATLAB.

2.2.1 Leer una Imagen

Una vez que haya comenzado con MATLAB, escribe lo siguiente en la ventana de comando

>> im=imread('cameraman.tif');

Este comando almacena la imagen cameraman.tif en una variable con el nombre im.

Page 12: Cricbot_tutorial_new español.docx

© Nex Robotics Pvt. Ltd. 6http://www.nex-robotics.com/workshop.html

Page 13: Cricbot_tutorial_new español.docx

La imagen cameraman.tif es almacenada en mi computadora en la locación siguiente (C:\Program Files\MATLAB71\toolbox\images\imdemos)Puedes alternativamente almacenar una imagen en la locación siguiente y leerla con el comando siguiente.C:\Program Files\MATLAB71\work

2.2.2 Visualizar una Imagen

Puedes visualizar la imagen en otra ventana usando el comando imshow

>>figure,imshow(im);

Esto ocasiona que otra ventana salte y visualiza la imagen im.

© Nex Robotics Pvt. Ltd. 7http://www.nex-robotics.com/workshop.html

Page 14: Cricbot_tutorial_new español.docx

Para conocer el alcance y la altura de la imagen, use la función size >>s=size(im);>>s

Observe y EntiendaEn 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 pequeña que puede aparecer en tu pantalla. La resolución 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));

© Nex Robotics Pvt. Ltd. 8http://www.nex-robotics.com/workshop.html

Page 15: Cricbot_tutorial_new español.docx

2.2.3 Generando una Imagen

1. Imagen BinariaUna imagen que contiene solo colores blanco y negro se llama imagen binaria. >>imbin=[0 1;1 0];>>figure,imshow(imbin,'InitialMagnification','fit')El negro indica intensidad cero y el blanco indica intensidad máxima.

2. Imagen en escala de grisesUna imagen en escala de grises contiene valores de intensidad en un rango desde cero hasta la máxima incluyendo negro y blanco. Normalment este rango esta entre 0 y 255. Los valores cerca del cero son sombras de gris y los que están cerca del 255 indican luz gris.

> imgray=[0.0 0.2 0.4 0.8 1.0]; > figure,imshow(imgray,'InitialMagnification','fit') or >>imgray=[0 32 64 128 196 255]; > figure,imshow(uint8(imgray),'InitialMagnification','fit')

Nota:Por default, el rango es de 0 a 1 (escribe: doublé). Sin embargo puedes convertir los valores de la imagen de tipo double a unsigned integer (8 bits) usando

>>imgray=uint8(imgray)

3. Imágenes a colorUna imagen a color se puede considerar que está compuesta por tres colores básicos: rojo, verde y azul. Tambien se le conoce como imagen RGB. Una imagen a color se representa como un array 3D con 3era dimensión usada para indexar los componentes de color.

> imRGB=imread('peppers.png'); > figure,imshow(imRGB);

Aquí la matriz imrgb es una matriz de tres dimensiones.Para entender esto, escribe >> imRGB(1:5,1:5,:)

Para entender como estos 3 colores forman la imagen, ahora intentaremos mostrar el componente de cada color por separado:>> size(imRGB)

ans =384 512 3

>> imR = zeros(384,512,3);>> imR(:,:,1) = imRGB(:,:,1);>> imG = zeros(384,512,3);

© Nex Robotics Pvt. Ltd. 9

Page 16: Cricbot_tutorial_new español.docx

http://www.nex-robotics.com/workshop.html

Page 17: Cricbot_tutorial_new español.docx

> 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 DatosPara 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 grisesUna 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. ThresholdingUna 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 múltiples comandos con un solo comando. Esto se realiza escribiendo un archivo m ir a File > New > M-filePor ejemplo, la función “graythresh” puede escribirse manualmente de la siguiente manera:

im=imread('cameraman.tif');figure,imshow(im);

Page 18: Cricbot_tutorial_new español.docx

© Nex Robotics Pvt. Ltd. 10http://www.nex-robotics.com/workshop.html

Page 19: Cricbot_tutorial_new español.docx

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.

Page 20: Cricbot_tutorial_new español.docx

© Nex Robotics Pvt. Ltd. 11http://www.nex-robotics.com/workshop.html

Page 21: Cricbot_tutorial_new español.docx

Comentarios:

Observa que, los comentarios (en verde) pueden escribirse después del símbolo %. Lo que tiene comentarios no se considera para ejecución.

Los archivos m se vuelven una herramienta practica para escribir programas extensos y pueden ser guardados y editados según se requiera. Ahora veremos como definir nuestras propias funciones en MATLAB.

2.4 FuncionesLas funciones ayudan a escribir códigos organizados con repetición de lógica mínima. Al escribir archivos m, a menudo es existen instrucciones que se requieren repetitivamente. En lugar de escribir nuevamente la instrucción, puedes definir la función, donde necesitas pasar la información para ser operada y escoger los valores que necesitas que regrese.La siguiente función calcula el centro de gravedad de un objeto en la imagen. Este archivo se debe guardar con el mismo nombre que el de la función (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 función se puede llamar de la siguiente manera:

>>cog=center(imscan);

La instrucción pasara la matriz imscan a la función, y almacena el valor que la función regresa a la variable cog.

Page 22: Cricbot_tutorial_new español.docx

© Nex Robotics Pvt. Ltd. 12http://www.nex-robotics.com/workshop.html

Page 23: Cricbot_tutorial_new español.docx

3 Adquisición de Imagen

Antes de avanzar, veamos el apoyo que la caja de herramientas de “image adquisition” en MATLAB nos proporciona.

Hoy en día la mayoría de las cámaras están disponibles con interface USB. Una vez que instalaste el controlador para la cámara, la computadora detecta el dispositivo en cualquier momento que lo conectes. Alternativamente, si tienes una cámara de video digital o una cámara CCD conectada con una tarjeta de captura y con interface de la computadora, sistema operativo Windows, automáticamente detecta el dispositivo.

Para poder ejecutar más instrucciones necesitaras una cámara USB funcional conectada a tu PC.

En MATLAB, puedes checar si el apoyo está disponible para tu cámara. 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 más información 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’.

© Nex Robotics Pvt. Ltd. 13http://www.nex-robotics.com/workshop.html

Page 24: Cricbot_tutorial_new español.docx

Los datos de salida deben ser similares a los que se muestran en la siguiente imagen.

3.1 Presentación preliminar de un video

Puedes ver una presentación de un video capturado por la imagen definiendo un objeto y asociándolo con el dispositivo.

>> vid=videoinput(‘winvideo’,1, ‘RGB24_320x240’)

Veras los detalles de los parámetros de adquisición , como se muestran a continuación.

Ahora para ver el video que está siendo capturado por la cámara, usa el comando preview command >> preview(vid)

© Nex Robotics Pvt. Ltd. 14

Page 25: Cricbot_tutorial_new español.docx

http://www.nex-robotics.com/workshop.html

Page 26: Cricbot_tutorial_new español.docx

Entonces saltara una ventana, que expone lo que la cámara está capturando.

La cámara tal vez resista formatos de video múltiples. 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 definición del objeto vid.

3.2 Capturando y Almacenando Imágenes

1. Capturando una imagenPara capturar una imagen del video, defina el objeto vid como se describe anteriormente y use getdata para capturar un marco del video.

>>start(vid); % Este comando inicia la captura de marcos y almacena

% los marcos en la memoria>>im=getdata(vid,1); >>figure,imshow(im);

2. Almacenando una imagenPuede almacenar la imagen capturada como un archivo .jpg o .gif usando la función imwrite.

>>imwrite(im,'testimage.gif');

La imagen se almacenara en el folder ‘MATLAB71\work’ . Inténtelo.

Page 27: Cricbot_tutorial_new español.docx

© Nex Robotics Pvt. Ltd. 15http://www.nex-robotics.com/workshop.html

Page 28: Cricbot_tutorial_new español.docx

3.3 Avanzando con la Adquisición de Imágenes

Cada vez que quiera capturar una imagen instantánea, necesitara parar el video, volverlo a empezar y usar la función getdata o peekdata. Para evitar estas acciones repetitivas, la caja de herramientas “Image Acquisition” proporciona una opción para detonar el objeto del video requerido y capturar un marco instantáneo. Cree un archivo m con las siguientes secuencias de comando.

vid=videoinput('winvideo',1); triggerconfig(vid,'manual'); set(vid,'FramesPerTrigger',1 ); set(vid,'TriggerRepeat', Inf); start(vid);for i=1:5

trigger(vid);im= getdata(vid,1); figure,imshow(im);

endstop(vid);delete(vid);clear vid;

En el código anterior, el objeto im se escribe demás mientras se ejecuta cada uno de los “loops” for. Para poder ver las cinco imágenes, remplace im con im(:,:,:,i).

En este código, las instrucciones 2-5 establecen las del objeto vid. triggerconfig establece el objeto para detonar manualmente, ya que su detonación automática es de tipo inmediato. En detonación inmediata, el video es capturado tan pronto como empiece el objeto ‘vid’. Los marcos capturados son almacenados en la memoria. La función getdata puede usarse para accesar estos marcos. Pero en la detonación manual recibe la imagen solo cuando ‘detonas’ el video. ‘FramesPerTrigger’ decide el número de marcos que quiere capturar cada vez ‘trigger’ es ejecutado.

TriggerRepeat´ tiene que ser igual al número 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 número entero positivo, necesitara empezar la captura del video nuevamente después de que ´trigger´ ha sido usado ese número de veces.También, una vez que termine con la adquisición de marcos y tenga las imágenes guardadas, puede parar la captura de video y borrar los marcos guardados de la memoria, usando los siguientes comandos:>>stop(vid);

Page 29: Cricbot_tutorial_new español.docx

>>delete(vid); >>clear vid;

© Nex Robotics Pvt. Ltd. 16http://www.nex-robotics.com/workshop.html

Page 30: Cricbot_tutorial_new español.docx

Nota: getsnapshot regresa un marco de imagen y es independiente de la propiedad FramesPerTrigger.

Entonces, si desea continuar capturando imágenes, 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

}

Page 31: Cricbot_tutorial_new español.docx

© Nex Robotics Pvt. Ltd. 17http://www.nex-robotics.com/workshop.html

Page 32: Cricbot_tutorial_new español.docx

3.4 Interface con puertos PC

MATLAB proporciona apoyo para accesar un puerto serial (también llamados puertos COM) y puertos paralelos(también llamados puertos de impresora o puertos LPT) de una PC.

Nota: Si usa una PC de escritorio o una laptop antigua, lo mas probable es que tenga ambos, puertos paralelos y seriales. Sin embargo, si es mas nueva, los puertos paralelos tal vez no estén disponibles.

3.4.1 Puerto Paralelo

Un puerto paralelo tiene 25 “pins” como se muestra en la figura abajo. Los cables de puerto paralelo están localmente disponibles (comúnmente llamados cables de puerto de impresora). Estos cables son prácticos para conectar “pins” con su circuito. “Pins” 2-9 son bi-direccionales “data pins” (pin 9 tiene el bit mas significativo (MSB)), “pins” 10-13 y 15 son de salida ( “pins” de estatus), “pins” 1,14,16,17 son de entrada (de control), mientras que “pins” 18-25 son de tierra.

MATLAB tiene una adaptador para accesar a un puerto paralelo (similar al adaptador para adquisición de imágenes). Para accesar al puerto paralelo en MATLAB, define un objeto> parport=

digitalio('parallel','LPT1');

Puede obtener la dirección del

Page 33: Cricbot_tutorial_new español.docx

puerto de la siguiente manera

> get(parport,'PortAddress') > daqhwinfo('parallel'); % To get data acquisition hardware information

© Nex Robotics Pvt. Ltd. 18http://www.nex-robotics.com/workshop.html

Page 34: Cricbot_tutorial_new español.docx

Tiene que definir los “pins” 2-9 como “pins” de salida, usando la función addline.

>> addline(parport, 0:7, 'out')

Ahora ponga la información 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 función putvalue

>> putvalue(parport,dataout);

Alternativamente, puede escribir los equivalente decimales de la información 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.

3.4.2 Puerto SerialSi tiene que transmitir un byte de información, el puerto serial transmite 8 bits como un bit a la vez. La ventaja es que solo necesita un cable para transmitir los 8 bits (mientras que un puerto paralelo necesita8).

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 comunicación de información en el caso de un modem. Para transmitir información, colo los pins 3 y 5 son requeridos.

© Nex Robotics Pvt. Ltd. 19http://www.nex-robotics.com/workshop.html

Page 35: Cricbot_tutorial_new español.docx

En el lado de recepción, necesita un convertidos de nivel de voltaje llamado RC232 IC, el cual es un estándar para comunicación serial. Para interpretar la información serial, un microcontrolador con UART (Universar Asynchronus reciever transmitter) es requerido en el robot. La mayoría de los microcontroladores como AVR ATMEGA 8, Atmel/Philips 8051 o microcontroladores PIC tienen UART. UART necesita estar iniciado para recibir información 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 código para izquierda y derecha derecho y reversa para el microcontrolador por el puerto serial (ej. 1-Iquierda, 2-Derecha, 3-Derecho, 4-Reversa).

El código 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 están 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.

© Nex Robotics Pvt. Ltd. 20http://www.nex-robotics.com/workshop.html

Page 36: Cricbot_tutorial_new español.docx

4 Appendice

4.1 Espacios a Color

Para almacenar el contenido de la información 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, saturación y color)

Formato YCbCr

En este formato,la información de la intensidad de la luz se almacena en una componente solo (Y), y la información 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 idéntico.)Puede convertir la imagen de RGB a formato YCbCr.

>>imrgb=imread('peppers.png'); >>imycbcr=rgb2ycbcr(imrgb);>> figure,imshow(imrgb),figure,imshow(imycbcr)

Formato HSV

La siguiente figura ilustra el espacio a color HSV.

© Nex Robotics Pvt. Ltd. 21

Page 37: Cricbot_tutorial_new español.docx

http://www.nex-robotics.com/workshop.html

Page 38: Cricbot_tutorial_new español.docx

Según el tono varía 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. Según la saturación varia de 0 a 1.0, los colore correspondientes (tonos) varian de insaturado (sombras de gris) a completamente saturado (sin componente blanco). Según el valor, o brillo varía 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);

© Nex Robotics Pvt. Ltd. 22

Page 39: Cricbot_tutorial_new español.docx

http://www.nex-robotics.com/workshop.html

Page 40: Cricbot_tutorial_new español.docx

5 Referencias

Amplia documentación de MATLAB esta disponible en MATLAB Full Product Family Help. En esta documentación, algunas de las ilustraciones y explicaciones han sido tomadas directamente de la sección de ayuda de MATLAB.

Cuando imágenes han sido tomadas de paginas web, la fuente ha sido avisada.

Material de Consulta

Para cubrir bien los conceptos en procesamiento de imágenes, los siguientes libro han sido usados por los autores de este documento.

Libros1. Digital Image Processing Using MATLAB por Gonzalez y Woods

Paginas WebAlgunas de las páginas web usadas para escribir este documento:

1. www.roborealm.com/machine_vision.php2. www.roborealm.com/tutorial/line_following/slide010.php3. www.roborealm.com/links/vision_software.php4. www.roborealm.com/tutorial/color_object_tracking_2/slide010.php5. www.societyofrobots.com/programming_computer_vision_tutorial.shtml

Notas de LecturaComo area de investigación, Machine Vision se relaciona con muchas matematicas relacionadas con varias areas como geometría cardenal, algebra de vectores, calculo, probabilidad, y estadística etc. Este campo también se relaciona con el reconocimiento de patrones, biometría. La siguiente pagina web es una lectura en Machine Vision para descarga mediante OpenCourseware(OCW) en la pagina de MIT´S.

http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-801Fall-2004/CourseHome/

Videos Videos de un curso en procesamiento de imágenes están 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

© Nex Robotics Pvt. Ltd. 23http://www.nex-robotics.com/workshop.html

Page 41: Cricbot_tutorial_new español.docx

PDF to Word