Obtencin y anlisis matemtico bsico de imgenes digitales
para calcular desplazamientos.
Autor: Profesor Vicente Torres Ziga.
1. Objetivo: El alumno comprender las bases y utilizar Matlab para capturar video de una webcam bsica; por medio del video medir el desplazamiento de un objeto. Entender la extensin en el uso del video como instrumento de medicin en diversos arreglos experimentales y en diversas reas de investigacin. 2. Materiales: Una computadora personal (puede ser laptop) con un Gbyte de memoria RAM, una web- cam bsica; instalacin de Matlab 7.5 o superior. Una regla de 30 cm o una referencia mtrica. 3. Introduccin. Un instrumento puede presentar muchas caractersticas, aparte de medir, puede almacenar, desplegar grficamente datos, entre otras funciones. La adquisicin de video asistido por una computadora representa, por s mismo, un instrumento completo, con toda clase de tareas y con la capacidad de escalar fcilmente su software y hardware. Por ejemplo, por medio del anlisis de imgenes se pueden medir variables como cambios de coloracin, contornos, desplazamiento, etc. El video se emplea en reas diversas como son la astronoma, la medicina, el desarrollo de nuevos materiales, entre otras. Adems, gracias a su popularidad en la poblacin general, las cmaras de video y sus imgenes muestran en el mercado diversos formatos de portabilidad y captura; e. g. la captura de un telfono celular pequeo y relativamente barato como lo es un IPhone se basa en un escaneo rpido (microsgundos), esta cmara contrasta con una cmara portable de tamao regular CCD con sistema de enfriamiento destinada a capturar imgenes astronmicas de larga exposicin (minutos hasta horas). Finalmente, las imgenes capturadas pueden ser optimizadas, analizadas, presentadas por medio uso rutinas matemticas variadas. Por ejemplo, el anlisis de Fourier se emplea para limpiar de ruido o comparar un conjunto de imgenes. En podemos resumir, el anlisis matemtico de video digital representa por si solo un instrumento potente de medicin para asistir muchos campos de investigacin. 4. Procedimiento. A) Captura de video por medio de Matlab Se recomienda que el instructor escriba con los alumnos el siguientes comandos de la ventana del promt de Matlab y explique con cuidado las peculiaridades de los comandos. 1) indo=imaqhwinfo % despliega una estructura con la informacin de las cmaras conectadas, se nombra winvideo como la cmara por defecto; se muestra la versin de Matlab en uso; el nombre de la caja de herramientas correspondiente y su versin, en nuestro caso Image Acquisition Toolbox, 3.0 (R2007b). 2) info = imaqhwinfo('winvideo') % Nos permite obtener informacin especfica del dispositivo a utilizar: direccin y nombre de su controlador, etiqueta del identificador. 3) Desde modo, sabemos que podemos comunicarnos con una web-cam; por lo cual podemos seguir procediendo 4) Por ejemplo, podemos obtener una interface grfica amigable. para escoger la cmara, capturar y manipular imgenes. Use el comando: imaqtool, en esta interface encontramos toda la informacin y caractersticas en el disparo, color, formato, etc. en la imagen. 5) Se recomienda que el instructor muestre el funcionamiento de esta interface grfica. Puede escoger algunos parmetros y obtener el video. 6) Tambin se puede capturar video desde la ventana de comandos 7) Finalmente, se muestra la captura video desde esta interface. A continuacin se presenta un script para detectar el movimiento usando Matlab. b) Detector de movimiento usando Matlab Este script de Matlab realiza varias capturas de imgenes a travs de una webcam para luego a travs de una simple resta de stas determinar si existi un cambio en la seal de entrada y determinar si hubo o no movimiento. Al final, este movimiento es asimismo graficado. El instructor puede copiar y pegar este escript, para explicar sus caractersticas y posibles usos en otros instrumentos similares. El estudiante deber contestar el cuestionario para mejorar este script
%%%%%% comienza el script de detector de movimiento close all % cierra todas las ventanas de graficos Matlab clc % limpia la memoria temporal en Matlab vid = videoinput('winvideo', 1); % se determina la camara por defecto y su etiqueta de sistema set(vid,'TriggerRepeat',Inf); % se alistan las variables de disparo y sus parametros vid.FrameGrabInterval = 1; % se inicializa en uno, pues Matlab no acepta el cero para uniciar una rutina, %pues se realciona con la etique de una matriz. Es decir, las matrices de Matlab se inican en uno start(vid); % se enciende la camara y se captura una imagen try media=[]; while(vid.FramesAcquired<=110) % se detiene el proceso despues de capturar 110 cuadros IM = getdata(vid,2); % se crea una matriz de datos IM, donde se guarda la informacion original IMGray = rgb2gray(IM(:,:,1:3)); % se transforma la matriz IM en escala de grises IMbw=im2bw(IMGray,0.5); % se transforma en blanco y negor la matriz, se determinar el umbral del contraste IMneg=imadjust(IMGray,[0 1],[1 0]); % ajuste negativo para la matriz de grises
% Se grafican las diferentes matrices en una sola ventana subplot(2,3,1);imshow(IM(:,:,:,1));title('Entrada Oringina Imagen-Video') subplot(2,3,2);imshow(IMbw);title('Video Blanco y Negro') subplot(2,3,3);imshow(IMGray);title('Video en Escala de Grises') subplot(2,3,4);imshow(IMneg);title('Video de la Imagen Negativa')
%*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* % se escoge un canal de color y se hacen los calculos i1=IM(:,:,:,1); i2=IM(:,:,:,2); i1=rgb2gray(i1(:,:,1:3)); i2=rgb2gray(i2(:,:,1:3)); % en la variable m se guarda la diferencia entre los cuadros. el % comando abs asegurra que siempre sea positiva la diferencia entre % los cuadros, sin importar la direccion del desplazamiento m=abs(double(i1)-double(i2))/256; % se noramliza la matriz. 0 es la etiqueta para el negro, %256 es para el blanco, entre ellos esta toda la gama de grises subplot(2,3,5);imshow(m);title('Movimiento') % aqui se muestra la imagen relacionada con el movimiento sum(sum(m)); % suma todos los elementos de la matriz, filas y luego columnas media=[media sum(sum(m))]; if sum(sum(m))>850 % esta seccion asegura los limites en pixeles donde se capturar la imagen. disp('Movimiento');beep end %*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* end stop(vid); catch stop(vid); end figure plot(media)% grafica la media de m normalizada %%%% fin del escript de de detector de movimiento La grafica del movimiento peridico, de pasar la mano en frente de la cmara se ve en la siguiente imagen.
5. Cuestionario y tareas para el alumno. Se recomienda al instructor que los alumnos realicen las siguientes actividades en equipo dentro del aula o como tarea de una semana de duracin.
1) Cul es el significado del eje-x y el eje-y de la grfica obtenida, no de las imgenes de video. 2) El paralaje puede ser un error en este sistema, explique el porqu 3) Cuntos puntos se capturaron en la grfica?, Qu alteraciones al software o al hardware se requieren para aumentar el nmero de cuadros capturados? 4) En trminos del hardware usado Cul es el lmite la rapidez de captura? 5) Compare este movimiento con el periodo y la amplitud del movimiento de un pndulo simple. Determine la congruencia entre estas dos tcnicas. 6) Sugiera otro mtodo para calibrar este instrumento de medicin de desplazamientos 7) Implemente el comando ginput para evaluar las distancias y desplazamientos dentro de las imagenes; es decir encuentre una regla automtica y lineal que relacione pxeles y metros. 8) Explique tres aplicaciones concretas donde este script sea til 9) Cunto tiempo tarda el script en ejecutarse? 10) Escriba alteraciones en el script que lo optimicen y lo hagan mas flexible al usuario. Recuerde documentar su script 6. Referencias 1) Obligatorio para leer antes de la prctica o en su transcurso Imagen Fundamentos II http://omarsanchez.net/Documents/Imagen_Fundamentos_II.pdf Revisado 10 agosto 2009 2) Libro clasico Gonzlez, R.; Woods, R.; Eddins, S.: Digital Image Processing using Matlab. 2004. 3) Para introducir el tema de adquisicin de imgenes (bases tericas y dispositivos: Adquision de imgenes http://iie.fing.edu.uy/ense/asign/codif/material/transparencias/03_adquisicion.pdf Revisado 10 agosto 2009 4) Pagina con ejemplos de muchos scripts Motion Detection in a video, en el sitio Matlab Central http://www.mathworks.de/matlabcentral/fileexchange/18151 Revisado 10 agosto 2009 5) Un ejemplo en concreto Image capture using Webcam in Matlab http://madan.wordpress.com/2007/03/23/image-capture-using-webcam-in-matlab/