martes, 12 de noviembre de 2013

Detectar movimiento webcam con C#

En esta entrada vamos a ver cómo detectar, de una forma muy primitiva, movimiento en nuestra webcam. Este pequeño programa ha visto a luz, gracias a este excelente artículo donde viene perfectamente explicado cómo detectar movimiento a partir de sustracción de imágenes. De lo que se trata es de lo siguiente:
1º Tomemos dos imágenes consecutivas (en tiempo) de la webcam. Se comparan las imágenes y se almacenan las diferencias. Es decir, por ejemplo, para el píxel (0,0) se resta el valor del color rojo/verde/azul de una imagen menos el de otra (en valor absoluto) y así sucesivamente para todos los píxeles de la imagen.
2º A la matriz con las diferencias, se le aplica una máscara de paso bajo para atenuar el posible ruido.
3º Se comparan los píxeles de la matriz de diferencias con los umbrales máximos que hayamos seleccionado para saber si el píxel "ha sufrido movimiento" o no.
Para realizar todo esto, la forma que hemos estado utilizando hasta ahora de gestionar imágenes en .NET no es muy efectiva, ya que el procesamiento es lento. Lo que vamos a hacer es utilizar métodos que permiten gestionar bloques de memorias (código no administrado). En este artículo, se explica de forma muy fácil, cómo poder gestionarlos.
El resultado de la aplicación es el siguiente:


Fuentes:
Sustracción de imágenes: http://www.biopus.com.ar/txt/textos/Emiliano_Causa__Algoritmos_de_Captura_de_Movimiento.pdf
Manipular píxeles: http://blogs.gamefilia.com/ollydbg/23-05-2009/23032/net-tutorial-7-manipulando-pixels-por-codigo-efecto-blurmotion || http://212.128.130.23/eduCommons/ensenanzas-tecnicas/herramientas-informaticas-para-el-geoprocesado/contenidos/Materiales/Tema2_Imagenes.pdf (apartado scan0)
Descargas:
Bibliotecas de clases para administrar webcam:

Descarga código fuente aplicación:

No hay comentarios:

Publicar un comentario