¿Cómo puedo comparar dos imágenes de la cámara y saber si hay suficientes diferencias para detectar el movimiento?

18

Quiero usar mi teléfono como un sistema de CCTV para controlar una habitación en mi casa y mostrar una alerta cuando algo se está moviendo.

Por ahora, lo que he logrado hacer es tomar una imagen cada minuto y subirla a mi servidor a través de un script PHP. Ahora, me gustaría comparar la imagen actual y la imagen hace 1 minuto y detectar si alguien entró en la habitación. Básicamente, necesitaría comparar las diferencias de píxeles en la imagen (pero también teniendo en cuenta que una nube puede saludar y cambiar el brillo durante un minuto)

¿Alguien tiene idea de cómo lograr eso o algún documento para leer?

Waza_Be
fuente
44
Hice algo como esto hace años. Mi técnica fue dividir la imagen en secciones, digamos una cuadrícula de 20 * 20, encontrar un valor para el color promedio en cada celda (tomando el color promedio en cada píxel en esa celda) y almacenarlo. Haga lo mismo para la siguiente imagen y si hay suficiente diferencia (dejaré esa tolerancia a usted) en los colores promedio, puede asumir el movimiento. No incurra en la tolerancia tan fina que dará cuenta de los cambios sutiles en la luz o sombras que pasa etc.
1
Aquí hay una publicación interesante sobre el tema que puede encontrar útil codeproject.com/KB/audio-video/Motion_Detection.aspx
CHDK también divide la imagen en una cuadrícula. chdk.wikia.com/wiki/UBASIC/Scripts:_AdaptiveMD Para detectar movimiento y no detectar cambios de iluminación, diría que un cambio en muchas celdas de la cuadrícula no es movimiento, mientras que un cambio en solo unas pocas celdas de la cuadrícula sí lo es.
endolito el

Respuestas:

10

Me parece que lo que estás buscando es la técnica de sustracción de fondo. Con imágenes ruidosas y condiciones de iluminación cambiantes, podría no ser trivial. La técnica actual más avanzada para esto es la representación matricial de bajo rango, pero no requiere dos, sino muchas (~ docenas) de imágenes. Siguen algunos cálculos matemáticos pesados: cada imagen considerada como un vector de píxeles, vectores combinados en una matriz y esta matriz se descompone en una matriz de bajo rango y un remanente. Las columnas de matriz de bajo rango son fondos y el remanente es objetos en movimiento. Hay algunas implementaciones de código abierto, pero solo para la factorización en sí, no completa la tubería de imagen IIRC

Aquí hay un documento y un código para la factorización matricial http://www.ece.rice.edu/~aew2/sparcs.html

Aquí hay una descripción general del blog de CS y un enlace a otro código:

https://sites.google.com/site/igorcarron2/matrixfactorizations

http://nuit-blanche.blogspot.com/search/label/MF

Encuesta de algunas otras técnicas: http://www.vis.uni-stuttgart.de/uploads/tx_vispublications/Brutzer2011-2.pdf

mirror2image
fuente
1
¿Hiciste intencionalmente este CW?
Lorem Ipsum
1
¿Qué significa "CW"?
mirror2image
Ahh, pregunta de wiki. Pensé que sería una buena idea presentar a este nuevo techto ppls haciendo cosas prácticas. Siéntase libre de eliminarlo si no está de acuerdo. También otras personas pueden tener más experiencia con esta tecnología, solo comencé a entrar en ella.
mirror2image
Un CW es una pregunta de la comunidad Wiki. Lo que esto significa es que no obtendrá reputación (en este caso 4x10 = 40) por los votos positivos en su respuesta. Algunas personas intencionalmente hacen sus respuestas de esta manera, pero la mayoría de las veces, es accidental. He revertido esto por ti, para que obtengas tu representante. Ahora son 181 de 126 :)
Lorem Ipsum
5

Recuerde: hay sombras (no solo brillo).

Realmente no me gusta la idea de James Webster, ya que básicamente es reducir la resolución en cada dimensión y comparar las imágenes reducidas (tampoco me gustan los umbrales, son arbitrarios, tienes que probarlos y ajustarlos hasta que obtenga un buen valor y al día siguiente estos valores podrían quedar obsoletos debido a diferentes condiciones climáticas u otros efectos ambientales)

Pero para ser justos, tampoco tengo una muy buena solución. Mi primera idea fue diferenciar cada imagen a una imagen de referencia de la habitación vacía y ejecutar una detección de bordes en la imagen de diferencia. Pero esto también detectaría sombras. Pero supongo que no puedes diferenciar entre las sombras y otros objetos ... al menos no sé cómo. Pero tal vez pueda comparar el resultado después de la detección de borde entre 2 cuadros, ya que las sombras se mueven principalmente lentamente (aún habrá problemas cuando pasen los automóviles o cuando pase una nube)

Philipp Wendt
fuente
Desea detectar algo que cambia de repente. Las sombras no cambiarán mucho de un minuto a otro. Sin embargo, el brillo general del sol sí.
endolito el
2
Las sombras se moverán rápidamente, si hay, por ejemplo, un automóvil que se mueve y deja caer su propia sombra a través de la ventana o deja caer las sombras de algunos otros objetos a la luz de los faros.
Philipp Wendt el
4

¡La técnica de "factorización matricial" NO lo ayudará a hacer su trabajo! El artículo referido por @ mirror2image trata sobre la sustracción del fondo pero NO está basado en la "factorización matricial".

El uso de videos en ejecución para detectar objetos en movimiento (ya sea humanos o vehículos) es un área activa de investigación.

Como principio básico, el sistema estima un fondo estático típico mediante el muestreo de múltiples imágenes y toma una diferencia de energía entre la imagen entrante y el fondo. Si la energía es significativa, el píxel se clasifica como primer plano. Tal conjunto de primer plano le indica si hay una entrada del objeto en el sistema.

La mejor referencia a su trabajo de investigación (y también relativamente más simple si realmente desea implementar) sería: W4 System lo encontrará aquí y vea el documento de Picardi aquí como una encuesta más detallada para otras técnicas en el sistema.

Hay muchos desafíos que se aplican al problema:

  1. La presencia de ruido crea problemas de gran ambigüedad. El enfoque aquí es aplicar un filtro temporal eficiente y considerar la variación del ruido para hacerlo inmune al umbral.

  2. La presencia de sombras crea la ambigüedad de no ser un primer plano ni ser un primer plano. Hay documentos que modelan la distinción entre color e intensidad para distinguir entre sombra y primer plano real.

  3. El fondo puede ser complejo como agitar árboles o mar, etc.

  4. El fondo puede tener una variación de iluminación lenta o repentina donde el fondo "aprendido" anterior se adapta al nuevo.

Uno de los documentos de referencia más conocidos se llama Algoritmo de flor de pared que muestra la mejor manera de combinar varios de estos escenarios para producir una detección robusta de objetos en movimiento.

Dipan Mehta
fuente
2

No sé la solución exacta, pero deberías hacer algún tipo de hash de la imagen; un conjunto de datos más pequeño extraído de la imagen, que es comparable mejor que la imagen completa.

Creo que el histograma de color es una buena opción para ello.

Si divide su imagen en áreas y crea histogramas separados para estas áreas, puede determinar la posición / trayectoria del intruso.


fuente
Muchas gracias, esperaré otras soluciones, si no puedo encontrar una mejor, aceptaré la suya. Para su información, no quiero determinar el camino del intruso, ya que 1 minuto no es suficiente para eso, pero solo enviar una alerta es genial. Gracias.
1
¡Tenga cuidado, algunos intrusos podrían terminar en 1 minuto! Haga una verificación tan frecuente como sea posible. Si su programa es demasiado lento, disminuya la resolución de la imagen.
1
Sí, de hecho, planeo tomar una foto cada 10 segundos, y solo subirla cuando detecte un intruso, o cada minuto cuando no haya problema.
1

Tomar la diferencia dos veces, es decir, la diferencia de diferencias puede ayudar ... así que si la derivada doble de píxeles es mayor que un umbral en algunas regiones, entonces puede llamarlo como alguien ingresó a la sala. El cambio en el brillo dará un gradiente aproximadamente constante en toda la imagen, pero tomar la derivada hessiana o doble dará una buena indicación de movimiento o cambios importantes en la habitación.

KV Vijay Girish
fuente