2012-05-11 10 views
5

Estoy usando Kinect con OpenNI/NITE. OpenNI puede rastrear las manos humanas con la ayuda de NITE. Además, OpenNI puede suavizar la línea de seguimiento de la mano, y estaba tratando de averiguar cómo lo hace.Suavizado en línea para el seguimiento manual de datos usando Kalman Filters

Intenté usar filtros de Kalman, reemplacé la posición de la mano anterior con la posición de la mano estimada de kalman, pero aún así el suavizado en OpenNI es mucho mejor.

Agradecería cualquier pista sobre cómo suavizar los datos en línea o cómo establecer los parámetros en un filtro de Kalman (algo específico para el seguimiento manual, ya que ya sé lo que hacen los parámetros).

Respuesta

4

Usar el filtro de Kalman no es tan fácil como parece. Debe elegir un buen modelo de movimiento, un buen vector de estado y un buen modelo de medición. Para su problema, ya que supongo que hace seguimiento 3D de la posición, no en la orientación (x, y, z posición de las manos en la pantalla) que elegiría el siguiente:

State vector =[x, y, z, v_x, v_y, v_z] 

Update equations: (x,y,z) = (x,y,z)+ (v_x,v_y,v_z)*delta(t) 
velocity would be constant 

También es necesario establecer la covarianza de error correctamente, ya que esto modelará el error de elegir velocidad para que sea constante (lo que no es cierto).

Compruebe esto paper. Eche un vistazo a los Jacobianos necesarios para predecir y actualizar las ecuaciones del filtro. Son importantes. Si los considera identidad, el filtro funcionará, pero solo funcionará con precisión si elige correctamente los Jacobianos W (multiplica Q), H y A. Q y R son diagonales, intente dar valores de manera experimental.

Espero que esto ayude, buena suerte.

+2

Probé este modelo, lo intenté con la aceleración también. Aún así, mientras suaviza la señal en movimiento, cuando la mano se detiene, la fluctuación de fase aún aparece. Además, el modelo en sí mismo parece estar equivocado. Eso es para modelar el movimiento de la mano usando las ecuaciones de movimiento estándar, la mano realmente no sigue eso, ¿o sí? –

0

Here Hay un ejemplo simple que muestra cómo establecer los parámetros de un filtro kalman.

El ejemplo representa una manera simple de probar visualmente las diferentes salidas suavizadas. Verificar los comentarios también me ayudó a entender los diferentes parámetros (ruido, modelo de movimiento, inicialización, etc.).

Espero que ayude, funciona bastante bien, y el código es simple de entender.

Utiliza la implementación de opencv.

Espero que ayude!