Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

filtre à particules sous matlab



  1. #1
    tortue36

    filtre à particules sous matlab


    ------

    Bonjour à tous!

    je suis en étudiant en master de microélectronique et je dois réaliser un projet portant sur les filtres à particules.
    L'ennui est que je n'y connais pas grand chose.
    Le but final de ce projet serait de réussir à effectuer de la détection de mouvements sous matlab puis de l'implanter sur FPGA (en vhdl).
    La programmation ne me pose pas vraiment de problèmes mais l'aspect mathématiques est très fort et j'ai du mal à comprendre le principe de ces filtres.

    Un professeur m'a passé un bout de code qui filtre un signal sinusoïdal qui est préalablement bruité et depuis c'est débrouille toi! J'essaye mais si vous pouviez m'aider ce serait sympa. Voici le code:

    Code:
    function projet
    k2 = 1:100;
    x = sin(2*pi*1/100.*k2); % vrais valeurs
    subplot(2,2,1)
    plot(k2,x)
    
    b1= 0.1*randn(k2,1);
    x1= b1 + x;
    subplot(2,2,2)
    plot(k2,x1)
    
    
    N = 200;  % 200 parts
    % init part
    X = zeros(N,1) ; % init autour de zero
    poids = zeros(N,1);
    Xest=zeros(k2,1);
    lambda = 10 ;
    
    for k=1:100;
        % Prediction
        b= 0.1*randn(N,1);
        X= X + b ;
        % observation (distance / vraie valeur)
        for p = 1:N
            d = sqrt((X(p) - x1(k))^2) ;
            poids(p) = exp(-lambda*d);
        end
        poids = poids ./(sum(poids(:)));
        Xest(k) = poids'*X;
        X = resample(X,poids);
    end
    plot(b)
    subplot(2,2,3);
    plot(k2,Xest);
    
    %%%%%%%%%%%%%%%%%%%
    function newPart=resample(Part,w)
    % Part : particules
    % w : poinds associe aux particules
    w=w./sum(w);
    wcum=cumsum(w);
    alea=rand(size(w));
    wcum=wcum./wcum(end);
    d=0.*w;
    newPart=0.*Part;
    for i=1:size(w)
      z=find(alea(i)<wcum);
      ind(i)=z(1);
      newPart(i,:)=Part(ind(i),:);
    end
    J'ai bien compris la partie dite de prédiction qui compare un signal aléatoire à notre signal sinusoïdal.
    Par contre la fonction resample reste obscure...

    Ce que j'essaye de faire en ce moment est acquérir une image, la bruiter, puis la filtrer avec l'algorithme précédent mais j'ai du mal à l'adapter (normal vu que je n'ai pas compris exactement ce qu'il fait!)

    Merci d'avoir pris le temps de me lire. En espérant que quelqu'un puisse m'aider

    -----
    la tortue est lente mais avance surement

  2. #2
    tortue36

    Re : filtre à particules sous matlab

    Me revoilà!

    après avoir étudier la chose plus en détail : voilà ce que je pense à propos du fonctionnement du programme:

    Dans un premier temps on génère une sinusoïde.
    Ensuite on la bruite.
    Dans l'étape de prédiction :
    - on mesure 100 points sur le signal bruité
    - à chacun de ces points on fait une mesure de distance entre un signal aléatoire et le point mesuré(de la sinusoïde bruitée).
    - on attribue un poids à chaque mesure de distance (plus la valeur est proche plus le poids est fort)
    - on reconstitue le signal à l'aide de ses poids
    - on va donc retrouver un signal proche du bruit (ajouté sur la sinusoïde)
    -on fait la moyenne de ce signal => comme c'est un bruit blanc sa moyenne est nulle
    ET paf on retrouve la sinusoïdeee.

    Maintenant voici la question qui tue : comment appliquer ce type d'algorithme à une detection de mouvement (par exemple un cercle se déplace dans une image (fond blanc) de N par N pixels?

    Si quelqu'un pourrait approuver mon explication et si vous avez d'autres pistes pour les filtres à particules n'hesitez pas.

    Merci
    la tortue est lente mais avance surement

  3. #3
    babyshambles

    Re : filtre à particules sous matlab

    Salut a toi.

    Je sais pas si le sujet est encore d'actualité mais n'ayant pas vu de reponse sur le forum je me permet d'essayer d'apporter ma pierre a l edifice. Un filtre a particule en imagerie numerique permet de trouver une particule (ici un cercle) dans un ensemble (ton image). Pour faire simple on envoie dans la scene un ensemble de particule (plein de cercle) et pour tous les cercles que tu a "lancé" (pas trop loin de la position precedente) tu vas calculé un poid (correspondance des couleur a l interieur des cercles que tu a lancé, score de gradient sur le bord des cercle... y en a plein d autre). Et tu retiens celui qui a le plus haut score, ou tu fai une moyenne pondéré. Et tu repars de la. Tu ti des particule, calcul les poid... Tous ce peut marcher en temps reel (25,30 im/sec) suivant la machine, le nombre de particule, la taille des image...

    J espere avoir ete clair et avoir pu t aiguiller un peu. Si ta des soucis hesite pas.

    Bye

Discussions similaires

  1. [Debutant] Filtre Butterworth Matlab
    Par Gui973 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 15/12/2007, 00h02
  2. FFT sous Matlab
    Par mp3490 dans le forum Électronique
    Réponses: 2
    Dernier message: 30/08/2007, 22h19
  3. recherche d'entreprise fabricante de filtre à particules
    Par mile21m dans le forum Électronique
    Réponses: 0
    Dernier message: 05/02/2007, 13h24
  4. Les particules à la sortie du filtre...
    Par iSwitch dans le forum TPE / TIPE et autres travaux
    Réponses: 3
    Dernier message: 04/06/2005, 11h40
  5. filtre sous bande
    Par memed dans le forum Électronique
    Réponses: 0
    Dernier message: 13/05/2005, 16h14
Découvrez nos comparatifs produits sur l'informatique et les technologies.