IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

fonction de reechantionnage du Filtre particulaire


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 58
    Points : 48
    Points
    48
    Par défaut fonction de reechantionnage du Filtre particulaire
    Bonjour,
    je travaille sur l'implémentation du filtre particulaire, j'ai calculé les poids de 200 particules et j'en suis a la sélection des particules , je cherche donc la fonction de reechantionnage qui me permettra de sélectionner un certain nombre de particules pour en calculer la moyenne. j'aimerai s'il vous plait connaitre l'algorithme qui calcule se reechantionnage en ayant comme entrée les points normalisés des particules.
    Merci.

  2. #2
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Il s'agit juste d'un tirage aleatoire pondéré. De memoire dans ma these on avait fait ca de maniere barbare en calculant un tbaleau des sommes cumulees des probabilités, en tirant au hasard une valeur entre 0 et 1 et en cherchant la case qui contient la premiere valeur strictement superieure.

    En gros is tu as 3 particules de poids 3, 9, 2, leur probabilité respective est
    3/14, 9/14 et 2/14. On obtient un tableau genre :

    [0.214285714][0.857142857][1]

    Tu tires un nombre aleatoire entre 0 et 1 : 0.2342424, il est plus grand que prob[0] et plus petit que prob[1], tu as donc selectionne la particule 1.
    Tu tires 0.99, c'est la particule 2 etc ...

    Tu boucles jusqu'a avoir rempli ton nouveau tableau de particules.

    Dois y avoir mieux mais a l'epoque j'avais fait ca car ca a la bonne idee de se vectoriser pas trop mochement.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Je vous remercie pour la réponse , mais j'avoue que j'ai du mal a comprendre la logique de cette algorithme, je pense qu'il s'agit d'un truc comme ca en matlab:
    function outIndex = residualR(inIndex,q);
    % PURPOSE : Performs the resampling stage of the SIR
    % in order(number of samples) steps. It uses Liu's
    % residual resampling algorithm and Niclas' magic line.
    % INPUTS : - inIndex = Input particle indices.
    % - q = Normalised importance ratios.
    % OUTPUTS : - outIndex = Resampled indices.
    % AUTHORS : Arnaud Doucet and Nando de Freitas - Thanks for the acknowledgement.
    % DATE : 08-09-98

    if nargin < 2, error('Not enough input arguments.'); end

    [S,arb] = size(q); % S = Number of particles.

    % RESIDUAL RESAMPLING:
    % ====================
    N_babies= zeros(1,S);
    % first integer part
    q_res = S.*q'; %'
    N_babies = fix(q_res);
    % residual number of particles to sample
    N_res=S-sum(N_babies);
    if (N_res~=0)
    q_res=(q_res-N_babies)/N_res;
    cumDist= cumsum(q_res);
    % generate N_res ordered random variables uniformly distributed in [0,1]
    u = fliplr(cumprod(rand(1,N_res).^(1./(N_res:-1:1))));
    j=1;
    for i=1:N_res
    while (u(1,i)>cumDist(1,j))
    j=j+1;
    end
    N_babies(1,j)=N_babies(1,j)+1;
    end;
    end;

    % COPY RESAMPLED TRAJECTORIES:
    % ============================
    index=1;
    for i=1:S
    if (N_babies(1,i)>0)
    for j=index:index+N_babies(1,i)-1
    outIndex(j) = inIndex(i);
    end;
    end;
    index= index+N_babies(1,i);
    end
    pourriez vous m'expliquer qu'elle est la sortie de cette algorithme ? par ce que moi j'avais compris que je suis juste sensé sélectionner les particules a grand poids ( au dessus d'un seuil fixé ) et en faire la moyenne ( pour la considérer comme solution)!! pourquoi une telle procédure ne serai pas convenable ?
    merci.

  4. #4
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    le bout d'algo que j'explique correspond au code qui demarre par :

    u = fliplr(cumprod(rand(1,N_res).^(1./(N_res:-1:1))));

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    ouiii c'est exactement cela, mais est ce que vous pouvez me récapituler les étapes en ayant les poids des particules comme entrée jusqu'à la fin de l'algo s'il vous plait !
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/03/2015, 07h47
  2. [Vxi] Fonction par rapport à un filtre
    Par Christophe29 dans le forum Webi
    Réponses: 9
    Dernier message: 14/12/2010, 15h51
  3. Filtre particulaire et segmentation
    Par Roben2010 dans le forum Images
    Réponses: 1
    Dernier message: 25/11/2010, 10h53
  4. Tracking de main/visage : filtre particulaire
    Par milach dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 22/08/2010, 19h09
  5. [VxiR2] Fonction 'il existe' et filtre
    Par bolof dans le forum Deski
    Réponses: 11
    Dernier message: 14/10/2009, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo