viernes, 9 de enero de 2009

Diseño de la solución del sistema para procesamiento continúo de imágenes.


Para dar solución al problema de la adquisición continua de imágenes se procedió a crear dos soluciones, la primera solución fue crear un archivo de videos tomados con una cámara Samsung de 5 megapixeles, estos videos simularan a un robot móvil el cual sigue una trayectoria en un entorno cerrado a través de un pasillo en entornos no controlados ,esta cámara fue colocada sobre una silla con ruedas la cual se encontraba a una altura de 47cm la cámara fue coloca en dirección al horizonte y ubicada paralela a esta ,se tomo el programa que se realizo para el procesamiento de fotos de pasillos y caminos alternativos y se le agrego un pequeño código para que tomara muestras cada cierta cantidad de imágenes del video(Frames),esto debido a que la velocidad a la que circulara el móvil es bastante pequeña y debido a que el video es de aproximadamente de 30 frames por segundo, no se considero la necesidad de hacer un procesamiento de toda esta cantidad de imágenes ya que tomara de mucha carga computacional siendo esto totalmente innecesario, debido que la información por frame que cambia en esa pequeña cantidad de tiempo es muy poca y no será de mucha utilidad ala hora de guiar al robot o ubicar los caminos alternativos asi que como solución a esto se propone el muestreo de las imágenes cada cierta cantidad de frames.
Adquisición de imágenes y video con Matlab

“Pasos para la adquisición de imágenes:

Creación: Crear un objeto de entrada de vídeo

Configuración: Definir las propiedades del objeto y visualizar propiedades de la configuración

Adquisición: Se adquieren datos del objeto de entrada de vídeo

Finalización: Se borra el objeto de entrada de vídeo que ha sido
Creado”
Tomado de Http:omarsanchez.net/Documents/Imagen_Fundamentos_II.pdf
A continuación se observa el código agregado para el muestreo de frames.
Clc

obj= mmreader('puerta1.mpg') cargamos el video
g=0;variable auxiliar
numFrames = get(obj, 'numberOfFrames');extraemos el numero de frames
if numFrames > 50
Fra = 50; linitamos el numero de frames que queremos procesar
else
Fra= numFrames;
end

for i=1: Fra ciclo for para cada frame a procesar

g=3*i; % en esta parte indicamos cada cuatas frames hacer el %%procesamiento

if(g< numFrames )
RGB = read(obj,g); guardamos la frame para su respective procesamiento


RGB = imresize(RGB, [300 400]); %B devuelve la imagen que es la escala veces el tamaño de la entrada A.
I = rgb2gray(RGB); % convert to intensity
BW = EDGE(I,'canny',[0.1 0.2],2); % extract edges
Continua el mismo programa anterior….
end


la segunda solución fue mediante la utilización de una web-cam de 600*800 ubicada con las mismas características mencionadas en la solución 1,solo que se tomara cada frame que se adquiera de la cámara web cada 1.2350 segundos aproximadamente que es el tiempo que le toma al programa el procesamiento de cada imagen, al realizar pruebas se obtuvo que este es suficiente tiempo para que la imagen siguiente le dote de información nueva al sistema para hacer las correcciones necesarias de posición o de ubicación del camino.

A continuación se observa el código para la obtención de imágenes en tiempo real con cámara web.
vid = videoinput('winvideo',1);% Define objeto para adquirir imagen
preview(vid);% muestra el video
for i=1:30 % indico al programa que es para 30 frames

RGB = getsnapshot(vid);% capturo la imagen en ese instante t del video.


RGB = imresize(RGB, [300 400]); %B devuelve la imagen que es la escala veces el tamaño de la entrada A.
I = rgb2gray(RGB); % convert to intensity
BW = EDGE(I,'canny',[0.1 0.2],2); % extract edges
Continua el mismo programa...

Se observa que solo fue necesario cambiar las cabeceras del programa anterior para la adquisición continua de imágenes.

No hay comentarios: