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

MATLAB Discussion :

Filtrer les valeurs différentes d'un vecteur


Sujet :

MATLAB

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut Filtrer les valeurs différentes d'un vecteur
    Bonjour a tous.

    Je viens de trouver un code qui permet de mesurer la valeur d'un déplacement en x et en y en faisant une corélation de 2 images.
    Ce code fonctionne parfaitement, je l'ai testé, mais mon problème c'est que ce code n'est pas commenté, et j'ai énormément de mal a le comprendre.

    Est ce que vous pourriez m'aider a le traduire en langage plus explicite? au moins les grandes ligne? Parce que la je suis paumé!!!

    MErci beaucoup.

    Voici mon code:

    La fonction principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     function [tx,ty] = register(imas1,imas2,t)
      corr = phase_correlation(imas1,imas2);
      if (max(max(abs(corr)))>t)
          max(max(corr));
          [k,l] = find(corr == max(max(corr)));
          tx = round(size(corr,1)/2-k+1);
          ty = round(size(corr,2)/2-l+1);
      else
          tx = 0;
          ty = 0;
      end
    Cette fonction fait appel a la fonction phase_correlation dont voici le code ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    function ima = PhaseCorrelation(ima1,ima2)
     
    s1 = size(ima1);
    s2 = size(ima2);
     
    s = max(s1,s2);
    sx = s(1);
    sy = s(2);
    image1 = zeros(sx,sy);
    image1(sx/2-s1(1)/2+1:sx/2+s1(1)/2,sy/2+1-s1(2)/2:sy/2+s1(2)/2) = ima1;
    H1 = hamming(sx);
    H2 = hamming(sy);
    H = H1*H2';
    image1 = image1.*H;
    image2 = zeros(sx,sy);
    image2(sx/2-s2(1)/2+1:sx/2+s2(1)/2,sy/2+1-s2(2)/2:sy/2+s2(2)/2) = ima2;
    image2 = image2.*H;
    f1 = fft2(fftshift(image1));
    f1 = f1./abs(f1);
    f2 = fft2(fftshift(image2));
    f2 = f2./abs(f2);
    corr = fftshift(ifft2(f1.*conj(f2)));
    ima = abs(corr);
    Encore Merci beaucoup
    Thomas

  2. #2
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Je ne commenterais pas le code, mais quelles sont les lignes qui te posent problème ?
    As-tu trouver l'utilité de certaines ?
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    Bonjour

    Apres avoir compilé et recompilé ce programme, j'ai pigé comment il fonctionne dans son ensemble, mais il ya a tjs des subtilités que je n'arrive pas a comprendre.

    Par exemple, dans la premièr partie, que signifie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     if (max(max(abs(corr)))>t)
          [k,l] = find(corr == max(max(corr)));
    Quel est l'interet d'appeller 2 fois la valeur max?

    et dans la seconde partie que signifient les lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    image1(sx/2-s1(1)/2+1:sx/2+s1(1)/2,sy/2+1-s1(2)/2:sy/2+s1(2)/2) = ima1;
    image2(sx/2-s2(1)/2+1:sx/2+s2(1)/2,sy/2+1-s2(2)/2:sy/2+s2(2)/2) = ima2;
    Je vais essayer de le commenter parfaitement d'ici la fin de ce week end et si poster ce que je pense sur le forum.
    Si quelqu'un pouvais jetter un oeil pour etre sur que je n'ai pas fait de contre sens, ca serait vmt sympa.

    Merci beaucoup en tout cas.
    Thomas

  4. #4
    Membre habitué Avatar de larimoise
    Inscrit en
    Octobre 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 220
    Points : 197
    Points
    197
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (max(max(abs(corr)))>t) [k,l] = find(corr == max(max(corr)));
    max(max(A)) permet d'avoir le max d'une matrice A.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    image1(sx/2-s1(1)/2+1:sx/2+s1(1)/2,sy/2+1-s1(2)/2:sy/2+s1(2)/2) = ima1; 
    image2(sx/2-s2(1)/2+1:sx/2+s2(1)/2,sy/2+1-s2(2)/2:sy/2+s2(2)/2) = ima2;
    ce code permet d'avoir une partie de la matrice.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    >> A =
     
         1     2     3
         4     5     6
         7     8     9
        10    11    12
     
    >> A(1:4,2:3)
     
    ans =
     
         2     3
         5     6
         8     9
        11    12
    A+
    MATLAB Version 7.13.0.564 (R2011b)
    Microsoft Visual studio 2010
    LabView 2013 service pack1

  5. #5
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Bonjour,

    la fonction max(A) calcule les maxima par colonne si A est une matrice 2D, donc elle envoie un vecteur ligne qui contient les max de chaque colonne, et pour determiner le max de A il faut encore calculer le max de ce vecteur.
    mais aussi tu peux faire max(A( : )) au lieu de max(max(A))

    image1(sx/2-s1(1)/2+1:sx/2+s1(1)/2,sy/2+1-s1(2)/2:sy/2+s1(2)/2) = ima1;
    image2(sx/2-s2(1)/2+1:sx/2+s2(1)/2,sy/2+1-s2(2)/2:sy/2+s2(2)/2) = ima2;
    c'est pour copier la matrice ima1 exactement au milieu de la matrice image1
    idem pour ima2
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    OK, merci beaucoup.
    Ca me rend bien service

    A bientot
    Thomas

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    Bonjour a tous,

    Désolé de revenir sur ce sujet apres si longtemps, mais je n'ai aps eu trop le temps de bosser dessus depuis un petit moment.
    Enfin bref, j'ai encore quelques questions sur ce code.
    J'ai passé pas mal de temps a chercher a comprendre comment fonctionnait ce programme, et j'avoue etre un peu perdu.
    JE comprend le code, mais je ne comprend pas trop le principe de la correlation de phase. J'ai trouvé des dizaines de documents associés a ce sujet, mais aucun appliqué a l'image processing et au dépalcement d'image. Je ne comprend pas comment fait ce programme pour obtenir un déplacement.

    Est ce que quelqu'un pourrait éclairer ma lenterne?

    Merci beaucoup d'avance.
    Thomas

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Points : 88
    Points
    88
    Par défaut
    ce que je connais c'est comment calculer la correlation entre les composantes dans un espaces quelconque:
    cor(Xk,Xd)=cov(Xk,Xd)/(ecarttype(Xk)ecarttype(Xd))
    cov(Xk,Xd) : matrice de co-variance

  9. #9
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    hanane78: Tu vas être le nouveau champion du forum toi...
    Ce n'est même pas la question posée !

    totoc1001: et "phase correlation" te donnes des pistes .
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    OK, lol.Merci du renseignement
    Mais comme je le dis dans mon message, j'ai déja cherché sur google, et j'ai trouvé des dizaines de documents sur la corrélation de phase, mais ts expliqué par des formules mathématiques et jamais associé a un déplacement d'un pixel par rapport a un autre. C'est pourquoi j'ai demandé de l'aide, parce que les math et moi...
    Je vais continuer a investiguer de ce coté la ;-)

    Thx
    Thomas

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/09/2008, 16h31
  2. Trouver les valeurs uniques d'un vecteur
    Par Ptinéwik dans le forum MATLAB
    Réponses: 3
    Dernier message: 21/01/2008, 16h14
  3. extraire les valeurs différentes d'une colonne
    Par mementox dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 01/12/2007, 16h06
  4. lister les valeurs différentes entre 2 plages de cellule
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/06/2007, 11h42
  5. [vba-e] faire ressortir les valeurs différentes d'une sélection
    Par legillou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/03/2007, 17h19

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