usar kalman filtro etapas como codigo object image-processing video-processing kalman-filter

object - como - filtro de kalman etapas



Utilice el filtro de Kalman para rastrear la posición de un objeto, pero necesita conocer la posición de ese objeto como una entrada del filtro de Kalman. Que esta pasando? (6)

El objetivo del filtro de Kalman es mitigar el ruido y otras imprecisiones en sus mediciones. En su caso, la medición es la posición x, y del objeto que se ha segmentado fuera del marco. Si puedes segmentar perfectamente la pelota y solo la pelota del fondo para cada cuadro, no hay necesidad de utilizar el filtro Kalman ya que tus medidas en efecto no contienen ruido.

En la mayoría de las aplicaciones, las mediciones perfectas no pueden garantizarse por varias razones (cambio de iluminación, cambio de fondo, otros objetos en movimiento, etc.) por lo que debe haber una forma de filtrar las mediciones para producir la mejor estimación de la pista verdadera .

Lo que hace el filtro de Kalman es usar un modelo para predecir cuál será la siguiente posición suponiendo que el modelo es verdadero, y luego compara esa estimación con la medición real que ingresa. La medición real se usa junto con las características de predicción y ruido para formar la estimación de posición final y actualizar una caracterización del ruido (medida de cuánto difieren las mediciones del modelo).

El modelo podría ser cualquier cosa que modele el sistema que está tratando de rastrear. Un modelo común es un modelo de velocidad constante que simplemente asume que el objeto continuará moviéndose con la misma velocidad que en la estimación anterior. Esto no quiere decir que este modelo no rastreará algo con una velocidad variable ya que las mediciones reflejarán el cambio en la velocidad y afectarán la estimación.

Hay varias maneras de atacar el problema de rastrear múltiples objetos a la vez. La forma más sencilla es usar un filtro de Kalman independiente para cada pista. Aquí es donde realmente comienza a pagar el filtro de Kalman porque si está utilizando el enfoque simple de simplemente usar el centroide de un cuadro delimitador, ¿qué sucede si los dos objetos se cruzan entre sí? ¿Puedes volver a diferenciar qué objeto es el que después de que se separan? Con el filtro Kalman, tiene el modelo y la predicción que ayudarán a mantener la pista correcta cuando otros objetos están interfiriendo.

También hay formas más avanzadas de rastrear múltiples objetos conjuntamente, como un JPDAF .

Estoy tratando de estudiar cómo usar el filtro de Kalman para rastrear un objeto (bola) que se mueve en una secuencia de video por mí mismo, así que por favor explícamelo como si fuera un niño.

  • Mediante algunos algoritmos (análisis de color, flujo óptico ...), puedo obtener una imagen binaria de cada cuadro de video en el que se encuentra el objeto de seguimiento (píxeles blancos) y el fondo (píxeles negros) -> Conozco el tamaño del objeto , centroide del objeto, posición del objeto -> Simplemente dibuje un cuadro delimitador alrededor del objeto -> Finalizar. ¿Por qué necesito usar el filtro Kalman aquí?

  • Ok, alguien me dijo que debido a que no puedo detectar el objeto en cada cuadro de video debido al ruido, necesito usar el filtro de Kalman para estimar la posición del objeto. Está bien. Pero como sé, necesito proporcionar la entrada al filtro de Kalman. Son estado y medida previos.

    • estado anterior (así que creo que es la posición, la velocidad, la aceleración ... del objeto en el cuadro anterior) -> Ok, esto está bien para mí.
    • medición del estado actual: esto es lo que no puedo entender. ¿Qué puede ser la medición? - La posición del objeto en el cuadro actual? Es gracioso porque si conozco la posición del objeto, todo lo que necesito es dibujar un cuadro delimitador simple (rectangular) alrededor del objeto. ¿Por qué necesito filtro de Kalman aquí más? Por lo tanto, es imposible tomar la posición del objeto en el cuadro actual como valor de medición. - El artículo "Seguimiento basado en filtros de Kalman en un sistema de videovigilancia" dice

      La función principal del bloque de filtrado de Kalman es asignar un filtro de seguimiento a cada una de las mediciones que ingresan al sistema desde el bloque de análisis de flujo óptico.

      Si lees el artículo completo, verás que el autor toma el número máximo de blobs y el tamaño mínimo del blob como una entrada al filtro de Kalman. ¿Cómo se pueden usar esos parámetros como medida ?

Creo que estoy en un bucle ahora. Quiero usar el filtro de Kalman para rastrear la posición de un objeto, pero necesito saber la posición de ese objeto como una entrada del filtro de Kalman. Que esta pasando?

Y una pregunta más, no entiendo el término "número de filtro de Kalman". En una secuencia de video, si hay 2 objetos necesitan rastrear -> ¿necesita usar 2 filtros de Kalman? ¿Eso es lo que significa?


Jason ha dado un buen comienzo en lo que es el filtro de Kalman. Con respecto a su pregunta sobre cómo el papel puede usar la cantidad máxima de burbujas y el tamaño mínimo de la gota, este es exactamente el poder del filtro de Kalman.

Una medición no necesita ser una posición, una velocidad o una aceleración. Una medida puede ser cualquier cantidad que pueda observar en una instancia de tiempo. Si puede definir un modelo que prediga su medición en la próxima instancia dada la medición actual, el filtro Kalman puede ayudarlo a mitigar el ruido.

Sugeriría que busque en más materiales introductorios sobre procesamiento de imágenes y visión artificial. Estos materiales casi siempre cubrirán el filtro de Kalman.

Aquí hay un curso SIGGRAPH sobre rastreadores. No es introductorio, pero debería darle una mirada más profunda sobre el tema. http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf


No usas el filtro de Kalman para darte una estimación inicial de algo; lo usa para darle una estimación mejorada basada en una serie de estimaciones ruidosas.

Para que esto sea más fácil de entender, imagine que está midiendo algo que no es dinámico, como la altura de un adulto. Mide una vez, pero no está seguro de la precisión del resultado, por lo que mide de nuevo durante 10 días consecutivos, y cada medición es ligeramente diferente, por ejemplo, a unos pocos milímetros de distancia. Entonces, ¿qué medida debe elegir como el mejor valor? Creo que es fácil ver que tomar el promedio le dará una mejor estimación de la altura real de la persona que usar una sola medición.

OK, pero ¿qué tiene eso que ver con el filtro de Kalman?

El filtro de Kalman está tomando esencialmente un promedio de una serie de mediciones, como las anteriores, pero para sistemas dinámicos . Por ejemplo, digamos que está midiendo la posición de un corredor de maratón a lo largo de una pista de carreras, utilizando la información proporcionada por una unidad transmisora ​​GPS + conectada al corredor. El GPS te da una lectura por minuto. Pero esas lecturas son inexactas, y desea mejorar su conocimiento de la posición actual del corredor. Puedes hacer eso de la siguiente manera:

Paso 1) Usando las últimas lecturas, puede estimar la velocidad del corredor y estimar dónde estará en cualquier momento en el futuro (esta es la parte de predicción del filtro de Kalman).

Paso 2) Siempre que reciba una nueva lectura de GPS, haga un promedio ponderado de la lectura y de su estimación obtenida en el paso 1 (esta es la parte de actualización del filtro de Kalman). El resultado del promedio ponderado es una nueva estimación que se encuentra entre la posición pronosticada y la medida, y es más precisa que cualquiera de las dos.

Tenga en cuenta que debe especificar el modelo que desea que use el filtro de Kalman en la parte de predicción. En el ejemplo del corredor de maratón, puede usar un modelo de velocidad constante.


En la aplicación de visión, es común usar los resultados en cada cuadro como medida, por ejemplo, la ubicación de la bola en cada cuadro es una buena medida.


En el caso de que puedas encontrar la pelota exactamente en cada cuadro, no necesitas un filtro de Kalman. Solo porque encuentres algún blog que probablemente sea el balón, no significa que el centro de ese blob será el centro perfecto de la pelota. Piense en eso como su error de medición. Además, si selecciona el blog equivocado, usar un filtro de Kalman ayudaría a evitar que confíe en esa medición equivocada. Como dijiste antes, si no puedes encontrar la pelota en un marco, también puedes usar el filtro para estimar dónde es probable que esté.

Estas son algunas de las matrices que necesitará, y adivino cuáles serían para usted. Como la posición xey del balón es independiente, creo que es más fácil tener dos filtros, uno para cada uno. Ambos se verían así:

x = [posición; velocidad] // Esta es la salida del filtro P = [1, 0; 0, 1] // Esta es la incertidumbre de la estimación, no estoy muy seguro de lo que debe comenzar, pero convergerá una vez que se esté ejecutando el filtro. F = [1, dt; 0,1] cuando haces x * F, esto va a predecir la próxima ubicación de la pelota. Tenga en cuenta que esto supone que la bola sigue moviéndose con la misma velocidad que antes, y simplemente actualiza la posición. Q = [0,0; 0, vSigma ^ 2] Este es el "ruido de proceso". Esta es una de las matrices que sintonizas para hacer que el filtro se preforma bien. En su sistema, la velocidad puede cambiar en cualquier momento, pero la posición nunca cambiará sin que la velocidad sea la que la cambió. Esto es confuso. El valor debe ser la desviación estándar de lo que podrían ser esos cambios de velocidad. z = [posición en x o y] Esta es su medida H = [1,0; 0,0] Así es como su medida se aplica a su estado actual. Como solo mide la posición, solo tiene un 1 en la primera fila. R = [?] Creo que solo necesitarás un escalar para R, que es el error en tu medida.

Con esas matrices deberías poder conectarlas a las fórmulas que están en todas partes para los filtros de Kalman.

Algunas cosas buenas para leer: Kalman filter demo Otra genial en, lea la página vinculada en el tercer párrafo


Tuve esta pregunta hace unas semanas. Espero que esta respuesta ayude a otras personas.

  • Si puede obtener una buena segmentación en cada cuadro (toda la bola), no necesita usar el filtro kalman. Pero la segmentación puede proporcionarle un conjunto de blobs no conectados (solo algunas partes de la bola). El problema es saber qué partes (blobs) pertenecen al objeto o son solo ruido. Usando el filtro kalman podemos asignar blobs cerca de la posición estimada como partes del objeto. Por ejemplo, si la bola tiene 10 píxeles de radio, las burbujas con una distancia superior a 15 no se deben considerar como parte del objeto.
  • El filtro de Kalman usa el estado anterior para predecir el estado actual. Pero, usa la medición actual (posición del objeto actual) para mejorar su próxima predicción . Por ejemplo, si un vehículo está en la posición 10 (estado anterior) y va con una velocidad de 5 m / s, el filtro kalman predice la posición siguiente en la posición 15. Pero si medimos la posición del objeto, encontramos que el objeto está en la posición 18. Para mejorar la estimación, el filtro kalman actualiza la velocidad a 8 m / s.

Como resumen, el filtro kalman se usa principalmente para resolver el problema de asociación de datos en el seguimiento de videos. También es bueno estimar la posición del objeto, porque tiene en cuenta el ruido en la fuente y en la observación.

Y para tu última pregunta, tienes razón. Corresponde al número de objetos a seguir (un filtro de kalman por objeto).