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 al ser analizadas. y de esta manera se pueda hacer la clasificación del color con mayor exactitud. mediante una interfaz gráfica de usuario GUIDE. al presionar el botón INICIAR. de manera que la pelota abarque la mayoría de la imagen . el cual se mostrará después .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. La cámara es colocada frente a las pelotas. las cuales son procesadas con el programa Matlab. El proyecto consta de dos partes. En el axes1 se mostrará la imagen adquirida por la cámara. 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. en el axes2 se mostrará la imagen capturada cada determinado tiempo fijado en el timer. el sistema sea capaz de distinguirlas por color y clasificarlas en un contenedor. El diseño de la interfaz se muestra a continuación.

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

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

:. 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.t). el sistema se queda en paro y manda el mensaje ´NO DETECTADOµ. G=I(:.detectado. %Inicio del timer guidata(hObject.'string'. datito=2. Función mycallback: Se separan los componentes RGB de la imagen y se guardan en las variables R. . eventdata.'Period'.'blue').'').'ExecutionMode'.handles.:.azul. start(handles.G y B respectivamente.num2str(azul)).datito.2)-5.1). %Asignación de función a ejecutar handles.'fixedRate').'string'. ya sea verde o azul.'Parent'. %Se muestra en el axes2 axes(handles. %% SE SEPARAN LOS COMPONENTES RGB DE LA IMAGEN Y SE GUARDAN EN LAS VARIABLES R.axes2).'ForegroundColor'. enter=13.'AZUL'.'string'.3).handles) % hObjecthandleto CAPTURA (see GCBO) % eventdatareserved .t.:.axes2).'uint8')%pause(0.03).2.t.G Y B RESPECTIVAMENTE R=I(:. %edit que muestra color detectado I=getsnapshot(handles.to be defined in a futureversion of MATLAB % handlesstructurewithhandles and user data (see GUIDATA) global azul verde set(handles. B=I(:. set(handles. en caso de que la componente que predomina sea R.TimerFcn = {@mycallback. handles). %Contador de pelotas azules set(handles. %Se obtiene la imagen la cámara image(I. %CALCULodEL PROMEDIO DE CADA COMPONENTE MR=mean(mean(R)). % ENVIO DE DATOS POR EL PUERTP SERIAL fwrite(handles. functionmycallback(hObject.%CONFIGURACION DEL TIMER set(handles. %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.detectado. handles}. MG=mean(mean(G)) MB=mean(mean(B)) velocidad=30.vidobj).pserie.

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

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

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

Sign up to vote on this title
UsefulNot useful