Proyecto. vision artificial

33
1 Instituto Tecnológico de Hermosillo. INGENIERIA MECATRONICA SISTEMAS INTELIGENTES PRACTICA SISTEMA DE VISION ARTIFICIAL Elaborado por: LÓPEZ LÓPEZ OCTAVIO MARIO GUMARO DUARTE PERALTA Profesor de la asignatura: EDUARDO CHAVEZ MENDIOLA Hermosillo, Son., 12 de junio del 2012

description

vale la pena darle una checadita al codigo

Transcript of Proyecto. vision artificial

Page 1: Proyecto. vision artificial

1

Instituto Tecnológico de Hermosillo.

INGENIERIA MECATRONICA

SISTEMAS INTELIGENTES

PRACTICA

SISTEMA DE VISION ARTIFICIAL

Elaborado por:

LÓPEZ LÓPEZ OCTAVIO

MARIO GUMARO DUARTE PERALTA

Profesor de la asignatura:

EDUARDO CHAVEZ MENDIOLA

Hermosillo, Son., 12 de junio del 2012

Page 2: Proyecto. vision artificial

2

INDICE PAGINA

1. RESUMEN………………………………………………………………………….3

2. INTRODUCCION…………………………………………………………………..4

2.1. Problema a investigar…………………………………………………………..4

2.2. Importancia del estudio………………………………………………………...4

2.3. Hipótesis………………………………………………………………………..4

3. MARCO TEORICO………………………………………………………………...5

3.1. Adquisición de imágenes……………………………………………………….5

3.2. Características cuantitativas – análisis estadístico de la imagen…………… ….5

3.3. Utilizando MatLab…………………………………………………………… ..6

3.3.1. Interfaz de MatLab…………………………………………………......6

3.4. Estructura básica de instrucciones de matlab…………………………………...6

3.5. Comprender y observar…………………………………………………………6

3.6. Creando una imagen binaria……………………………………………………7

3.7. Imagen en escala de grises……………………………………………………...7

3.8. Cursor de datos………………………………………………………………….7

3.9. Umbral…………………………………………………………………………. 7

3.10. Archivos M……………………………………………………………… .. 7

3.11. Funciones………………………………………………………………….. 8

3.12. Adquisición de imágenes………………………………………………… ..8

3.13. Utilizando el toolbox de visión con matlab……………………………….. 8

3.14. Obtención de la información del dispositivo……………………………… 8

3.15. Captura de la imagen en Matlab………………………………………… .. 9

3.16. Preparación del dispositivo………………………………………………...9

4. METODOLOGIA………………………………………………………………….10

5. RESULTADOS…………………………………………………………………….11

6. CONCLUSIONES………………………………………………………………….24

7. REFERENCIAS BIBLIOGRAFICAS……………………………………………..25

Page 3: Proyecto. vision artificial

3

1. RESUMEN

Detección de patrones dentro de un entorno mediante el uso de MATLAB.

Octavio Lopez L., Instituto Tecnológico de Hermosillo.

Mario G. Duarte P.Instituto Tecnológico de Hermosillo.

Este proyecto está enfocado a la detección de patrones mediante visión artificial utilizando

un software especial llamado Matlab. Con este software fue posible el poder programar y controlar

un dispositivo parecido a un carro de control remoto al cual se le montó una cámara para la

detección de figuras (en este caso un cuadrado) mediante esta detección de figuras el dispositivo

pudo seguir a la figura dependiendo de su posición, esta decisión tomada en base al umbralamiento

y gracias al reconocimiento de patrones proporcionado por Matlab.

En el proceso de la realización del proyecto se llevaron a cabo bastantes pruebas con las

cuales se determinó y se definieron la mayoría de los parámetros para el funcionamiento de este, así

como el que figura geométrica detectar, el área (en pixeles) de detección del cuadrado, etc.

El dispositivo se introdujo en un entorno completamente blanco y fue ahí con todo exito

donde detectó el color negro para así no perderse dentro se le puso de frente la figura y este lo

siguió sin ningún problema.

Page 4: Proyecto. vision artificial

4

2. INTRODUCCION.

Elsiguiente reporte tiene como objetivo el de enseñar el uso del procesamiento de imágenes

y reconocimiento de patrones con Matlab mediante una cámara con la cual se detecta una figura en

particular y con ella un dispositivo en forma de carro mencionado previamente toma la decisión de

seguirlo hacia donde este objeto de color negro se encuentre dentro de un entorno completamente

blanco, ya sea hacia delante o hacia cualquiera de los dos lados.

A continuación se mostrara a detalle cómo se realizó este trabajo, tanto su construcción,

como su programación, las complicaciones que se tuvieron durante la realización de este, así como

también después de terminado ya el dispositivo y su programación.

2.1. Problema a investigar.

El Siguiente problema es el de poder construir un dispositivo de visión artificial el cual

detecte patrones específicamente esquinas de una figura por medio de una cámara y como

complemento el seguirlo a manera de carro hacia donde se le coloque el objeto (en este caso

cuadrado).

¿Cómo se diseñará este sistema de visión?

Este sistema de visión será diseñado mediante un software especializado Matlab,

que cuenta con una caja de herramientas específica para este tipo de aplicaciones.

¿Por qué se construirá este sistema de visión artificial?

Este sistema de visión artificial será construido con el fin de así poder guiar a un

dispositivo con ruedas hacia un objeto con la finalidad de que lo reconozca,

enfocándose más a la detección de patrones que hoy en la actualidad muchas

empresas lo utilizan para la detección de fallos.

2.2. Importancia del estudio.

La importancia que este estudio tiene hasta ahorita es de carácter estudiantil, pero de igual

forma la aplicación que este estudio tiene puede abarcar amplias áreas en las cuales la

visión artificial pueda ser aplicada de una forma en la cual sea de gran ayuda en muchos

procesos, ya sea de producción o de búsqueda, este tipo de sistemas inteligentes hoy en la

actualidad son de gran importancia en la industria, y es por tal, que es ahora el momento

correcto de que esto se ponga a prueba la construcción de estos en escuelas, ya que con esto

se refuerza el conocimiento que podría ser aplicado a la vida real.

2.3. Hipótesis

Todo el sistema en conjunto será capaz de poder seguir algún patrón por medio de un tipo

seguidor, en el cual la cámara va montada se comunica con la computadora, en la cual se

monitorea y detecta hacia donde y como se mueve el carro,

Page 5: Proyecto. vision artificial

5

3. MARCO TEORICO.

Antes de empezar con la metodología se tienen que comprender ciertos términos para así entender

por completo el funcionamiento y características del sistema.

1. Adquisición de la imagen: esta consiste en una videocámara web, o una cámara analógica

con una interface de conexión para el procesamiento.

2. Procesamiento: esta parte consiste en una computadora personal que está dedicada al

procesamiento de imagen.

3. Análisis de la imagen: Un conjunto de herramientas usadas para analizar el contenido de la

imagen capturada y encontrar la posición de un objeto.

3.1. Adquisición de imágenes

La adquisición de imágenes puede ser usando una cámara de video que utilice diferentes tipos de

resoluciones, en esta caso de 320 x 240 pixeles, para esto se tienen dos tipos de cámaras

disponibles, cámaras digitales tipo CCD o cámaras analógicas.

Las cámaras digitales generalmente tienen una interfaz de conexión a la computadora por puerto

USB.

Requerimientos de alimentación: las cámaras CCD dan como resultado imágenes de alta calidad

con poco ruido. Estas generan una señal analógica que utilizan un convertidor analógico digital y

por lo tanto requieren un consumo alto de energía.

El análisis de la imagen consiste en extraer información útil a partir de las imágenes capturadas. En

primer lugar se deben de definir las características del objeto haciendo una búsqueda de la imagen.

Estas características del objeto deben ser lo más solidas posibles. Generalmente con el fin de

rastrear o identificar el objeto que se está utilizando, estas características son:

A) Color

B) Intensidad

C) Textura o patrón

D) Bordes circulares, rayas verticales o rayas rectas

E) Estructura, alineación de los objetos de una manera especifica

3.2. Características cuantitativas – análisis estadístico de la imagen.

A) Centro de gravedad. Punto donde los pixeles deseados pueden estar equilibrados.

B) Numero de pixeles. Es un número alto de pixeles que indica la presencia de un objeto.

C) BLOB, es el área de pixeles conectada.

Matlab proporciona una plataforma muy fácil de usar para la adquisición y procesamiento de

imágenes. Incluso los puertos serie y paralelo se pueden acceder directamente en matlab.

Page 6: Proyecto. vision artificial

6

Matlab sirve como una herramienta útil para los VCM. Proporcionan una poderosa biblioteca,

integrada de muchas funciones útiles para el procesamiento de la imagen.

3.3. Utilizando Matlab.

Matlab provee un conjunto de librerías que soportan areas de la ingeniería y la ciencia y la

simulación.

3.3.1. Interfaz de matlab.

Cuando damos doble clic en el icono de matlab podemos observar 3 ventanas: comand window,

work space, y command history.

Comand window.

Esta ventana sirve para describir los comandos y observar los resultados.

Work space.

Esta ventana muestra las variables definidas dentro de la sesión abierta de matlab.

Command history.

En esta ventana se almacena una lista de todos los comandos que se han utilizado así como

una referencia rápida de cada uno de ellos.

3.4. Estructura básica de instrucciones de matlab.

Dentro de matlab, las variables pueden almacenar matrices asi como también se pueden definir para

números enteros, números reales o números complejos. También las matrices pueden ser

ensambladas en estructuras de arreglos de datos.

3.5. Comprender y observar

Dentro de matlab la imagen se almacena en una matriz de dos dimensiones, donde dicha matriz

contiene los valores de la intensidad y brillo de los pixeles. Un pixel es el punto más pequeño en

una imagen que puede mostrarse en la pantalla, la resolución de la imagen es igual al número de

pixeles que pueden ser mostrados en una cuadricula donde las unidades son pulgadas dentro de la

pantalla del monitor.

Para ver realmente los valores almacenados en la matriz conviene activar los siguientes comandos:

>> im(1:10, 1:10)

>> figure, imshow(50:150,50;150);

Page 7: Proyecto. vision artificial

7

3.6. Creando una imagen binaria.

Imagen binaria.

Una imagen que contiene solo blanco y negro se le considera una imagen binaria.

Por ejemplo:

>>imbin= [0 1; 1 0]

>> Figure, imshow (imbin, „initialmagnification‟, „fit‟);

El negro indica intensidad 0 y el blanco indica intensidad máxima(1)

3.7. Imagen en escala de grises.

Una imagen en escala de grises contiene valores de intensidades en un rango o intervalo de un cero

a un máximo, incluyendo el negro y el blanco normalmente este intervalo se encuentra entre 0 y

255. Asi los valores cercanos a cero son los tonos oscuros de gris, mientras que los valores cercanos

a 255 indican un gris claro.

Por ejemplo:

>> imgray= [0.0 0.2 0.4 0.8 1.0]

>> figure, imshow (uint8(imgray); „initialmagnification‟, „fit‟);

3.8. Cursor de datos.

Para ver los colores en la ventana de la figura se tiene una opción en la barra de herramientas que se

llama cursor de datos, el cual al estar activado si hacemos un clic en la imagen sobre cualquier

punto, podremos ver los valores de RGB por pixeles en la imagen en posiciones X, Y.

3.9. Umbral.

Una imagen en escala de brises se puede convertir en una imagen binaria pasando por un proceso

llamado umbral, el toolbox de procesamiento de imágenes proporciona una función.

3.10. Archivos M.

Matlab proporciona una facilidad para ejecutar múltiples secuencias de comandos con una sola

instrucción. Esto se hace escribiendo el nombre de un archivo extensión .m. es decir se puede crear

una función en la que manualmente se escriban todos los comandos y se guarden dentro de una

función en matlab.Hay que recordar que en matlab se pueden crear comentarios los cuales sirven

como una herramienta útil para poner información al momento de ir ejecutando un programa, esto

se logra utilizando el símbolo de %.

Page 8: Proyecto. vision artificial

8

3.11. Funciones.

Las funciones ayudan a escribir de manera organizada el cogido, con un minimo de repeticiones

lógicas. Mientras escribe los archivos m, sucede a menudo que un conjunto de instrucciones

comunes se utilizan dentro un programa. En lugar de escribir nuevamente el conjunto de

instrucciones que se necesita dentro del programa, esto se puede simplificar definiendo una función

donde tienen que pasar los datos dentro de la función, para devolver un resultado.

3.12. Adquisición de imágenes.

Antes de continuar con el tema es conveniente revisar el apoyo prestado por la caja de herramientas

de “ADI” de matlab.

Hoy en dia la mayoría de las cámaras están disponibles con una interfaz USB. Una vez que esta

instalado el controlador de la cámara la computadora detecta el dispositivo cada vez que se conecta.

Por otra parte se tiene una cámara de video digital o una cámara CCD deben estar relacionados con

una tarjeta de adquisición de video que hace la función de interfaz con la computadora por lo lo que

el sistema operativo de Windows detecta automáticamente el dispositivo.

Con el fin de ejecutar las instrucciones tradicionales de procesamiento de imágenes es necesario

utilizar una cámara web USB funcional conectada a su PC.

3.13. Utiliando el toolbox de visión con matlab.

Resulta de suma utilidad para implementar algoritmos de visión o adquisición de imágenes en

tiempo real utilizando dispositivos simples y de bajo costo tales como las webcams. Matlab incluye

el toolbox "Image Acquisition" para este fin.

3.14. Obtencion de la información del dispositivo.

Imaqhwinfo

Devuelve la información del hardware y software disponibles, tales como: Adaptador de video

instalado, versión de Matlab, Toolbox (nombre y versión).

Imaqhwinfo(‘adaptor’)

Donde adaptor es el nombre del adaptador instalado, por lo general winvideo. Este comando

devuelve información relacionada al adaptador.

Imaqhwinfo(‘adaptor’,DeviceID)

Donde DeviceID es el ID del dispositivo a utilizar obtenido con el comando anterior. Si sólo se

cuenta con un dispositivo conectado el DeviceID será 1. Este comando muestra información del

dispositivo conectado (cámara) .

Page 9: Proyecto. vision artificial

9

En matlab se puede verificar si la cámara web está disponible o lista. Matlab puede acceder a

diferentes tipos de adaptadores de dispositivos de video. Un adaptador utiliza a matlab como un

dispositivo para adquisición de imágenes

A continuación se muestran los siguientes comandos:

>>imaghwinfo;

>>cam= imaqhwinfo;

>>cam.installedAdaptors;

>>dev_info= imaqhwinfo („winvideo‟, 1);

3.15.Captura de la imagen en matlab

Las imágenes capturadas utilizando la herramienta vfm son entregadas alespacio de trabajo en

formato RGB.Para capturar las imágenes entregadas por los drivers en el espacio de trabajode

matlab se utiliza la función vfm que tiene el siguiente formatoImageCaptured=vfm(grab,n);Donde

ImageCaptured es la variable que contiene la imagen RGB, y n es elnumero de ‟frames‟ a capturar,

en dado caso de que sea mas de uno la variablede la imagen capturada se indexa para recuperar el

‟frame‟ necesario.De tal forma que si se quisiera capturar el ‟frame‟ actual visto por la cámarase

procedería a escribir en línea de comandos:

>>ImageRGB=vfm(grab,1);

>>imshow(ImageRGB);

3.16. Preparacion del dispositivo

Crear la estructura:

cam=imaqhwinfo(‘adaptor’,DeviceID)

Para poder obtener las características del dispositivo con facilidad.

Por ejemplo, para obtener los formatos soportados:

cam.SupportedFormats

Ejecutar el comando:

video=videoinput(‘adaptor’,DeviceID,’Format’)

Construye un objeto de entrada de video (nexo entre el dispositivo y Matlab). Si no se especifica

Format se asume el formato por defecto.

Page 10: Proyecto. vision artificial

10

Pre-Visualización.

Para desplegar la pre-visualización de las imágenes a capturar ejecutar el comando:

preview(video).

>>Preview (video)

Captura.

Para capturar una imagen ejecutar:

Image=getsnapshot(‘cam’)

4. METODOLOGIA.

El presente proyecto de desarrollo en la ciudad de Hermosillo, en distinto lugares, se tuvieron

muchos inconvenientes en este sentido ya que no se contaba con una área de trabajo totalmente

adecuada para trabajar, fue necesario trabajar en distintos lugares, en aulas de clases, laboratorios y

en nuestras casas.

Este trabajo fue realizado bajo diseño experimental ya que dentro de este se tuvieron que manejar

bastantes variables, que fueron necesarias para poder lograr el objetivo del sistema en conjunto con

su cámara como los que fueron la longitud de pixeles, el área, igual en pixeles el control de giro de

los motoreductores, entre otras cosas.

Para la elaboración de todo el proyecto podemos dividi su metodología en 3 partes:

Diseño Electronico

Programacion (MatLAb y Pics)

Armado del prototipo

Diseño Electronico

En el diseño electrónico, incluimos la comunicación bluetooth, comunicación por radio frecuencia,

control, y una etapa de potencia, a continuación se entrara en detalle en cada una de estas etapas.

Comunicaciones inalámbricas

Un problema critico que se tuvo para el diseño del carrito para que fuera inalámbrico, fue la

transmicion de imágenes del prototitpo hacia una computadora de manera inalámbrica. Se

consideraron posibles alternativas, se evaluaron su factibilida y/o compatibilidad con Matlab y se

decidio por instalar un kit inalámbrico de transmicion de imágenes por radio frecuencia, debido al

Page 11: Proyecto. vision artificial

11

bajo costo y a la falta de tiempo para investigar otros protocolos de comunicación. Los

componentes que conforman el kit son los siguientes:

Video Camara

Receptor de video con antena

Adaptador RCA a USB

Cable AV(RCA)

La cámara consta de 3 cables, dos de ellos son para transmitir audio y video los cuales en nuestro

caso se quedaron desconectados, ya que la transmicion se realiza por medio de una antena ya

integrada a la cámara. Un tercer cable es para alimentar a la cámara con una batería de 9 volts. A

continuación se muestra una imagen de la cámara:

La señal transmitida desde de la cámara por medio de la antena integrada a la camapara es

capturada por un receptor el cual posee salidas RCA de video para ser vistas en alguna pantalla,

DVD etc. A continuaciokn se muestra una imagen de este equipo:

Page 12: Proyecto. vision artificial

12

Para poder trabajar con las imágenes para su posterior procesamiento, la salida de video del reciber

se conecto a un adapatador USB que convierte la señal de video RCA a USB (digital). Con este

ultimo paso tenemos comunicación inalámbrica entre la cámara y una computadora, listo para

procesar imágenes en MatLab tomadas desde el prototipo y transmitidas inalambricamente. A

continuación se muestra una imagen de dicho adaptador.

Page 13: Proyecto. vision artificial

13

Otro aspecto muy importante es la comunicación inalámbrica para el control del prototipo (carrito).

Una vez que se han procesado las imágenes se genera un resultado de dicho proceso y esta

información se enviara inalámbricamente al dispositivo. Analizando los toolbox de Matlab el

dispositivo mas factible es la comunicación bluetooth, ya que Matlab cuenta con el toolbox

Instrument Control Toolbox, en el apartado de programación se entrara en detalle.

El modulo Bluetooth cuenta con salidas y entradas seriales en niveles TTL, con esto nos permitio

recibir datos desde una computadora y comunicarlo con un microcontrolador mediante el protocolo

de comunicación serial RS-232. De esta manera contamos con la comunicación inalámbrica desde

la computadora hacia el prototipo para enviarle la información necesaria para el control de los

motores. A continuación se muestra una imagen del modulo bluetooth y su diagrama de

conexionamiento.

Page 14: Proyecto. vision artificial

14

En la imagen anterior se puede observar la conexión que se realizo entre el modulo bluetooth y el

microcontrolador para la transmicion de datos seriales. En el apartado de etapa de potencia se ablara

sobre el LM293 y su funcionamiento, y en el apartado de programación de microcontroladores se

ablara sobre el por que se conectaron de esta manera.

Control

El microcontrolador realiza el control de los motores, utilizando los pines RB0, RB1, RB2, RB3,

utilizando RB0 y RB1 para controlar el sentido de giro de un motor, sacando por estos pines

conbinaciones (0 0, 0 1, 1 0, 1 1) y de igual manera para el segundo motor utilizando los pines RB2

y RB3. De esta manera se logro controlar los dos motores. En el apartado de la etapa de potencia se

explica a detalle las conexiones del LM293.

Etapa de potencia

Para suministrar un voltaje de 5 volts a los motores de corriente directa, se utilizo el driver LM293,

este driver cuenta con dos canales repartidos en 2 entradas y 2 salidas por canal, además de los

enables que se alimentan directamente a 5 volts para activar los canales. Los pines RB0 y RB1 se

conectaron al canal 1, de tal manera que cuando el RB0=0 y RB1 el motor gira en un sentido al

Page 15: Proyecto. vision artificial

15

cambiar los valores a RB0=1 y RB=0 el motor cambia de giro. Se realiza exatamente lo mismo para

el segundo motor. La alimentación de todo el circuito se realizo con dos baterías de 3.6V a 700mA

conectadas en seria para aumentar el torque y pasando por una etapa de regulación de voltaje con un

7805 para mantener un voltaje de 5volts estable.De esta manera tenemos la potencia suficiente para

poder hacer girar los motores con el suficiente torque.

Programacion (MatLab y PICS)

MatLab

Una vez teniendo el circuito electrónico bien definido con todos las comunicacione bien definidas

se procedio a la programación de los componentes necesarios. El programa principal, el del control

del prototipo y el procesado de las imágenes se realizo en Matlab. Se utilizo una interface grafica

para la programación, a continuación se muestra una imagen de dicha interface grafica.

El programa consta de 3 botones principales, Encender Camara, Iniciar Procesamiento y Apagar

Camara, como su nombre lo indica estos botones realizan las funciones de encender la cámara,

iniciar el procesamiento de imágenes y apagar la cámara. Cuenta con dos áreas de graficacion una

para mostrar las imágenes a color (formato RGB24_320*240), y otra área mas pequeña donde se

grafica la imagen pero binarizada por un umbral, este umbral se controla por medio de un slider que

se encuentra arriba del área de graficacion. Cuenta con un edit text para indicar los movimientos

que deben de tener los motores, además de 3 edit text para indicar las coordenadas del centroide de

la figura y para mostrar el área del objeto. Por ultimo cuenta con un ultimo edit text para indicar el

Page 16: Proyecto. vision artificial

16

estado del carrito, si esta buscando el objetivo o si ya lo detecto. Además cuenta con un control

manual, para posicionar el carrito de manera manual en la posición deseada incial, para después

iniciar el procesamiento y desactivando el control manual y activando el control automatico.

Lo anterior descrito es una descripción breve de la interface grafica, ahora pasaremos a la forma de

programación y el funcionamiento del programa.

Cuando se corre el programa lo primero que aparece es la interface grafica, como se mostro en la

imagen anterior, al mismo tiempo también habilita la comunicación con el bluetooh utilizando el

bluetooth de la computadora, con la instrucción blue=Bluetooth(„nombre_dispositivo‟,1) donde el 1

representa el canal de comunicación, y con la instrucion fopen(„nombre_dispositivo) para abrir la

comunicación.

Cuando se presiona el botón iniciar procesamiento lo primero que realiza lo que realiza el programa

es entrar en un siglo infinito y tomar una foto y mostrarla en un axes principal, después la procesa

hasta obtener una imagen binarizada con un umbral regulado por el usurario mediante un slider,

después se la da un procesamiento para eliminar pixeles exedentes o ruido, primero dilatando la

imagen (agregación de pixeles en la frontera) y después erosionándola (eliminación de pixeles en la

frontera), una vez lista la imagen se realiza un barrido de la imagen recorriendo cada pixel de la

imagen por columnas y filas, y checando en el barrido cuales pixeles están en blanco, cuando

encuentra un pixel en blanco pasa a una serie de instrucciones para determinar si es una esquina

especifica de un cuadrado. Por ejemplo para detectar la esquina superior izquierda, en ese pixel que

se encuentra verefica que el pixel de arriba este en negro, el de la derecha en blanco, el de abajo en

blando y el de la izquierda en negro, de esta manera se garantiza que ese pixel es la esquina superior

esquierda y el mismo procedimiento se realiza para las cuatro esquinas. Cuando detecta que una

esquina esta presente, pone en uno una variable para indicar que se detecto la esquina, al final de

aver pasado por el chequeo de las 4 esquinas, revisa las variables, y si las 4 valen 1, quiere desir

que se detectaron 4 esquinas, entonces envía a un edit que se detecto el objetivo, si alguna de las

variables no vale uno, aparece en ese mismo edit buscando objetivo y no realiza ninguna acción.

En el caso que detecte satisfactoriamente las cuatro esquinas del objetivo pasa a una serie de

funciones, primeramente para calcular el centroide del objetivo, graficarlo y calcular el área del

objetivo y mostralo en los edit text. Como nada mas importa el control del carrito hacia a la derecha

y hacia la izquierda se tomo la coordenada del centroide en y, y entra a una serie de condiciones

donde se evaluava el valor de la coordenada y si era menor o igual a 120(pixeles) pasa a escribir un

dato por el bluetooth para hacer girar el carrito hacia la izquierda, de no cumplir esta condición pasa

a otra condición, si la coordenada es mayor o igual a 200 pasa a escribir en el bluetooth un dato para

hacer girar los motores hacia la derecha, de no cumplir esta condición, pasa a revisar si esta dentro

del rango 120-200 de ser haci quiere desir que el centroide esta en el centro de la imagen, y pasa a

revisar el tamaño de la imagen si el área de la imagen esta por arriba de un set point, quiere desir

que ya esta suficientemente cerca, por lo que escribe un sero en puerto bluetooth para apagar los

motores, si es menor que el valor del set point escribe en el bluetooth un dato para indicar que

Page 17: Proyecto. vision artificial

17

avanze el carrito, por lo tanto escribe un dato en el bluetooth para hacer que avanze el carrito,

dependiento de cual condición alla sido verdadera pasa a escribir en un edit text el sentido de giro

de los motores. Después de todo esto se inicializan las variables en 0, que se usaron para indicar

que se detecto una esquina. Habiendo echo esto termina una corrida completa del ciclo infinito y

comienza otra vez desde el inicio. Los datos que se mandaron desde matlab por el bluetooth hacia el

microcontrolador van en una secuenca determinada para que lo único que realice el

microcontrolador es pasar el dato al puerto B. a continuación se muestra el programa completo.

function varargout = Prueba_3(varargin) % PRUEBA_3 MATLAB code for Prueba_3.fig % PRUEBA_3, by itself, creates a new PRUEBA_3 or raises the existing % singleton*. % % H = PRUEBA_3 returns the handle to a new PRUEBA_3 or the handle to % the existing singleton*. % % PRUEBA_3('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in PRUEBA_3.M with the given input

arguments. % % PRUEBA_3('Property','Value',...) creates a new PRUEBA_3 or raises

the % existing singleton*. Starting from the left, property value pairs

are % applied to the GUI before Prueba_3_OpeningFcn gets called. An % unrecognized property name or invalid value makes property

application % stop. All inputs are passed to Prueba_3_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only

one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Prueba_3

% Last Modified by GUIDE v2.5 10-Jun-2012 17:29:06

% Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Prueba_3_OpeningFcn, ... 'gui_OutputFcn', @Prueba_3_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

Page 18: Proyecto. vision artificial

18

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT

% --- Executes just before Prueba_3 is made visible. function Prueba_3_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to Prueba_3 (see VARARGIN)

% Choose default command line output for Prueba_3 handles.output = hObject;

% Update handles structure guidata(hObject, handles);

% UIWAIT makes Prueba_3 wait for user response (see UIRESUME) % uiwait(handles.figure1); fondo1=imread('vision_1.jpg'); %carga una imagen de fondo imshow(fondo1,'parent',handles.axes1); % y la direcciona a un axes

fondo2=imread('vision_2.jpg'); %carga una segunda imagen de

fondo imshow(fondo2,'parent',handles.axes2); % y la direcciona a otra axes

%bt=Bluetooth('Mario-Bluetooth',1); % crea el objeto de

bluetooth %fopen(bt); % y abre la comunicacion %handles.bt=bt;

guidata(hObject, handles);

% --- Outputs from this function are returned to the command line. function varargout = Prueba_3_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure varargout{1} = handles.output;

% --- Executes on button press in encender_camara. function encender_camara_Callback(hObject, eventdata, handles) % hObject handle to encender_camara (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

Page 19: Proyecto. vision artificial

19

vid=videoinput('winvideo',1,'YUY2_320x240'); % configuracion de la web-

cam handles.vid=vid; % redireccionamiento de la

variable

triggerconfig(vid,'manual'); % activacion de la camara

manualmente set(vid,'FramesPerTrigger',1); % solo tomara una foto set(vid,'TriggerRepeat',Inf); set(vid,'ReturnedColorSpace','rgb'); % la imagen estara en

formato rgb start(vid); %inicializa la camara

set(gcf,'DoubleBuffer','on','renderer','painters'); guidata(hObject, handles);

% --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

while 1 trigger(handles.vid); %prepara la camara im_rgb=getdata(handles.vid); %toma una fotogradia

imagesc(im_rgb,'parent',handles.axes1); % y la manda a un

axes

im_gray=rgb2gray(im_rgb); %convierte la imagen

de color a escalas de grises

val_umbral=get(handles.slider1,'value'); % toma el valor de

umbralamiento im_bin=im_gray<=val_umbral; %para binarizarla

EE=strel('square',20); % creacion de

constantes para el tratamiento SE=strel('square',20); % de imagenes

im_dilatada=imdilate(im_bin,SE); % dilata la imagen im_erosionada=imerode(im_dilatada,EE); % y despues la

erosiona

imshow(im_erosionada,'parent',handles.axes2); %y por ultimo la

direcciona a un axes

a=0; % variable que se

utilizan para la deteccion de las s=0; % esquinas, tienen

que comenzar en cero cuando procesa d=0; % cada imagen f=0; [m,n]=size(im_erosionada); %se determina el

tamaño de la matris de la imagen

Page 20: Proyecto. vision artificial

20

for i=10:(m-20) %realiza un barrido de

toda la imagen for j=10:(n-20) %pixel por pixel para

determinar si es if im_erosionada(i,j)==1 % blanco if im_erosionada(i-1,j)==1 && im_erosionada(i-1,j+1)==1 &&.... % en el

caso que sea blanco estas lineas im_erosionada(i,j+1)==1 && im_erosionada(i+1,j+1)==1

&&.... % determinan si esta presente la esquina superior im_erosionada(i+1,j)==1 && im_erosionada(i+1,j-1)==1

&&.... % izquierda im_erosionada(i,j-1)==1 && im_erosionada(i-1,j-1)==1

&&.... im_erosionada(i-3,j)==0 && im_erosionada(i-3,j-3)==0

&&.... im_erosionada(i,j-3)==0 a=1;

% de ser asi pone un uno en la variable de referencia %q=cat(2,j,i); % forma un vector

con las coordenadas del pixel %hold on; % congela la

imagen %plot(q(:,1), q(:,2), 'r*'); %para poder

graficar la deteccion de la esquina %hold off; end

if im_erosionada(i-1,j)==1 && im_erosionada(i-1,j+1)==1 &&.... % pasa

a revisar si esta preseente la esquina superior derecha im_erosionada(i,j+1)==1 && im_erosionada(i+1,j+1)==1

&&.... % y se realiza el mismo procedimiento anterior im_erosionada(i+1,j)==1 && im_erosionada(i+1,j-1)==1

&&.... im_erosionada(i,j-1)==1 && im_erosionada(i-1,j-1)==1

&&.... im_erosionada(i-3,j)==0 && im_erosionada(i-3,j+3)==0

&&.... im_erosionada(i,j+3)==0 s=1; %w=cat(2,j,i); %hold on; %plot(w(:,1), w(:,2), 'b*'); %hold off; end

if im_erosionada(i-1,j)==1 && im_erosionada(i-1,j+1)==1 &&.... % pasa

a revisar si esta presente la esquina inferior derecha im_erosionada(i,j+1)==1 && im_erosionada(i+1,j+1)==1

&&.... % y se realiza el mismo procedimiento anterior im_erosionada(i+1,j)==1 && im_erosionada(i+1,j-1)==1

&&.... im_erosionada(i,j-1)==1 && im_erosionada(i-1,j-1)==1

&&.... im_erosionada(i-3,j+3)==0 && im_erosionada(i,j+3)==0

&&....

Page 21: Proyecto. vision artificial

21

im_erosionada(i+3,j)==0 d=1; %e=cat(2,j,i); %hold on; %plot(e(:,1), e(:,2), 'g*'); %hold off; end

if im_erosionada(i-1,j)==1 && im_erosionada(i-1,j+1)==1 &&.... % pasa

a revisar si esta presenta la esquina inferior izquierda im_erosionada(i,j+1)==1 && im_erosionada(i+1,j+1)==1

&&.... % y realiza el mismo procedimiento anteior im_erosionada(i+1,j)==1 && im_erosionada(i+1,j-1)==1

&&.... im_erosionada(i,j-1)==1 && im_erosionada(i-1,j-1)==1

&&.... im_erosionada(i-3,j-3)==0 && im_erosionada(i,j-3)==0

&&.... im_erosionada(i+3,j)==0 f=1; %r=cat(2,j,i); %hold on; %plot(r(:,1), r(:,2), 'y*'); %hold off; end

end end end

if a==1 && s==1 && d==1 && f==1

% revisa si estan detectadas las 4 esquinas set(handles.edit1,'string','Objectivo Detectado');

% de ser asi marca que se detecto el objetivo cx=0;cy=0;t=0;

% se definen variables para el centroide y el area for y=1:(m-20) %

realiza un barrido de la imagen pixel por pixel for u=1:(n-20) % para

ver si esta en blanco de ser asi if im_erosionada(y,u)==1 % va

calculando el centroide y sumando el area en pixeles t=t+1; cx=cx+y; cy=cy+u; end end end set(handles.edit2,'string',cx/t);

% muestra los valores de las coordenadas en x set(handles.edit3,'string',cy/t);

% y en y q=cat(2,(cy/t),(cx/t));

% forma un vector que contiene las coordenadas del centroide hold (handles.axes1);

% y congela la imagen

Page 22: Proyecto. vision artificial

22

plot(q(:,1), q(:,2), 'r*','parent',handles.axes1);

% para graficarlo hold (handles.axes1);

set(handles.edit4,'string',t);

% muestra el area del objeto if (cy/t)<=120 %

si la cordenada en x esta del centroide esta mas a la izquierda set(handles.edit5,'string','CW');

% esta mas a la izqueirda muestra el sentido de giro de los motores fwrite(handles.bt,(9));

% y manda el valor binario por bluetooth para hacerlos girar guidata(hObject, handles); end

if (cy/t)>=200 %

si la coordeana en x del centroide esta mas a la derecha set(handles.edit5,'string','CCW');

% muestra el sentido de giro de los motores fwrite(handles.bt,(6));

% y manda el dato por el bluetooth para que giren en ese sentido guidata(hObject, handles); end

if (cy/t)>=120 && (cy/t)<=200 %

define el centro de la imagen donde debe de estar para acer if t<=50000 %

girar los motores para delante o apagarlos si alcanzo el objetivo set(handles.edit5,'string','Avanza');

% si el area del objeto es menor a 50000 pixeles avanza fwrite(handles.bt,(10));

% manda los datos para ke avanse guidata(hObject, handles); else set(handles.edit5,'string','Alto');

% si el area es mayor el carrito se para fwrite(handles.bt,(0));

% y manda los datos para apagar los motores guidata(hObject, handles); end end else set(handles.edit1,'string','Buscando Objetivo'); %

estas lineas restantes se ejecutan si no se ha detectado el objeto fwrite(handles.bt,(9));

% apaga los motores guidata(hObject, handles); set(handles.edit5,'string','Motores Apagados');

% e inicializa los edit en cero set(handles.edit2,'string',0); set(handles.edit3,'string',0); set(handles.edit4,'string',0); end

guidata(hObject, handles); flushdata(handles.vid);

Page 23: Proyecto. vision artificial

23

end % --- Executes on button press in apagar_camara. function apagar_camara_Callback(hObject, eventdata, handles) % hObject handle to apagar_camara (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) fclose(handles.bt);

% cierra la comunicacion bluetooth stop(handles.vid);

% cierra la comunicacion de video

% --- Executes on slider movement. function slider1_Callback(hObject, eventdata, handles) % hObject handle to slider1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider % get(hObject,'Min') and get(hObject,'Max') to determine range of

slider

% --- Executes during object creation, after setting all properties. function slider1_CreateFcn(hObject, eventdata, handles) % hObject handle to slider1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: slider controls usually have a light gray background. if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end

function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a

double

% --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

Page 24: Proyecto. vision artificial

24

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a

double

% --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function edit3_Callback(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit3 as text % str2double(get(hObject,'String')) returns contents of edit3 as a

double

% --- Executes during object creation, after setting all properties. function edit3_CreateFcn(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows.

Page 25: Proyecto. vision artificial

25

% See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function edit4_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a

double

% --- Executes during object creation, after setting all properties. function edit4_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function edit5_Callback(hObject, eventdata, handles) % hObject handle to edit5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit5 as text % str2double(get(hObject,'String')) returns contents of edit5 as a

double

% --- Executes during object creation, after setting all properties. function edit5_CreateFcn(hObject, eventdata, handles) % hObject handle to edit5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

Page 26: Proyecto. vision artificial

26

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function edit6_Callback(hObject, eventdata, handles) % hObject handle to edit6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit6 as text % str2double(get(hObject,'String')) returns contents of edit6 as a

double

% --- Executes during object creation, after setting all properties. function edit6_CreateFcn(hObject, eventdata, handles) % hObject handle to edit6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function edit7_Callback(hObject, eventdata, handles) % hObject handle to edit7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit7 as text % str2double(get(hObject,'String')) returns contents of edit7 as a

double

% --- Executes during object creation, after setting all properties. function edit7_CreateFcn(hObject, eventdata, handles) % hObject handle to edit7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

Page 27: Proyecto. vision artificial

27

set(hObject,'BackgroundColor','white'); end

function edit8_Callback(hObject, eventdata, handles) % hObject handle to edit8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit8 as text % str2double(get(hObject,'String')) returns contents of edit8 as a

double

% --- Executes during object creation, after setting all properties. function edit8_CreateFcn(hObject, eventdata, handles) % hObject handle to edit8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function edit9_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a

double

% --- Executes during object creation, after setting all properties. function edit9_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

Page 28: Proyecto. vision artificial

28

function edit12_Callback(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit3 as text % str2double(get(hObject,'String')) returns contents of edit3 as a

double

% --- Executes during object creation, after setting all properties. function edit12_CreateFcn(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function edit13_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a

double

% --- Executes during object creation, after setting all properties. function edit13_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns

called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

Page 29: Proyecto. vision artificial

29

% --- Executes on button press in avanza. function avanza_Callback(hObject, eventdata, handles) % hObject handle to avanza (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) fwrite(handles.bt,(10)); guidata(hObject, handles); % --- Executes on button press in giro_derecha. function giro_derecha_Callback(hObject, eventdata, handles) % hObject handle to giro_derecha (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) fwrite(handles.bt,(6)); %4 guidata(hObject, handles);

% --- Executes on button press in giro_izquierda. function giro_izquierda_Callback(hObject, eventdata, handles) % hObject handle to giro_izquierda (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) fwrite(handles.bt,(9)); %1 guidata(hObject, handles);

% --- Executes on button press in retrocede. function retrocede_Callback(hObject, eventdata, handles) % hObject handle to retrocede (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

fwrite(handles.bt,(5)); guidata(hObject, handles);

% --- Executes on button press in alto. function alto_Callback(hObject, eventdata, handles) % hObject handle to alto (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) fwrite(handles.bt,(0)); guidata(hObject, handles);

PICS

El microcontrolador que se utilizo fue el pic16f628a, la palabra de configuración que se utilizo esta

definida para que funcione con el oscilador externo y desactivando el MCLR. La única función que

tiene el microcontrolador es leer el dato que manda matlab por el bluetooth y sacarlo al puerto tal

cual, como lo manda MatLab, dejándole todo el control del prototipo a Matlab. A continuación se

muestra la programación que se utilizo en lenguaje basic.

Page 30: Proyecto. vision artificial

30

'****************************************************************

'* Name : UNTITLED.BAS *

'* Author : [select VIEW...EDITOR OPTIONS] *

'* Notice : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *

'* : All Rights Reserved *

'* Date : 6/9/2012 *

'* Version : 1.0 *

'* Notes : *

'* : *

'****************************************************************

@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT

@ DEVICE PIC16F628A, MCLR_OFF

INCLUDE "MODEDEFS.BAS"

CMCON=7

DAT VAR BYTE

TRISA=$0F

TRISB=$00

PORTB=0

INICIO:

SERIN PORTA.0,2,DAt

PORTB=DAT

PAUSEUS 100

Page 31: Proyecto. vision artificial

31

GOTO INICIO

END

Armado del Prototipo

5. RESULTADOS.

Al final en este proyecto se llego al objetivo esperado, lo que desde un principio se planteo, se logro

que el dispositivo pudiera seguir correctamente a una figura, por medio de la cámara

El propósito de utilizar un entorno de color blanco es para que el dispositivo no se pierda e intente

buscar algún otro objeto que se le parezca o trate de imitar a la figura que realmente debería de

seguir, ya que es un problema si este se pierde e intenta seguir otro objeto, ya que se guía solo por

figuras.

Page 32: Proyecto. vision artificial

32

6. CONCLUSIONES.

Al finalizar este proyecto se pudo llegar a la conclusión de que el poder diseñar un sistema de visión

artificial que reconozca patrones, tiene muchas aplicaciones no nomas de forma didáctica si no

fuera en la industria donde realmente se utilizan este tipo de sistemas para la detección de fallas en

algún proceso o maquinado.

Un problema muy particular y especifico que se nos presento fue en la detecccion de las cuatro

esquinas, ya que la función que se desarrollo funciona para cuadrados estrictamente perfectos, cosa

que con la resolución de la cámara y la calidad en la forma del objeto a seguir no se pudo lograr ya

que se perdían las esquinas por instantes de tiempos muy pequeños debido a diferentes

circunstancias como el cambio en la luminosidad del entorno entre otras cosas, este problema se

soluciono agregando ala parte de código donde se detectan las esquinas chequear los pixeles que se

encuentran a todas las direcciones arriba, abajo, derecha, izquierda, diagonales, y también dándole

una tolerancia entre 1 y 5 pixeles para la detección de la esquina (esto se puede ver en los

comentarios del programa).

Otro punto critico fue la rapidez con que el carrito giraba ya que inicialmente el dato que mandaba

MatLab al microcontrolador estaba diseñado que para el momento de girar un motor encendiera en

un sentido y el otro en sentido contrario esto proboco una respuesta demasiado rápida, tan rápida

que el carrito perdia el objeto, la solución fue girar nada mas un motor para dar la vuelta un poco

mas lento y de esta manera no perder el objetivo.

Para lograr una mayor respuesta del sistema se necesita una unidad de procesamiento muy rápida ya

que todo el proceso que realiza es tardado pero resulto ser dentro de lo factible ya que el carrito no

perdió el objeto debido al retardo en procesar las imágenes, por ejemplo supongamos que se detecta

que el objeto buscado esta a la derecha entonces se manda el dato para que gire a la derecha, y

vuelve a procesar otra imagen para determinar la posición actual del objeto, en este lapso de tiempo

de ser muy largo, pudiera ser que ya se alla perdido el objeto ya sigue girando a la derecha.

Afortunadamente no tuvimos problemas con esto ya que el procesamiento se realizo

moderadamente rápido de manera que no perdiera el objetivo.

Como punto de vista personal del equipo, sentimos que hace falta mas apoyo por parte de la

institución, para la realización de proyectos, ya que mucha veces no contamos con las herramientas

necesarias para la construcción y/o pruebas, como taladros, tornos fresas, fuentes de alto amperaje y

voltaje. Una buena opción es que estuviera siempre un área destinada a la elaboración de proyectos

y con la herramienta almenos minima para poder presentar proyectos de mayor calidad ya que al no

contar con herramienta adecuada o necesaria es una gran limitante en el diseño mecanico o en la

realización de pruebas de los circuitos electrónicos.

Page 33: Proyecto. vision artificial

33

Un error que se cometio fue al momento de realizar las pruebas preliminares en la elaboración del

programa, ya que primero se realizo el diseño electrónico, después toda la programación y por

ultimo la construcción del prototipo. Esto nos afecto en tiempo, ya que se perdió mucho tiempo por

que las pruebas que se realizaban durante la elaboración del programa eran con una cartulina y un

cuadrado de color negro, el impacto fue que no obteníamos como el sistema se comportaría

realmente, lo ideal ubiera sido tener el diseño electrónico, el prototipo y por ultimo hacer todo la

programación e ir haciendo las pruebas necesarias con el prototipo ya montado.

MatLab es un entorno de trabajo grandísimo, con demasiadas herramientas para la elaboración de

cualquier proyecto, por lo que nos dimos cuenta la gran variedad y utilidad que tienen todos los

Toolbox de visión artificial de matlab, y otros áreas, ya que fue de bastante ayuda en la elaboración

de este proyecto.

Como recomendaciones para futuras investigaciones o construcciones de proyectos de este tipo,

recomendamos investigar sobre Computer Vision System Toolbox, que es una caja de herramienta

especialmente diseñada para sistemas de visión artificial no de Adquisicion y Procesamiento. Si se

realizaron pruebas o experimentos sobre este toolbox pero por falta de tiempo y dado de que no era

el objetivo principal se dejo por un lado esta manera de procesar la información, pero seria bueno

realizar pruebas con este toolbox.

7. REFERENCIAS BIBLIOGRAFICAS.

Apuntes del cuaderno de clases de “Sistemas Inteligentes”. Eduarto Chavez Mendiola.

Visión por Computador utilizando MatLAB y el Toolbox de Procesamiento Digital de

Imágenes. Erik Valdemar Cuevas Jimenez, Daniel Zaldivar Navarro.

Procesamiento de imágenes con MatLAB. http://lonely113.blogspot.com

Segmentación de colores con MatLAB. Dr. Alejandro Aceves. Metodología de la investigación. Roberto Hernandez Sampieri.