J'ai un programme EMGU (emballage OpenCV) qui soustrait l'arrière-plan de
une alimentation de la caméra et des extraits de belles blobs propres.
Maintenant, j'ai besoin de quelque chose qui va suivre ces blobs et les assigner avec des ID.
Des suggestions/bibliothèques?
Merci,
SWsuivi blobs avec OpenCV
Répondre
bien si vous avez plusieurs objets que vous souhaitez vous pouvez essayer de suivre un Particle Filter.
Les filtres à particules "déposent" des particules sur l'image qui ont chacune un certain poids. À chaque pas de temps, ces poids sont ensuite mis à jour en les comparant à la valeur mesurée réelle de l'objet à ce moment-là. Les particules ayant un poids élevé vont alors disposer de plus de particules dans leur direction (en ajoutant une légère partie aléatoire dans la direction) pour le pas de temps suivant. Après quelques pas de temps, les particules se regrouperont autour de la position mesurée des objets. Voilà pourquoi cette méthode est parfois aussi appelé la survie de la méthode plus apte ...
donc cette chose construit un cercle:
Initialization ----> Sampling
> \
/ >
Updating Prediction
< /
\ <
Association
Donc, cela donne une bonne méthode de suivi des objets dans une scène donnée. Une façon de faire un suivi multi-objets serait d'utiliser ce filtre de particules sur tous les objets, ce qui fonctionnerait, mais présente des inconvénients quand vous essayez de donner des ID aux objets et aussi quand les objets se croisent puisque les nuages de particules peuvent perdre un objet et en suivre un autre.
Pour résoudre ce problème, vous pouvez essayer un mélange de particules-filtre (par Vermaak et autres [2003]). Celui-ci suit chacun des objets par un filtre à particules individuel (avec bien sûr moins de particules nécessaires). Un bon article sur ce peut être trouvé ici: http://www.springerlink.com/content/qn4704415gx65315/ (Je peux également vous fournir plusieurs autres choses sur ce point si vous le souhaitez et si vous parlez allemand, je peux même vous donner une présentation que j'ai tenue à ce sujet dans mon université il y a un moment)
EDIT:
oublié de mentionner: Puisque vous essayez de le faire dans OpenCV: pour autant que je sais qu'il ya une implémentation de l'algorithme de condensation (le premier où vous utilisez un filtre de particules sur toute l'image) fait partie de la distribution OpenCV, bien qu'il puisse être un peu dépassé. Il pourrait y avoir de nouvelles façons du filtre à particules dans OpenCV directement, mais sinon vous trouverez beaucoup de résultats sur Google si vous recherchez OpenCV et filtres à particules
Espérons que cela aide ... sinon, s'il vous plaît continuez à demander .. .
Vous pouvez simplement adapter l'un des exemples CV EMGU qui utilise espace de noms vidéosurveillance:
public partial class VideoSurveilance : Form
{
private static MCvFont _font = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0);
private static Capture _cameraCapture;
private static BlobTrackerAuto<Bgr> _tracker;
private static IBGFGDetector<Bgr> _detector;
public VideoSurveilance()
{
InitializeComponent();
Run();
}
void Run()
{
try
{
_cameraCapture = new Capture();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return;
}
_detector = new FGDetector<Bgr>(FORGROUND_DETECTOR_TYPE.FGD);
_tracker = new BlobTrackerAuto<Bgr>();
Application.Idle += ProcessFrame;
}
void ProcessFrame(object sender, EventArgs e)
{
Image<Bgr, Byte> frame = _cameraCapture.QueryFrame();
frame._SmoothGaussian(3); //filter out noises
#region use the background code book model to find the forground mask
_detector.Update(frame);
Image<Gray, Byte> forgroundMask = _detector.ForgroundMask;
#endregion
_tracker.Process(frame, forgroundMask);
foreach (MCvBlob blob in _tracker)
{
frame.Draw(Rectangle.Round(blob), new Bgr(255.0, 255.0, 255.0), 2);
frame.Draw(blob.ID.ToString(), ref _font, Point.Round(blob.Center), new Bgr(255.0, 255.0, 255.0));
}
imageBox1.Image = frame;
imageBox2.Image = forgroundMask;
}
}
- 1. Suivi des blobs avec Microsoft Kinect
- 2. Blobs OpenCV dans une image
- 3. Suivi de rectangles avec opencv
- 4. Détection de blobs en C (pas avec OPENCV)
- 5. Suivi d'objet dans OpenCV
- 6. Opencv Détection de mouvement avec suivi
- 7. Points de suivi Python OpenCV
- 8. OpenCV + cvBlobsLib: les blobs sortent "étirés" sur l'axe des x
- 9. OpenCV suivi de personnes de vue aérienne
- 10. android suivi de coin en utilisant opencv
- 11. Accélérer les blobs POST-ing avec Indy
- 12. Télécharger des blobs avec des métadonnées, noeud
- 13. Suivi d'objets à l'aide de données d'histogramme dans OpenCV
- 14. Blobs sécurisés dans Azure
- 15. Projet OpenCV simple - détection et suivi d'une balle de tennis
- 16. Impression de coordonnées oculaires grâce au suivi OpenCV
- 17. Suivi de mouvement en utilisant Emgu CV (ou OpenCV)
- 18. Suivi du visage dans l'iPhone en utilisant OpenCV
- 19. Linq et blobs lourds
- 20. Google App Engine Blobs
- 21. opencv rendu cvblob
- 22. Git et pointeurs blobs
- 23. BLOBS vide - SQL Server
- 24. Comment sécuriser blobs d'azur
- 25. C++ avec OpenCV OU C# avec aforge.net
- 26. Télécharger/Télécharger les BLOBs Jackrabbit
- 27. Intégration OpenCV + Unity3D
- 28. Git List Commits par Blobs
- 29. Blobs remplis de couleur noire
- 30. blobs d'écriture à la blobstore
ce sont plusieurs problèmes avec l'utilisation de BlobTrackerAuto OpenCV. Il ne fonctionne que sur les images BGR, il est TRES lent, et il n'y a aucun moyen de l'utiliser uniquement pour le suivi des blobs (sans la partie Forground-extraction). –
J'ai implémenté une approche personnalisée pour la détection d'arrière-plan de premier plan pour obtenir de beaux blobs puis couplé avec BlobTrackerAuto (il suffit d'implémenter une interface) et ça marche bien dans mon scénario qui consiste à suivre une souris dans un pool. Le code que je vous ai posté est lent en raison du type de détecteur de premier plan, par exemple Mélange de gaussiennes offrent une meilleure performance. Howewer slow est un concept relatif qui dépend des exigences de votre scénario –