Seguimiento de Objetos de Colores Con Webcam en Matlab

14
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICA CURSO: LABORATORIO DE PROCESAMIENTO DIGITAL DE IMÁGENES. TEMA: DETECCION DEL ANGULO DE INCLINACION DE UN OBJETO CON RESPECTO AL CENTRO DE GRAVEDAD USANDO MATLAB EN TIEMPO REAL. ALUMNOS: AHUANLLA GONZALES, PEDRO JESUS HORARIO: JUEVES 7:00-9:00 AM. 2014-A

description

Codigo en Matlab, seguimiento de colores

Transcript of Seguimiento de Objetos de Colores Con Webcam en Matlab

Page 1: Seguimiento de Objetos de Colores Con Webcam en Matlab

FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS

ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICA

CURSO: LABORATORIO DE PROCESAMIENTO DIGITAL DE IMÁGENES.TEMA: DETECCION DEL ANGULO DE INCLINACION DE

UN OBJETO CON RESPECTO AL CENTRO DE GRAVEDAD USANDO MATLAB EN TIEMPO REAL.

ALUMNOS: AHUANLLA GONZALES, PEDRO JESUS

HORARIO: JUEVES 7:00-9:00 AM.

2014-A

Page 2: Seguimiento de Objetos de Colores Con Webcam en Matlab

SEGUIMIENTO DE OBJETOS DE COLORES CON WEBCAM EN MATLAB

1.-Captura de Imágenes Mediante Cámara Conectadas a la Pc.

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.

Para este fin es necesario tener el toolbox ‘Image Acquisition’.

El toolbox incluye la herramienta Image Acquisition tool ‘imaqtool’ que se utilizara posteriormente.

2.-Comandos a utilizar.

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 suele ser 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 solo se cuenta con un dispositivo conectado el DeviceID será 1. Este comando muestra información del dispositivo conectado (cámara).

Page 3: Seguimiento de Objetos de Colores Con Webcam en Matlab

El adaptador instalado es ‘winvideo’.

Hay un dispositivo de adquisición de imágenes instalado (DeviceID).

Este dispositivo instalado es una webcam ‘TOSHIBA Web Camera - HP’.

Además soporta 7 formatos de adquisición. Formato por defecto:’YUY2_128X1024’.

3.-Coneccion del Hardware.

1.1.- Conecte el dispositivo de adquisición de imágenes al PC (En nuestro caso es el de la misma laptop).-

4.-Marco Teórico.

Procesamiento de imágenes en Matlab.

¿Qué compone una imagen?

Cada imagen se compone de una matriz de MXN pixeles (contracción de ‘elemento de imagen’) con M filas y N columnas de pixeles. Cada pixel contiene un cierto valor de rojo, verde y azul. La variación de estos valores para el rojo, verde, azul (RGB) podemos conseguir casi cualquier color.

Almacenamiento de imágenes en Matlab.

Page 4: Seguimiento de Objetos de Colores Con Webcam en Matlab

Deteccion de colorEl formato RGB es un método practico para representar imágenes en color. Matlab crea tres matrices(o tres matrices de MXN) con cada matriz que representa los componentes normalizados de rojo, verde o azul para leer y almacenar cada uno de los fotogramas del video. El color de cualquier pixel se determina por la combinación de valores Azul Rojo Verde y almacenada en tres matrices en la ubicación de ese pixel. Así como Matlab lee y manipula archivos jpg.

Page 5: Seguimiento de Objetos de Colores Con Webcam en Matlab
Page 6: Seguimiento de Objetos de Colores Con Webcam en Matlab
Page 7: Seguimiento de Objetos de Colores Con Webcam en Matlab
Page 8: Seguimiento de Objetos de Colores Con Webcam en Matlab
Page 9: Seguimiento de Objetos de Colores Con Webcam en Matlab

6.-Codigo en Matlab.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%close all;clear all;clc; % primero se captura un stream de video usando videoinput, con argumento%de winvideo, numero de dispositivo y formato de la camara, si no sabes usa la%funcion imaqtool para averiguarlo es YUY o RGBvid=videoinput('winvideo',1,'YUY2_640x480');%640x480 160x120% Se configura las opciones de adquision de videoset(vid, 'FramesPerTrigger', Inf);set(vid, 'ReturnedColorspace', 'rgb')vid.FrameGrabInterval = 5;%framegrabinterval significa que tomara cada 5 frame del stream de video adquirida%con start(vid) se activa la adquisicion, pero todavia se toma la primera fotostart(vid) % creamos un bucle que puede ser while always o while true en este caso%y como mi compu es una netbook trucha(trucha=cagada=lenta=barata)%hago que despues de 100 frames adquiridos se salga del bucle para evitar colgadaswhile(vid.FramesAcquired<=100) % se toma una snapshot del stream y se la almacena en data para trabajar mas%facildata = getsnapshot(vid); % ahora vamos a reconocer el color rojo en tiempo real% tenemos que extraer el color rojo% de la imagen en escala de grises de la imagen adquirida en datadiff_im = imsubtract(data(:,:,1), rgb2gray(data));%imsubstract sirve para sacar algun valor constante de una imagen, usamos como%argumento el array de data y la funcion rgb2gray de data

Page 10: Seguimiento de Objetos de Colores Con Webcam en Matlab

%se usa medfilt2 para filtrar la senial del ruidodiff_im = medfilt2(diff_im, [3 3]);% Convertir la imagen en escala de grises a una imagen binaria.diff_im = im2bw(diff_im,0.18); % para determinar el tamanio a reconocer se usa bwareopen para descartar%imagen de rojo de menos de 300 pixelsdiff_im = bwareaopen(diff_im,300); % Etiquetamos los elementos conectados en la imagenbw = bwlabel(diff_im, 8); % Ahora hacemos el analisis del "objeto" detectado(que solo son pixels rojos)%agrupados de mas de 300% onfiguramos la region etiquetadastats = regionprops(bw, 'BoundingBox', 'Centroid');% centro de gravedad[N M]= size(bw); M00=0;M10=0;M01=0; M20=0;M02=0;;M11=0;for i=1:N for j=1:M if(bw(i,j)==1) %(SI ES UNA IMAGEN BLANCA) M00=M00+1; % ENTONCES M10=M10+j; % SUMATORIA DE LOS MOMENTOS DE LA IMAGEN M01=M01+i; M20=M20+j*j; % VER LA ECUACION DE LOS MOMENNTOS CENTRALES DE ORDEN PQ M02=M02+i*i; M11=M11+i*j; end endendcx=M10/M00;cy=M01/M00;disp(cx);disp(cy);u00=M00; % ver ecuacion en copias de momentos centrales en forma resumida,u20=M20-cx*M10;% ver ecuacion en copias de momentos centrales en forma resumida,u02=M02-cy*M01;% ver ecuacion en copias de momentos centrales en forma resumida,u11=M11-cy*M10;% ver ecuacion en copias de momentos centrales en forma resumida,hold onplot(cx,cy,'-m+');%eje mayorl=sqrt((u20+u02+sqrt(((u20-u02)^2)+(4*u11^2)))/(u00/2))%eje% menorw=sqrt((u20+u02-sqrt(((u20-u02)^2)+(4*u11^2)))/(u00/2))%orientcion eje mayorth=0.5*atan2(2*u11,(u20-u02))% atan arco tangente en cuatro cuadrantes % coordenadas eje mayorp1=[cx+0.5*l*cos(th) cy+0.5*l*sin(th)]; p2=[cx-0.5*l*cos(th) cy-0.5*l*sin(th)];

Page 11: Seguimiento de Objetos de Colores Con Webcam en Matlab

%coordenadas eje menorp3=[cx+0.5*w*sin(th) cy-0.5*w*cos(th)];p4=[cx-0.5*w*sin(th) cy+0.5*w*cos(th)];line([p1(1,1) p2(1,1)],[p1(1,2) p2(1,2)]); % une con una linea 2 puntos line([p3(1,1) p4(1,1)],[p3(1,2) p4(1,2)]); % une con una linea 2 puntos disp(th*180/pi)cx=M10/M00;cy=M01/M00;disp(cx);disp(cy);u00=M00; % ver ecuacion en copias de momentos centrales en forma resumida,u20=M20-cx*M10;% ver ecuacion en copias de momentos centrales en forma resumida,u02=M02-cy*M01;% ver ecuacion en copias de momentos centrales en forma resumida,u11=M11-cy*M10;% ver ecuacion en copias de momentos centrales en forma resumida,hold onplot(cx,cy,'rs'); %eje mayorl=sqrt((u20+u02+sqrt((u20-u02)^2+4*u11^2))/(u00/2))%eje menorw=sqrt((u20+u02-sqrt((u20-u02)^2+4*u11^2))/(u00/2))%orientcion eje mayorth=0.5*atan2(2*u11,(u20-u02))% atan arco tangente en cuatro cuadrantes p1=[cx+0.5*l*cos(th) cy+0.5*l*sin(th)]; p2=[cx-0.5*l*cos(th) cy-0.5*l*sin(th)]; p3=[cx+0.5*w*sin(th) cy-0.5*w*cos(th)]; p4=[cx-0.5*w*sin(th) cy+0.5*w*cos(th)];line([p1(1,1) p2(1,1)],[p1(1,2) p2(1,2)]); % une con una linea 2 puntos line([p3(1,1) p4(1,1)],[p3(1,2) p4(1,2)]);% une con una linea 2 puntosdisp(th*180/pi) %dispth % mostramos la imagenimshow(data) hold on %este es un bucle para encerrar el objeto rojo en un rectangulp y una cruz en el%centroide(solo es programacion basica de matlab) for object = 1:length(stats)bb = stats(object).BoundingBox;bc = stats(object).Centroid;rectangle('Position',bb,'EdgeColor','r','LineWidth',2)plot(bc(1),bc(2), '-m+')%a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ', num2str(round(bc(2)))));

Page 12: Seguimiento de Objetos de Colores Con Webcam en Matlab

%set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow');endhold offend% aqui terminan los 2 bucles % detenemos la capturastop(vid); %FLUSHDATA remueve la imagen del motor de adquisicion y la almacena en el bufferflushdata(vid);clear all% borramos todo(como en cualquier programa) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

7.-Concluciones.

Hay que tener en cuenta diversos patrones porque cuando varía la luz ósea disminuye o aumenta no podría llegar a reconocer al objeto.

Algo muy importante es que antes de empezar todo tenemos que asegurarnos de que este instalado el toolbox ‘Image Acquisition’. Ya que sin ello no se podrá llevar a cabo este trabajo.

El trabajo en realidad era seguimiento cualquiera que fuese el objeto, pero para mayor simplicidad optamos en escoger un patrón en realidad existen mucho como por ejemplo identificar un objeto por color, forma, dimensión, etc. Nosotros optamos identificar un objeto por el color.

8.-Bibliografia

http://cnx.org/contents/9061fd10-2fec-426d-a107-8272eb37ab92@2/Webcam_Color_Tracking_in_Matla

http://es.wikipedia.org/wiki/Segmentaci%C3%B3n_(procesamiento_de_im%C3%A1genes)

http://alojamientos.us.es/gtocoma/pid/tema4.pdf