jueves, 16 de mayo de 2013

Detección de movimiento

Para el laboratorio de esta semana se trabajo con lo que fue detección de movimientos. El procedimiento que yo realice, consistió en utilizar técnicas de visión computacional utilizadas en tareas anteriores.

Técnicas Utilizadas

  • Escala de grises
  • Filtro
  • Convolucion
  • Binarizacion
  • Diferencia

Procedimiento

Lo primero que hice fue obtener las 2 imágenes con las que se trabajaran, en mi caso utilice open cv solamente para trabajar con la webcam y a partir de aquí poder obtener las 2 imágenes.

El código que utilice para realizar esto fue lo siguiente:

Son 2 funciones en cada una de captura las 2 imágenes las cuales llamo desde el main y les coloque un if para poder saber si se obtuvieron ambas imágenes y también un mensaje de prepararse para la foto ya que preferí no abrir una ventana de la cámara solamente las toma una ves que uno presiona que se tomen las fotos. En caso de que no se tomen las 2 imágenes no se continua con el programa ya que sin las mismas no se puede trabajar. Una ves que se obtienen las imágenes se guardan y se obtiene la informacion relevante que se necesita como lo es el tamaño de ambas imágenes.


Ejemplo de imágenes tomadas de la cámara:

Imagen 1

Imagen 2


Después aplique lo que es escala de grises a ambas imágenes para poder aplicar el resto de los filtros. Para informacion del proceso de escala de grises:




Posteriormente se pasaron las imágenes por el filtro, esto con el fin de intentar eliminar un poco el ruido, de igual forma los detalles del filtro ya se tienen documentados y se pueden encontrar en la siguiente liga:




Después se aplico convolucion a ambas imágenes para obtener los bordes de las imágenes  Informacion de la técnica de convolucion:




Posteriormente aplique binarizacion para remarcar los pixeles importantes y poder sacar la diferencia después. Detalles de la técnica de binarizacion:





Como se puede observar a partir de aquí las imágenes contienen bastante ruido lo que no es favorable para la detección :S.

Después de esto aplicamos diferencia entre las 2 imágenes para obtener el movimiento, en caso de que los pixeles se encuentren en la misma posición anterior quedaran de color negro y en los puntos donde hayan cambiado quedaran de color blanco.





Como lo dije anteriormente existe demasiado ruido lo que me genero bastantes problemas en lo que fue la detección posteriormente se realizo lo que fue marcar el movimiento en si con lineas.


Aquí los resultados fueron muy malos ya que se torno todo rojo y no debería, esto creo se debió al excesivo ruido de las imágenes obtenidas por la cámara lo cual no e encontrado solución para que no salgan con tanto ruido.

Código Completo



Repositorio













1 comentario:

  1. 6 pts por el intento; haz maravillas con los wavelets si piensas pasar el laboratorio.

    ResponderEliminar