3

Je ne connais pas encore le filtrage de Kalman, mais est-il possible d'appliquer un filtre kalman pour la prédiction et le suivi des objets dans les trames vidéo en utilisant MATLAB?Suivi et prédiction du filtre de Kalman pour les trames vidéo

Plus d'infos: J'ai un ensemble séquentiel de 20 images d'une balle sortant d'un pistolet (Une rafale d'images). J'ai fait un peu de traitement d'image sur les cadres et maintenant je suis capable d'indiquer la balle comme un point. Puis-je prédire la position de la balle dans la 21ème image?

NOTE: Je dois le savoir, j'ai besoin de boucler les cadres d'image et de faire une vidéo, puis le mettre pour la prédiction de filtre kalman. Mais est-il possible de faire la prédiction sans faire les images dans une vidéo.

Merci.

Répondre

2

Si vous avez appliqué un filtre de Kalman pour les 20 images de départ, vous comprendrez la réponse suivante.

Si vous ne disposez pas de la 21ème trame.

Puis X(t+1) = A*X(t)+B(u)+Noise

Ceci est la déclaration de prédire, et vous pouvez prédire la valeur au 21e cadre. A = état, atrix, B = matrice de contrôle. X (t) = position de la balle dans la 20ème trame assignée par le filtre kalman.

Si vous n'avez pas la 21ème image, vous pouvez utiliser la valeur ci-dessus pour afficher la puce dans la 21ème image. C'est l'une des principales caractéristiques du filtre Kalman, même si vous n'avez pas de valeur d'observation, vous pouvez toujours prédire la valeur dans le cadre suivant, ce qui est un cas pratique très commun, parce que la plupart du temps les capteurs ne t sélectionner les objets, et il n'y a pas de valeur d'observation.

Et si vous obtenez la 21ème image, alors prenez la valeur d'observation et mettez à jour votre prédiction.

Je recommanderais de consulter le tutoriel de Student dave sur youtube pour le filtre et le suivi de kalman. Et aller au cours de capacité sur Udacity link.

Une fonction de filtre de Kalman pour votre problème aimerait

void Kalman_Filter(float *Zx, float *Zy) 
{ 

    Mat Zt = (Mat_<float>(2, 1) << *Zx, *Zy); 

    //prediction 
    Predict = A*Prior;// +B*a; 

    //covariacne 
    P = P*P*A.t() + Ex; 

    //measurement uopdate 
    Mat Kt = P*H.t()*(H*P*H.t() + Ez); 
    // 
    Prior = Predict + Kt*(Zt - H*Predict); 
    // 
    P = (I - Kt*H)*P; 
    // 
    *Zx = Prior.at<float>(0, 0); 
    *Zy = Prior.at<float>(1, 0); 
    // 
    return; 

} 

ici * Zx et * Zy sont les valeurs d'observation et contient la position x et y de la taille du point balle, que vous avez trouvé.

0

Prédire la position n'est pas très difficile. Vous faites la moyenne des changements de position au fil du temps et l'utilisez pour prédire la nouvelle position. Supposons par exemple que votre balle se trouve à la position 50, 46, 41, 37 dans des trames suivantes avec une fréquence d'images connue (et constante).Les différences de position sont -4, -5, -4. Utilisez une moyenne de vos goûts. (Filtre de Kalman utilise une moyenne exponentielle) Vitesse moyenne est -4,33

position prédite dans la trame suivante est donc 37 + (-4,33) = 32,67 Pixels

D'après ce que je vois, vous donc pas besoin d'un Kalman- Filtre. Si vous observez seulement la position. prédire et mettre à jour, vous n'en avez pas besoin. Un filtre de Kalman brille vraiment quand vous avez plusieurs capteurs qui mesurent des choses liées, ou un comportement compliqué du système. (Dans l'imagerie à haute vitesse, vous pouvez souvent ignorer la gravité.Tout votre mouvement est linéaire, vous avez un système facile.)

Pour répondre à la question: Oui, vous pouvez utiliser un Kalman-Filter pour suivre une balle. Cependant, pour un tel cas d'utilisation simple, il semble que c'est trop.

Questions connexes