2011-02-09 1 views
4

J'utilise l'algorithme camshift d'opencv pour le suivi d'objet. L'entrée est prise à partir d'une webcam et l'objet est suivi entre les trames successives. Comment puis-je rendre le suivi plus fort? Si je déplace l'objet à un rythme rapide, le suivi échoue. Aussi, lorsque l'objet n'est pas dans le cadre, il y a de fausses détections. Comment puis-je améliorer cela?Amélioration de l'algorithme camshift en cv ouvert

+0

Je ne pense pas que l'algorithme camshift seul puisse résoudre ce problème. – karlphillip

+1

Le choix d'un algorithme de suivi dépend fortement du type d'objet que vous suivez. Aussi suivez-vous ou localisez-vous simplement l'objet? – count0

Répondre

2

Le suivi d'objets est un domaine de recherche actif en vision par ordinateur. Il existe de nombreux algorithmes pour le faire, et aucun d'eux ne fonctionne à 100% du temps.

Si vous avez besoin de suivre en temps réel, alors vous avez besoin de quelque chose de simple et rapide. Je suppose que vous avez un moyen de segmenter un objet en mouvement de l'arrière-plan. Ensuite, vous pouvez calculer une représentation de l'objet, comme un histogramme de couleur, et le comparer à l'objet que vous trouverez dans l'image suivante. Vous devez également vérifier que l'objet n'est pas trop éloigné entre les images. Si vous voulez essayer un suivi de mouvement plus avancé, alors vous devriez rechercher Kalman Filter.

Déterminer qu'un objet n'est pas dans le cadre est également un gros problème. Premièrement, quels types d'objets essayez-vous de suivre? Gens? Des voitures? Chiens? Vous pouvez créer un classificateur d'objets, qui vous dira si l'objet en mouvement dans le cadre est votre objet d'intérêt, par opposition au bruit ou à un autre type d'objet. Un classificateur peut être quelque chose de très simple, comme une contrainte sur la taille, ou cela peut être très compliqué. Dans le dernier cas, vous devez vous renseigner sur les fonctions qui peuvent être calculées, les algorithmes de classification, tels que les machines vectorielles de support, et vous devrez collecter des images de formation pour les former.

En bref, un tracker fiable n'est pas une chose facile à construire. Supposons que vous trouviez l'objet dans les deux premières trames.

1

À partir de ces informations, vous pouvez extrapoler où vous attendriez l'objet dans la troisième image. Au lieu d'utiliser un algorithme générique find-the-object, vous pouvez utiliser un algorithme plus lent, plus sophistiqué (et donc plus fiable) en le limitant pour vérifier dans le voisinage que l'extrapolation prédit. Ce n'est peut-être pas exactement ce à quoi vous vous attendez (peut-être que le vecteur de vitesse change), mais vous devriez certainement pouvoir réduire la zone contrôlée. Ceci devrait aider à réduire le nombre de fois qu'une autre partie du cadre est identifiée comme étant l'objet (parce que vous regardez une plus petite partie du cadre et parce que vous utilisez un meilleur détecteur de caractéristiques).

Mettez à jour les extrapolations en fonction de ce que vous trouvez et faites une itération pour la trame suivante. Si l'objet sort du cadre, vous retombez dans votre détecteur de caractéristiques génériques, comme vous le faites avec les deux premières images, et essayez à nouveau d'obtenir un "verrou" lorsque l'objet revient à la vue.

Si vous le pouvez, jetez autant de lumière que possible sur la scène physique. Si la scène est sombre, la webcam utilisera une durée d'exposition plus longue, ce qui entraînera plus de flou de mouvement sur les objets en mouvement. Le flou de mouvement peut rendre la tâche très difficile pour les détecteurs de fonctions (bien que cela puisse vous donner des informations sur la direction et la vitesse).

0

J'ai découvert que si vous développez la bordure de la fenêtre de recherche dans camShift, l'algorithme est un peu plus adaptatif aux objets se déplaçant rapidement, bien qu'il puisse présenter certaines irrégularités. essayez de faire 10% de plus la bordure de votre fenêtre et voyez ce qui se passe.

Questions connexes