Está en la página 1de 15

INTRODUCCION El uso de cmaras para monitorizacin de espacios es habitual en nuestros das.

El nmero de aplicaciones adems est en constante crecimiento debido a su potencial en aplicaciones de seguridad y asistenciales. En general en las aplicaciones prcticas se deben extraer caractersticas especficas de la imagen que por su particular inters sean de utilidad para las mismas. Por ejemplo en este trabajo el inters radica en averiguar la posicin de objetos ya sean fijos o mviles, para ello una de las caractersticas a extraer es el movimiento dentro de la imagen. Lo primero es decidir el tipo de cmara a utilizar. La caracterstica ms importante que al menos nosotros consideramos es la definicin debido a que mientras mejor definicin tenga ser ms preciso el clculo de la posicin. Para comenzar con el proyecto se opto por hacer uso de algunos comandos de Matlab para la adquisicin de imgenes Comenzaremos utilizando el comando imaqhwinfo para obtener la informacin relacionada con los adaptadores de hardware relacionados a cmaras o dispositivos de adquisicin de video.

El comando nos despliega la existencia de un adaptador: winvideo La versin de Matlab: 7.0 El nombre del toolbox que se utiliza para la adquisicin de imgenes: 1x25 char Y la versin de dicho toolbox: 1.5

Mediante el comando imaqwinfo, pero en esta ocasin especificando el nombre del adaptador se obtiene informacin mas especifica de dicho adaptador.

Para este caso el adaptador solamente tiene 1 dispositivo activo. Para obtener informacin ms detallada del dispositivo, se utiliza el comando imaqwinfo especificando el DeviceID.

Para hacer uso del dispositivo se debe de crear una vinculacin entre Matlab y el dispositivo, esto se logra utilizando el comando videoinput (nombre del adaptador, DeviceID), como se muestra a continuacin. Nombre del adaptador: winvideo DeviceID: 1

Para comprobar que la vinculacin entre Matlab y cmara WEB se efectuo correctamente procedemos a utilizar el comando preview para visualizar el video desde una extensin de Matlab. Preview (Proyecto)

Procederemos a tomar una fotografa, esto se logra mediante la utilizacin del comando getsnapshot,

En Imagen1 se puede apreciar que se tomo una fotografa con el comando antes mencionado la cual se muestra en ycbcr. En Imagen2 se muestra la conversin de ycbr a rgb de la fotografa capturada Para mostrar la imagen captura se utiliza el comando imshow y la muestra en ycbr

Otra funcin que nos permite realizar Matlab es que muestra las resoluciones con los que podemos grabar con nuestra cmara WEB, mediante el comando SupporedFormats

A continuacin mostraremos las distintas resoluciones de las pantallas. YUY2_320X240

Ahora se mostrara la resolucin YUY2_160X120

Para nuestro proyectos obtamos por utilizar la mayor resolucin, para as tener mejor definicin de la imagen por lo cual se utilizara la YUY2_480X640. A continuacin mostramos imgenes del objeto con el que vamos a trabajar el cual es un foco que se encuentra en una pendiente, obtamos por este objeto porque pensamos que sera ms fcil de saber si los datos que obtenemos son los correctos debido a que iran en aumento o decreciendo.

10

Algoritmo para detectar ubicacin de un punto en una imagen fija A continuacin se muestra el algoritmo que se desarrollo para la detectar las coordenadas [x,y] de un objeto en una imagen fija: En el cual se da la explicacin de cada comando despus de % % primero se captura un stream de video usando videoinput, con argumento %de vid=('winvideo', numero de dispositivo, 'formato de la camara'), para averigar % el formato de la cmara utilizamos la funcion imaqtool y este caso el formato %que la cmara admite es YUY y no RGB que es otro formato posible. proyecto=videoinput('winvideo',1,'YUY2_640x480'); %en este caso podemos utilizar alguna de estas dos resoluciones permitidas por %nuestra cmara 640x480 160x120 y optamos por la 640x480 ya que con la de %mas baja de congelaba mucho la cmara web. % a continuacin se configura las opciones de adquisicin de video set(proyecto, 'FramesPerTrigger', Inf); set(proyecto, 'ReturnedColorspace', 'rgb') proyecto.FrameGrabInterval = 1; %framegrabinterval significa que tomara cada 1 frame del stream de video %adquirida con start(proyecto) se activa la adquisicin, pero todavia se toma la %primera foto start(proyecto) % creamos un bucle que puede ser while always o while true en este caso %y como la computadora es una netbook hacemos que despus de 50 frames %adquiridos se salga del bucle para evitar que se iniva while(proyecto.FramesAcquired<=50) % se toma una snapshot del stream y se le almacena en data para trabajar ms %facil data = getsnapshot(proyecto); % ahora vamos a reconocer el color rojo % tenemos que extraer el color rojo % de la imagen en escala de grises de la imagen adquirida en data diff_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 %se usa medfilt2 para filtrar la seal del ruido diff_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 tamao a reconocer se usa bwareopen para descartar %imagen en color rojo de menos de 300 pixeles diff_im = bwareaopen(diff_im,300); % Etiquetamos los elementos conectados en la imagen bw = bwlabel(diff_im, 8); % Ahora hacemos el anlisis del "objeto" detectado(que solo son pixeles rojos) %agrupados de ms de 300 pixeles
11

% Configuramos la regin etiquetada stats = regionprops(bw, 'BoundingBox', 'Centroid'); % mostramos la imagen imshow(data) hold on %este es un bucle para encerrar el objeto rojo en un rectngulo y una cruz en el %centroide 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))))); set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); end hold off end % terminan los 2 bucles % detenemos la captura stop(proyecto); %FLUSHDATA remueve la imagen del motor de adquisicion y la almacena en el buffer flushdata(proyecto); % borramos todo clear all A continuacin se muestras imgenes capturadas donde se puede ver el algoritmo en funcionamiento:

12

A continuacin se muestras imgenes capturadas donde se puede ver el algoritmo en funcionamiento:


Captura 1

Coordenadas [x,y]= [14,20] Esta fue la primer fotografa que se tomo con el algoritmo en la cual se puede observar que te muestra las coordenadas [x,y] donde se encuentra situado el led rojo, ya que en el algoritmo se especifico que el objeto deba ser color rojo y al menos 300 pixeles lo sean, se puede apreciar que las coordenadas si corresponde con las que se muestran al poner el cursor en ese mismo punto se pusieron unos ejes sobre la imagen para que se entienda un poco mejor la direccin de los ejes, tomando como origen la esquina superior izquierda ms adelante se muestrearan otras dos capturas de imgenes con el led en distintas posiciones para corroborar que las coordenadas cambian correctamente.

13

Captura 2

Coordenadas [x,y]= [100,59] Captura

3 Coordenadas [x,y]= [131,91] 14

Conclusiones Al correr el algoritmo notamos que con el color de foco que estaba montado en la tablilla con una trayectoria de pendiente nos daba problemas al momento de captar ese color ya que era muy resplandeciente por lo que optamos por cambiar a un led en color rojo de ltimo momento con el cual obtuvimos resultados ms similares a los esperados de cmo quiera para la segunda arte del proyecto se tiene pensado utilizar la tablilla que fabricamos. Las coordenadas obtenidas son con respecto al origen que es la esquina superior izquierda, lo cual no entendimos porque tomaba ese punto como origen.

15

También podría gustarte