Condensation
-
Source : Condensation – conditional density propagation for visual tracking ; Isard, M. et Blake, A. ; Int J. Computer Vision, 1998.
template<typename TWeightedParticleCollection, typename Selector, typename Predicter, typename Measure> class Condensation { public : typedef TWeightedParticleCollection WeightedParticleCollection; typedef typename WeightedParticleCollection::value_type::first_type ParticleType; void operator()(Selector const & select, Predicter const & predict, Measure const & measure) { WeightedParticleCollection weightedParticles; while(!finished) { ParticleCollection newWeightedParticles; for(unsigned int i=0; i<weightedParticles.size(); ++i) { // select Particle selectedParticle = select(weightedParticles); // predict Particle predictedParticle = predict(selectedParticle); // measure float weight = measure(predictedParticle); newWeightedParticles.insert(std::make_pair(predictedParticle, weight)); } weightedParticles = newWeightedParticles; } } };
-
measure prend les caractéristiques en compte
-
éventuellement rajouter une étape de mise à jour des caractéristiques
Étape de sélection des particules
template<typename TWeightedParticleContainer> class ParticleSelector { public : typedef TWeightedParticleContainer WeightedParticleContainer; typedef typename WeightedParticleContainer>::value_type::first_type ParticleType; ParticleType operator()(WeightedParticleContainer const & container) const; };
Étape de prédiction
template<typename TParticle> class ParticlePredicter { public : typedef TParticle ParticleType; ParticleType operator()(ParticleType const & particle) const; };
Étape de mesure
template<typename TParticle, typename TWeight> class ParticleMeasure { public : typedef TParticle ParticleType; TWeight operator()(ParticleType const & particle) const; };
Bootstrap
-
Source : Sequential Monte Carlo methods in practice ; Doucet, A et de Freitas, N. et Gordon, N. ; p. 11
ParticleCollection weightedParticles; // Initialize particle collection while(!finished) { ParticleCollection sisWeightedParticles; // Importance sampling for(unsigned int i=0; i<weightedParticles.size(); ++i) { Particle particle = predict(weightedParticles[i]); float weight = evaluateWeight(particle); sisWeightedParticles.insert(std::make_pair(particle, weight)); } ParticleCollection newWeightedParticles; // Selection for(unsigned int i=0; sisWeightedParticles; ++i) { std::pair<Particle,float> selectedWeightedParticle = select(sisWeightedParticles); newWeightedParticles.insert(selectedWeightedParticle); } weightedParticles = newWeightedParticles; }
-
predict contient le modèle de transition
-
evaluateWeight utilise les caractéristiques
SIR
Idem au filtre Bootstrap