CLASIFICADOR EN BASE A COLOR

Procesamiento de Imágenes.
La utilización de técnicas de procesamiento de imágenes en el desarrollo de aplicaciones enfocadas a la industria puede resolver problemas operativos y/o de control como es la clasificación de objetos donde la principal diferencia entre uno y otro es su color. En este trabajo se presenta el desarrollo de un clasificador de pelotas de dos colores utilizando un sistema mecánico clasificador controlado por un motor y una cámara web.

las cuales son procesadas con el programa Matlab. mediante una interfaz gráfica de usuario GUIDE. El diseño de la interfaz se muestra a continuación. las cuales al ser analizadas. el cual se mostrará después . de manera que la pelota abarque la mayoría de la imagen . En el axes1 se mostrará la imagen adquirida por la cámara. La cámara es colocada frente a las pelotas. en el axes2 se mostrará la imagen capturada cada determinado tiempo fijado en el timer. al presionar el botón INICIAR. y de esta manera se pueda hacer la clasificación del color con mayor exactitud.PROYECTO CLASIFICADOR DE COLOR El sistema clasificador de color tiene como objetivo el aplicar distintas técnicas de procesamiento de imágenes a fotografías de pelotas tomadas directas de una cámara web. El proyecto consta de dos partes. y y El sistema de visión (Cámara Web) Control mecánico (clasificador) SISTEMA DE VISION El sistema de visión adquiere las imágenes mediante una cámara web. el sistema sea capaz de distinguirlas por color y clasificarlas en un contenedor.

output = hObject. functionDetColor_OpeningFcn(hObject.en el código de la interfaz. llamado handles.I=[].pserie.vidobj. la cual crea el objeto del puerto serie durante la ejecución del programa. %Declaracion de timer global azul verde azul=0. handles.pserie=serial('COM4'). handles). y con la función set se le otorgan las características requeridas para la comunicación con la tarjeta.'DataBits'.pserie. set(handles. el cual se muestra en el Edit Text junto a la etiqueta Color.'FlowControl'. %CREACION DEL OBJETO DE VIDEO (Camara Web) vidinfo=imaqhwinfo('winvideo'. con esta imagen capturada se hará la detección del color.'none').pserie.vidobj=videoinput('winvideo'. También se llevará la cuenta de las pelotas verdes y azules que sean detectadas.to be defined in a futureversion of MATLAB % handlesstructurewithhandles and user data (see GUIDATA) % varargincommand line argumentstoDetColor (see VARARGIN) % Choose default command line output forDetColor handles.8).9600). %INICIALIZACION DEL PUERTO SERIE handles. varargin) % Thisfunction has no output args. set(handles. en el que se declaran e inicializan variables globales las cuales serán ocupadas posteriormente. .t = timer. %Inicializacion de las variables para la cuenta de las pelotas verde=0. set(handles.pserie. A continuación se muestra el código a partir de la función de inicialización de la GUI.'Parity'.1).'BaudRate'. set(handles. handles. handles.'none').pserie. clc handles. % Updatehandlesstructure guidata(hObject.1). la variable handles.t es declarada como timer.pserie. % hObjecthandleto figure % eventdatareserved . seeOutputFcn.'StopBits'.1). También se crea el objeto de video que estará enlazado con la cámara web. También se crea la variable handles. set(handles. eventdata.

En el botón CAPTURA se configura el timer. functionCAPTURA_Callback(hObject. eventdata.vidobj).vidobj.Executesonbuttonpress in CAPTURA. set(handles. hImage = image(zeros(vidRes(2). handles) % hObjecthandleto INICIAR (see GCBO) % eventdatareserved . su periodo y modo de ejecución. %Se inicia la cámara web. 'VideoResolution').to be defined in a futureversion of MATLAB % handlesstructurewithhandles and user data (see GUIDATA) . %Edittext pelotas azules start(handles. end Para el botón CAPTURAR: Para este botón se ocupa un timer que captura una fotografía de la cámara web de acuerdo a un timer. nBands).serie. No conectado').serie. preview(handles. %Se abre el puerto serial. Cada periodo el timer ejecutará la función asignada ´mycallbackµ. eventdata. 'conectado'). catch set(handles. %edittext que muestra %el estado del puerto serie. set(handles.pserie). handles) % hObjecthandleto CAPTURA (see GCBO) % eventdatareserved .vidobj. nBands = get(handles. 'NumberOfBands').La siguiente parte del código corresponde a las funciones de los botones. las cuales se explican a continuación. vidRes = get(handles. %Se muestra en el axes1 una %previsualizacion del video de la cámara web.'string'. Para el botón INICIAR: functionINICIAR_Callback(hObject.num2str(verde)).axes1). handles. try fopen(handles. 'Parent'. fijado en el timer..'string'. vidRes(1). %Edittext pelotas verdes set(handles..'string'.num2str(azul)).verde. y se verifica su estado.vidobj. verde=0.hImage).azul. 'Error. % --.'string'. para que de esta manera se capture procese una imagen continuamente cada determinado tiempo..to be defined in a futureversion of MATLAB % handlesstructurewithhandles and user data (see GUIDATA) global azul verde azul=0.

detectado. handles).axes2). %Se muestra en el axes2 axes(handles.:. después se calcula el promedio de cada componente para así saber cual componente predomina y de esta manera identificar el color de la pelota. MG=mean(mean(G)) MB=mean(mean(B)) velocidad=30. functionmycallback(hObject. %Se obtiene la imagen la cámara image(I.t). %% SE SEPARAN LOS COMPONENTES RGB DE LA IMAGEN Y SE GUARDAN EN LAS VARIABLES R.'uint8')%pause(0.'string'.'string'.vidobj).'string'. en caso de que la componente que predomina sea R.'fixedRate').azul.03).G Y B RESPECTIVAMENTE R=I(:.num2str(azul)).to be defined in a futureversion of MATLAB % handlesstructurewithhandles and user data (see GUIDATA) global azul verde set(handles. B=I(:. handles}.3).''). %CALCULodEL PROMEDIO DE CADA COMPONENTE MR=mean(mean(R)).'ForegroundColor'.'Parent'. Función mycallback: Se separan los componentes RGB de la imagen y se guardan en las variables R.'ExecutionMode'. eventdata.t.G y B respectivamente.t. ya sea verde o azul. datito=2. enter=13. G=I(:.'blue').2)-5.pserie. %Dato velocidad que se manda por el puerto serial % CONDICIONES QU PERMITEN IDENTIFICAR QUE COMPONENTE ES LA MAYOR if MB>MG && MB>MR azul=azul+1. set(handles.2. .:. % ENVIO DE DATOS POR EL PUERTP SERIAL fwrite(handles. %Inicio del timer guidata(hObject. %edit que muestra color detectado I=getsnapshot(handles.datito.'Period'. %Contador de pelotas azules set(handles.handles) % hObjecthandleto CAPTURA (see GCBO) % eventdatareserved .%CONFIGURACION DEL TIMER set(handles.handles.:.'AZUL'.axes2). el sistema se queda en paro y manda el mensaje ´NO DETECTADOµ.TimerFcn = {@mycallback.detectado. %Asignación de función a ejecutar handles.1). start(handles.

velocidad. %Paro del timer % CIERRE Y VERIFICACION DEL ESTADO DEL PUERTO SERIAL try fclose(handles. 'desconectado').03). handles).velocidad.verde.'ForegroundColor'.'ForegroundColor'.10).fwrite(handles.'string'. end.pserie. set(handles. catch set(handles.datito.serie. fwrite(handles. Al ejecutar la GUI. al edittext que muestra el color %identificado set(handles. se ha creado el objeto video de la cámara web y se ha creado el objeto que manejara el puerto serial.03). handles) % hObjecthandleto cerrar (see GCBO) % eventdatareserved .enter. end guidata(hObject. elseif MG>MB && MG>MR verde=verde+1.t). set(handles.detectado.03).to be defined in a futureversion of MATLAB % handlesstructurewithhandles and user data (see GUIDATA) stop(handles.'string'.'uint8')%pause(0.03). fwrite(handles.num2str(verde)). enter=13. eventdata.'green').'string'.'VERDE'.detectado.'NO DETECTADO'. verificando su estado con la función try-catch. .'black'.pserie.pserie.serie.'uint8')%pause(0. se tiene la siguiente ventana. fwrite(handles. datito=1. functioncerrar_Callback(hObject. % ENVIO DE DATOS POR EL PUERTP SERIAL fwrite(handles.03). else %se manda el mensaje NO DETECTADO.pserie.'string'.'uint8')%pause(0.pserie. No desconectado').'string'.enter. 'Error.'FontSize'. En el botón CERRAR se detiene el timer y se cierra el puerto serial. ya se ha incializado el timer. % EN CASO DE QUE LA COMPONENTE MAYOR SEA LA R.'uint8')%pause(0. %Contador de pelotas verdes set(handles.'uint8')%pause(0.pserie).

. al edit text que muestra el color identificado de la pelota. también se abre el puerto serial y se muestra su estado en la GUI.Al dar clik en el botón INICIAR se mostrará el video proveniente de la cámara web. por tanto se toma una imagen de la cámara web y es procesada con la función mycallback. se incializa la cuenta de las pelotas a 0 y se muestra los edit text correspondientes. En este caso no hay ninguna pelota. Después se pulsa el botón captura y se inicia el timer. por tanto el sistema manda el mensaje NO DETECTADO.

En este caso se manda el dato 1 al puerto serial para que el PIC haga girar al motor hacia el sentido contrario. En la siguiente imagen hay una pelota azul frente a la cámara.En la siguiente imagen hay una pelota verde frente a la cámara. . por tanto el sistema identifica la componente es azul y se muestra el mensaje AZUL en la GUI. En este caso se manda el dato 2 al puerto serial para que el PIC haga girar al motor hacia un lado. por tanto el sistema identifica la componente verde y se muestra en la GUI que se ha identificado que es verde.