Sie sind auf Seite 1von 9

CLASIFICADOR EN BASE A COLOR

Procesamiento de Imgenes.
La utilizacin de tcnicas de procesamiento de imgenes en el desarrollo de aplicaciones enfocadas a la industria puede resolver problemas operativos y/o de control como es la clasificacin 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 mecnico clasificador controlado por un motor y una cmara web.

PROYECTO CLASIFICADOR DE COLOR


El sistema clasificador de color tiene como objetivo el aplicar distintas tcnicas de procesamiento de imgenes a fotografas de pelotas tomadas directas de una cmara web, las cuales al ser analizadas, el sistema sea capaz de distinguirlas por color y clasificarlas en un contenedor. El proyecto consta de dos partes; y y El sistema de visin (Cmara Web) Control mecnico (clasificador)

SISTEMA DE VISION
El sistema de visin adquiere las imgenes mediante una cmara web, las cuales son procesadas con el programa Matlab, mediante una interfaz grfica de usuario GUIDE. La cmara es colocada frente a las pelotas, de manera que la pelota abarque la mayora de la imagen , y de esta manera se pueda hacer la clasificacin del color con mayor exactitud. El diseo de la interfaz se muestra a continuacin.

En el axes1 se mostrar la imagen adquirida por la cmara, al presionar el botn INICIAR, en el axes2 se mostrar la imagen capturada cada determinado tiempo fijado en el timer, el cual se mostrar despus

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

La siguiente parte del cdigo corresponde a las funciones de los botones, las cuales se explican a continuacin. Para el botn INICIAR:
functionINICIAR_Callback(hObject, eventdata, handles) % hObjecthandleto INICIAR (see GCBO) % eventdatareserved - to be defined in a futureversion of MATLAB % handlesstructurewithhandles and user data (see GUIDATA) global azul verde azul=0; verde=0; set(handles.verde,'string',num2str(verde)); %Edittext pelotas verdes set(handles.azul,'string',num2str(azul)); %Edittext pelotas azules start(handles.vidobj); %Se inicia la cmara web. vidRes = get(handles.vidobj, 'VideoResolution'); nBands = get(handles.vidobj, 'NumberOfBands'); hImage = image(zeros(vidRes(2), vidRes(1), nBands), 'Parent',... handles.axes1); preview(handles.vidobj,hImage); %Se muestra en el axes1 una %previsualizacion del video de la cmara web. %Se abre el puerto serial, y se verifica su estado. try fopen(handles.pserie); set(handles.serie,'string', 'conectado'); %edittext que muestra %el estado del puerto serie. catch set(handles.serie,'string', 'Error, No conectado'); end

Para el botn CAPTURAR: Para este botn se ocupa un timer que captura una fotografa de la cmara web de acuerdo a un timer, para que de esta manera se capture procese una imagen continuamente cada determinado tiempo, fijado en el timer. En el botn CAPTURA se configura el timer, su periodo y modo de ejecucin. Cada periodo el timer ejecutar la funcin asignada mycallback.

% --- Executesonbuttonpress in CAPTURA. functionCAPTURA_Callback(hObject, eventdata, handles) % hObjecthandleto CAPTURA (see GCBO) % eventdatareserved - to be defined in a futureversion of MATLAB % handlesstructurewithhandles and user data (see GUIDATA)

%CONFIGURACION DEL TIMER set(handles.t,'Period',2,'ExecutionMode','fixedRate'); %Asignacin de funcin a ejecutar handles.t.TimerFcn = {@mycallback, handles}; start(handles.t); %Inicio del timer guidata(hObject, handles);

Funcin mycallback: Se separan los componentes RGB de la imagen y se guardan en las variables R,G y B respectivamente, despus se calcula el promedio de cada componente para as saber cual componente predomina y de esta manera identificar el color de la pelota, ya sea verde o azul, en caso de que la componente que predomina sea R, el sistema se queda en paro y manda el mensaje NO DETECTADO.
functionmycallback(hObject, eventdata,handles) % hObjecthandleto CAPTURA (see GCBO) % eventdatareserved - to be defined in a futureversion of MATLAB % handlesstructurewithhandles and user data (see GUIDATA) global azul verde set(handles.detectado,'string',''); %edit que muestra color detectado I=getsnapshot(handles.vidobj); %Se obtiene la imagen la cmara image(I,'Parent',handles.axes2); %Se muestra en el axes2 axes(handles.axes2); %% SE SEPARAN LOS COMPONENTES RGB DE LA IMAGEN Y SE GUARDAN EN LAS VARIABLES R,G Y B RESPECTIVAMENTE R=I(:,:,1); G=I(:,:,2)-5; B=I(:,:,3); %CALCULodEL PROMEDIO DE CADA COMPONENTE MR=mean(mean(R)); MG=mean(mean(G)) MB=mean(mean(B)) velocidad=30; %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; %Contador de pelotas azules set(handles.detectado,'string','AZUL','ForegroundColor','blue'); set(handles.azul,'string',num2str(azul)); datito=2; enter=13; % ENVIO DE DATOS POR EL PUERTP SERIAL fwrite(handles.pserie,datito,'uint8')%pause(0.03);

fwrite(handles.pserie,velocidad,'uint8')%pause(0.03); fwrite(handles.pserie,enter,'uint8')%pause(0.03); elseif MG>MB && MG>MR verde=verde+1; %Contador de pelotas verdes set(handles.verde,'string',num2str(verde)); set(handles.detectado,'string','VERDE','ForegroundColor','green'); datito=1; enter=13; % ENVIO DE DATOS POR EL PUERTP SERIAL fwrite(handles.pserie,datito,'uint8')%pause(0.03); fwrite(handles.pserie,velocidad,'uint8')%pause(0.03); fwrite(handles.pserie,enter,'uint8')%pause(0.03); % EN CASO DE QUE LA COMPONENTE MAYOR SEA LA R. else %se manda el mensaje NO DETECTADO, al edittext que muestra el color %identificado set(handles.detectado,'string','NO DETECTADO','ForegroundColor','black','FontSize',10); end;

En el botn CERRAR se detiene el timer y se cierra el puerto serial, verificando su estado con la funcin try-catch.
functioncerrar_Callback(hObject, eventdata, handles) % hObjecthandleto cerrar (see GCBO) % eventdatareserved - to be defined in a futureversion of MATLAB % handlesstructurewithhandles and user data (see GUIDATA) stop(handles.t); %Paro del timer % CIERRE Y VERIFICACION DEL ESTADO DEL PUERTO SERIAL try fclose(handles.pserie); set(handles.serie,'string', 'desconectado'); catch set(handles.serie,'string', 'Error, No desconectado'); end guidata(hObject, handles);

Al ejecutar la GUI, se tiene la siguiente ventana, ya se ha incializado el timer, se ha creado el objeto video de la cmara web y se ha creado el objeto que manejara el puerto serial.

Al dar clik en el botn INICIAR se mostrar el video proveniente de la cmara web, se incializa la cuenta de las pelotas a 0 y se muestra los edit text correspondientes, tambin se abre el puerto serial y se muestra su estado en la GUI.

Despus se pulsa el botn captura y se inicia el timer, por tanto se toma una imagen de la cmara web y es procesada con la funcin mycallback. En este caso no hay ninguna pelota, por tanto el sistema manda el mensaje NO DETECTADO, al edit text que muestra el color identificado de la pelota.

En la siguiente imagen hay una pelota verde frente a la cmara, por tanto el sistema identifica la componente verde y se muestra en la GUI que se ha identificado que es verde. En este caso se manda el dato 2 al puerto serial para que el PIC haga girar al motor hacia un lado.

En la siguiente imagen hay una pelota azul frente a la cmara, 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 1 al puerto serial para que el PIC haga girar al motor hacia el sentido contrario.

Das könnte Ihnen auch gefallen