Filtre à particules pour le multi de suivi d'objet
Je suis sur les gens de suivi en vision par ordinateur. J'ai observations (blob comme une sortie de blob de détection après soustraction du bruit de fond) et je tiens à en déduire les objets qui ont produit ces observations.
J'ai des difficulté avec certaines filtre de Kalman code. Et c'est tout à fait clair pour moi, mais mon problème est multi-suivi d'objet: mon problème est que, parfois, les observations sont incomplètes ou bruitées. Laissez-moi vous expliquer mieux - Dans un essai avec claire observations, j'ai 1 goutte de chaque personne. Le filtre de Kalman peut m'aider à lisser l'bruyant chemin d'accès de la personne dans une courbe lissée. Mais, ce n'est pas mon problème; Le problème est que, parfois, blob de détection n'est pas parfait et j'ai 2 gouttes pour 1 personne (par exemple si la personne que je veux suivre est s'habiller un t-shirt de la même couleur que l'arrière-plan) ou, parfois, j'ai 1 goutte pour 2 personnes (par exemple, si les 2 personnes sont enlacés eux-mêmes ou sont trop près les uns des autres).
J'ai cherché un peu de théorie et j'ai trouvé beaucoup de documents qui sont en train de résoudre le problème de suivi d'objet avec filtre à particules. J'ai donc étudié le filtre Bayésien, méthode de Monte Carlo, l'importance de l'échantillonnage et c'est un peu clair (je n'ai pas de connaissances en maths sur les probabilités pour tout comprendre, mais l'idée est claire).
De toute façon, je n'ai pas toujours comprendre comment le filtre à particules peut m'aider à détecter les cas où 2 gouttes correspondent à 1 objet ou 1 goutte correspondent à 2 objets.
Quelqu'un peut-il aider dans la compréhension de ce problème?
OriginalL'auteur nkint | 2013-04-08
Vous devez vous connecter pour publier un commentaire.
Bien, tout d'abord, OpenCV Vidéosurveillance projet est un bon moyen de commencer à traiter avec vos questions.
Il n'Association de Données de détection de réponses,comme vous l'avez dit vous.Aussi, il gère les Faux Positifs (2 gouttes pour 1 objet comme vous l'avez dit) par un mécanisme simple (initialisation est basé sur un cadre de seuil et de suppression). L'autre problème, comme vous l'avez mentionné, environ 1 goutte correspondant à 2 objets est généralement appelée occlusion (Le terme de "collision" dans de Vidéosurveillance projet est utilisé, mais il est obsolète de nos jours). La vidéosurveillance est à l'aide d'un filtre à Particules de la mise en place de 3D sur un histogramme de couleur de modélisation pour résoudre cette situation.
Simple à expliquer: Comment pouvez-vous distinguer deux cibles différentes en fonction de leur apparence (vêtements)? Vous pouvez stocker leurs histogramme de couleur et l'utiliser plus tard dans les futurs cadres de,droite? Mais, comment voulez-vous faire de la recherche? Vous pouvez soit rechercher tous les possibles centroïdes dans l'image suivante, ou à l'utilisation permet de dire que 200 aléatoire de points dispersés dans une zone que vous croyez que votre objet est. Ces 200 points sont les particules. Comment fonctionnent-ils? Ils comparent la zone qu'ils sont concentrés et de produire une probabilité que l'objet est là. Plus ils sont proches, plus la possibilité est. À la fin, vous la somme de toutes les possibilités et de trouver la "moyenne" centre de gravité.
Dans des mots simples, les vêtements de chacune des cibles est modélisé à l'intérieur de la fonction de probabilité, et en temps quasi réel les calculs sont réalisés grâce au filtrage particulaire idée.
Enfin, le filtre de kalman est un facteur prédictif, qui permet le suivi en utilisant seulement les données de mouvement.
Il "filtres" des mouvements extrêmes des comportements dans le cas où le filtre à particules à la suite est plus fou qu'il ne devrait l'être. De vidéosurveillance comprend cela aussi. Il est complémentaire à l'apparence et le suivi est plus sophistiqué quand il utilise à la fois.
Modifier: Comment peut-il être utile pour le multi-cible de suivi?
En supposant que nous avons un simple tracker avec les données de l'association disons que les deux objets sont sur le point de "collision". Le tracker fonctionne très bien jusqu'à ce que les objets sont fusionnés. Au cours de la "fusion", le tracker ne voit qu'un seul objet. L'autre est perdu. Après un moment, ils se sont séparés, et le tracker détecte l'ancien objet comme un nouveau! Comment pouvons-nous résoudre ce problème? Commençons avec filtrage particulaire et l'apparence de la modélisation de ce temps:
Avant la fusion, nous avons 2 objets qui se déplacent l'un vers l'autre. Les objets sont indépendants et le tracker peut le voir clairement. Pendant ce temps, une apparence modeler (un mécanisme qui "se souvient" de la façon dont un objet ressemble) est d'apprendre à ces deux objets. Bien sûr, comme les cadres, les deux objets sont légèrement modifier leur apparence. C'est pourquoi, le modeleur a un "taux d'apprentissage", qui lui permet de s'adapter à sa "mémoire" comme le temps passe.
Au cours de la fusion, cette fois, nous avons mis le tracker à être plus patient et ne pas tuer le deuxième objet si facilement comme avant. Le traqueur de laisser les deux objets actifs. Le non-occlusion de l'objet est correctement suivie, comme avant, et l'autre objet de la boîte englobante essaie de déplacer la cible de nouveau. Si nous sommes chanceux,*, après un court laps de temps de l'occlusion (caché) de l'objet apparaîtra de nouveau (split) et de la boîte englobante seront attirés grâce à particules.
*Comme mentionné précédemment, l'occlusion de la cible de la boîte englobante est encore modélisé par le modeleur. Si l'occlusion de la personne qui reste trop longtemps caché, le modeleur oublie l'ancien objet et d'apprendre ce en face de l'occlusion (c'est la non-occlusion de l'objet) ou va errer comme un orphelin boîte (ce qui est appelé la dérive). De vidéosurveillance ne dispose pas d'un mécanisme pour que. Une solution simple pourrait être d'arrêter le modeleur d'adaptation au cours de l'occlusion. Comment? Lorsque les deux cases sont superposées.
ok. beaucoup plus clair à propos de l'histogramme et de l'apparence. maintenant, j'ai plus un seul doute. je peux tout expliquer dans cette phrase: "filtre à particules va me donner un multimodal de distribution et de chaque mode de la distribution est un objet en mouvement", à droite? ou: j'ai particules dans l'image, si je cluster, les centroïdes sont l'objet en mouvement. est-il juste?
Ce lien: opencv.willowgarage.com/wiki/VideoSurveillance ne semble pas fonctionner.
opencv/samples/c/blobtrack.cpp | blobtrack_sample.cpp
Je ne pourrais pas trouver le lien mentionné: opencv.willowgarage.com/wiki/VideoSurveillance
OriginalL'auteur William
Filtre de Kalman ou le filtre à particules ne peut pas traiter les données de l'association de problème (cheminement de multiple problème où plusieurs détections doit être en correspondance avec plusieurs pistes).
Ce que vous avez besoin est de Probabilité Conjointe des Données de l'Association Filtre (JPDAF), qui permettra d'associer à chaque détection avec une piste de manière douce (détection appartient à X % à la première piste, Y % au deuxième piste...).
Le sous-jacent algorithme de suivi peut être que le filtre à particules ou le filtre de Kalman.
Prendre un coup d'oeil à la JPDAF mise en œuvre en C# - mise en œuvre de Kalman et d'un filtre à particules.
À cette époque, le travail, les échantillons sont de Kalman et d'un filtre à particules, JPDAF viendra plus tard - mais il est mis en place et prêt.
Accord.NET de la bibliothèque d'Extensions:
https://github.com/dajuric/accord-net-extensions
OriginalL'auteur dajuric
je pense que le mot clé est "fragmentation". un exemple papier
http://people.csail.mit.edu/cielbleu/pubs/BoseEtalCVPR07Multiclass.pdf
OriginalL'auteur Zaw Lin
Filtre de Kalman sont un arrière-plan soustracteur approche dans ce cas. Il ne peut pas traiter les données de l'association et seul le bruit gaussien.
À la fin j'ai re-mise en œuvre de l'histogramme en fonction filtre à particules activées par l'objet de détections.
Si quelqu'un est intéressé, il suffit de demander en commentaire!
comment avez-vous fait,pouvez-vous me l'expliquer ou de le partager??
Je n'ai pas plus de code, mais il n'est pas difficile à mettre en œuvre dans opencv.. il y a quelques mise en œuvre avec opencv+python sur github
pouvez-vous nous l'expliquer?? De sorte que je doit la mettre en œuvre en c++, opencv. J'ai essayé avec un filtre de kalman, mais je suis absent de la logique.
ce n'est pas compliqué et c'est beaucoup de tutoriel en ligne, juste s'écraser un peu le cerveau. Désolé, mais je n'ai pas le temps en ce moment!
OriginalL'auteur nkint