Algorithmes de filtrage particulaire

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

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>