2012-09-20 14 views
7

Cómo puedo decirle a BackgroundSubtractorMOG2 qué píxeles actualizar al modelo de fondo y qué píxeles no.Máscara para BackgroundSubtractorMOG2

Me enfrento al problema cuando hay un objeto ingresado en la escena y se detiene durante unos diez segundos, el objeto será absorbido en el modelo de fondo.

Quería disminuir la tasa de aprendizaje o detener el aprendizaje en torno al objeto detenido en particular, pero ¿cómo puedo hacer eso? ¿Admite BackgroundSubtractorMOG2 el uso de máscara en su función de actualización?

Estoy usando OpenCV 2.4.1.

Gracias, Alvin.

+0

Buena pregunta ... Estoy frente a exactamente el mismo problema. –

+0

No hay ningún mecanismo para la retroalimentación de alto nivel para los algoritmos de resta de fondo OpenCV. Mi sugerencia para una función de actualización algo genérica incluiría una máscara de actualización. – killogre

Respuesta

3

BackgroundSubtractorMOG2 no es compatible con el enmascaramiento de la entrada. Pero, si sabe qué píxeles desea enmascarar, puede enmascarar la salida: digamos que ha llamado al subtractor(input, fg, learningRate); y de alguna manera sabe dónde está el objeto ahora (puede que lo haya estado siguiendo usando el cambio medio o el reconocimiento de patrones) simplemente haga fg |= mask; donde mask es donde, como usted sabe de alguna fuente diferente, el objeto es.

+0

que ayuda a rastrear el primer plano que se está absorbiendo en el fondo. pero esta no es la respuesta que estoy buscando, me gustaría mantener mi modelo de fondo limpio si es posible. –

+1

¿Incluso mi primera oración no es la respuesta que buscas? Si sus objetos son tales que entran y permanecen quietos, el modelo MOG2 no es suficiente para rastrearlos. sería mejor combinar MOG2 para la detección inicial de objetos y algún algoritmo de seguimiento de objetos para rastrearlo después. ¿O no entiendo tu problema? – artm

2

Esto se puede hacer mediante el establecimiento de la tasa de aprendizaje abajo muy baja

es decir:

mog(input, output, 0.00000001);