2009-09-01 17 views
10

Tengo un video de alimentación. Este video contiene varias luces parpadeando a diferentes velocidades. Todas las luces son del mismo color (todas son LED infrarrojas). ¿Cómo puedo detectar la posición y la frecuencia de estas luces parpadeantes?OpenCV: detectar luces parpadeantes en una alimentación de video

Descargo de responsabilidad: soy extremadamente nuevo en OpenCV. Tengo una copia de Learning OpenCV, pero me resulta un poco abrumador. Si alguien pudiera explicar una solución en terminología OpenCV, sería muy apreciado. No espero que se escriba el código para mí.

Respuesta

8

Umbral de cada imagen en la secuencia con un umbral que hace que el LED: s visible. Si puede limitarlo con un umbral que solo mantiene el LED y elimina el fondo, entonces está más o menos terminado, ya que todo lo que necesita hacer ahora es realizar un seguimiento de cada posición que ha visto un LED y contar con qué frecuencia ocurre .

Como paso intermedio, si hay "ruido de fondo" en la imagen de umbral sería el uso de la erosión para eliminar pequeños errores, y luego tal vez se dilatan para "agujeros estrechos" en las manchas esté interesado.

Si la escena es estática, también puede hacer un modelo de fondo simple tomando la mediana de algunos cuadros y eliminando la imagen mediana resultante de cualquier marco y umbral. Las cosas que han cambiado (sus LED) aparecerán más fuertes.

Si la escena se está moviendo, no veo otra solución (fácil) que asegurarse de que el LED sea lo suficientemente brillante como para poder utilizar el enfoque de umbral indicado anteriormente.

En cuanto a OpenCV: si sabes lo que quieres hacer, no es muy difícil encontrar una función que lo haga. La parte difícil es encontrar un método para resolver el problema, no la codificación real.

+0

¡Muchas gracias por los consejos! ¡Esto ciertamente ayudará! –

1

Si los leds están estacionarios, el problema es mucho más simple que cuando se están moviendo. Suponiendo que son estacionarios, una solución para encontrar la frecuencia podría ser simplemente mantener un vector o una matriz para cada ubicación de píxeles en la que almacena los valores de ese píxel, preferiblemente después del preprocesamiento descrito por kigurai, durante un período de tiempo determinado. Luego puede calcular la transformada de Fourier 1D de esos vectores de valores y encontrar la frecuencia de tierra como el primer componente significativo después del pico de CC. Si el pico DC es demasiado bajo, significa que no hay led allí.

Espero que este problema todavía sea algo real, y que mi solución tenga sentido.

+1

No es que su respuesta sea incorrecta, pero para encontrar la frecuencia de un led parpadeante creo que las transformadas de Fourier pueden ser excesivas. Simplemente, contar el número de fotogramas "desactivado" y el número de fotogramas "activado" debería dar un buen resultado, creo, aunque eso depende de qué tan "limpia" sea la señal. –

Cuestiones relacionadas