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

Traitement d'images Discussion :

correlation / image


Sujet :

Traitement d'images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut correlation / image
    bonsoir,

    je dispose d'une image et de sa copie translatée dans une direction donnée. je cherche en utilisant la fonction d'intercorrelation à déterminer ce vecteur de translation. quelqu'un saurait il comment faire? je ne vois pas la relation avec l'intercorrelation.

    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Il me semble que tu cherches plus à comprendre la méthode qu'à l'implémenter en MATLAB (pour l'instant). Je déplace donc dans le bon forum

    Sinon, si tu as l'Image Processing Toolbox, tu peux jeter un oeil à ceci : Image registration

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Par défaut
    Bonjour,

    Ton image de correlation devrait te donner un pic de correlation à l'endroit ou l'objet dans l'image s'est déplacé. En le localisant et en considérant d'autre part le centre de ton image d'origine, tu devrais obtenir ton vecteur de translation.

    J'espère avoir pu t'aider...
    a+

  4. #4
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    bonsoir,
    merci pour votre aide.
    j'ai donc implementé le script de test suivant :
    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
    25
    26
    A=[ 1   2   3   0;
        4   5   6   0;
        7   8   9   0;
        0   0   0   0];
    B=[ 0   0   0   0;
        1   2   3   0;
        4   5   6   0;
        7   8   9   0];
     
    x=0;y=0;z=0;
     
    C=zeros(6);
    D=zeros(6);
     
    C(2:5,2:5)=A;
    D(2:5,2:5)=B;
     
    for i=2:5
        for j=2:5
            x=x+(C(i,j)*D(i+1,j+1));
            y=y+(C(i,j)*C(i,j));
            z=z+(D(i,j)*D(i,j));
        end
    end
     
    t=x/sqrt(y*z);
    j'obtiens donc bien un coef de 1 pour un vecteur de translation de (1,0)

    Retour à Matlab avec deux questions:
    y a-t-il moyen de se passer du "for dans ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i=2:5
        for j=2:5
            x=x+(C(i,j)*D(i+1,j+1));
            y=y+(C(i,j)*C(i,j));
            z=z+(D(i,j)*D(i,j));
        end
    end
    tout comme on s'est passé du for ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i=1:26866;
    vect_bouc1(i)=vect_bouc1(i)-sum(vect_bouc1)/26866;

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par einstein84 Voir le message
    y a-t-il moyen de se passer du "for dans ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = C(2:end-1,2:end-1).*D(3:end,3:end);
    x = sum(x(:));
    Idem pour les deux autres...

    Sinon, as-tu résolu le problème de la compréhension de la méthode ?
    Si oui, je déplacerai cette discussion dans le forum MATLAB

  6. #6
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    merci pour le code. je le modifierais ulterieurement.
    Sinon, as-tu résolu le problème de la compréhension de la méthode ?
    Si oui, je déplacerai cette discussion dans le forum MATLAB
    oui.
    à present j'ai 7 images de 96x96 bits decalées les unes desautres de 1 bit, je dois trouver la trajectoire pour passer d'une image à une autre. j'ai fait ce code:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    % texture:192x192 | camera souris:12x12
    
    % trajectoire: 0,0 ; 1,0 ; 2,1 ; 3,1 ; 3,2 ; 2,3 ; 2,4
    
    % creation de la texture
    
    texture=round(rand(192,192)*255);
    % colormap(gray);
    % image(texture);
    
    i1=texture(1:96,1:96);
    i2=texture(2:97,1:96);
    i3=texture(3:98,2:97);
    i4=texture(4:99,2:97);
    i5=texture(4:99,3:98);
    i6=texture(3:98,4:99);
    i7=texture(3:98,5:100);
    
    j1=zeros(98);   j1(2:97,2:97)=i1;
    j2=zeros(98);   j2(2:97,2:97)=i2;
    j3=zeros(98);   j3(2:97,2:97)=i3;
    j4=zeros(98);   j4(2:97,2:97)=i4;
    j5=zeros(98);   j5(2:97,2:97)=i5;
    j6=zeros(98);   j6(2:97,2:97)=i6;
    j7=zeros(98);   j7(2:97,2:97)=i7;
    
    x1=0;y1=0;z1=0;
    x2=0;y2=0;z2=0;
    x3=0;y3=0;z3=0;
    x4=0;y4=0;z4=0;
    x5=0;y5=0;z5=0;
    x6=0;y6=0;z6=0;
    
    for i=-1:1
        for j=-1:1
            %%%%%%%%%%%%%%%
            for k=2:97
                for l=2:97
                    x1=x1+(j1(k,l)*j2(k+i,l+j));
                    y1=y1+(j1(k,l)*j1(k,l));
                    z1=z1+(j2(k,l)*j2(k,l));
                    
                    x2=x2+(j2(k,l)*j3(k+i,l+j));
                    y2=y2+(j2(k,l)*j2(k,l));
                    z2=z2+(j3(k,l)*j3(k,l));
                    
                    x3=x3+(j3(k,l)*j4(k+i,l+j));
                    y3=y3+(j3(k,l)*j3(k,l));
                    z3=z3+(j4(k,l)*j4(k,l));
                    
                    x4=x4+(j4(k,l)*j5(k+i,l+j));
                    y4=y4+(j4(k,l)*j4(k,l));
                    z4=z4+(j5(k,l)*j5(k,l));
                    
                    x5=x5+(j5(k,l)*j6(k+i,l+j));
                    y5=y5+(j5(k,l)*j5(k,l));
                    z5=z5+(j6(k,l)*j6(k,l));
                    
                    x6=x6+(j6(k,l)*j7(k+i,l+j));
                    y6=y6+(j6(k,l)*j6(k,l));
                    z6=z6+(j7(k,l)*j7(k,l));
                    
                end
            end
    
            t12(i+2,j+2)=x1/sqrt(y1*z1);
            t23(i+2,j+2)=x2/sqrt(y2*z2);
            t34(i+2,j+2)=x3/sqrt(y3*z3);
            t45(i+2,j+2)=x4/sqrt(y4*z4);
            t56(i+2,j+2)=x5/sqrt(y5*z5);
            t67(i+2,j+2)=x6/sqrt(y6*z6);
            %%%%%%%%%%%%%%%
        end
    end
    
    t12
    t23
    t34
    t45
    t56
    t67
    
    %v1=[2-position x du max de t12 dans t12 , 2-position y du max de t12] dans t12
    à priori le resultat est correct. comment pourrais-je faire ce qui est ecrit en rouge?
    merci

    j'ai trouvé: find(A==x)

    la seconde facon de faire:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    % texture:192x192 | camera souris:96x96
     
    % trajectoire: 0,0 ; 1,0 ; 2,1 ; 3,1 ; 3,2 ; 2,3 ; 2,4
    % **************************************************** %
     
    % creation de la texture 
     
    texture=round(rand(192,192)*255);
    % colormap(gray);
    % image(texture);
     
    i1=texture(1:96,1:96);
    i2=texture(2:97,1:96);
    i3=texture(3:98,2:97);
    i4=texture(4:99,2:97);
    i5=texture(4:99,3:98);
    i6=texture(3:98,4:99);
    i7=texture(3:98,5:100);
     
     
    j1=zeros(98);   j1(2:97,2:97)=i1;
    j2=zeros(98);   j2(2:97,2:97)=i2;
    j3=zeros(98);   j3(2:97,2:97)=i3;
    j4=zeros(98);   j4(2:97,2:97)=i4;
    j5=zeros(98);   j5(2:97,2:97)=i5;
    j6=zeros(98);   j6(2:97,2:97)=i6;
    j7=zeros(98);   j7(2:97,2:97)=i7;
     
     
    x1=0;y1=0;z1=0;
    x2=0;y2=0;z2=0;
    x3=0;y3=0;z3=0;
    x4=0;y4=0;z4=0;
    x5=0;y5=0;z5=0;
    x6=0;y6=0;z6=0;
     
     
    for i=-1:1
        for j=-1:1
            %%%%%%%%%%%%%%%
     
            x1=j1(2:end-1,2:end-1).*j2(2+i:end-1+i,2+j:end-1+j);
            x1=sum(x1(:));
            y1=j1(2:end-1,2:end-1).*j1(2+i:end-1+i,2+j:end-1+j);
            y1=sum(y1(:));
            z1=j2(2:end-1,2:end-1).*j2(2+i:end-1+i,2+j:end-1+j);
            z1=sum(z1(:));
     
            x2=j2(2:end-1,2:end-1).*j3(2+i:end-1+i,2+j:end-1+j);
            x2=sum(x2(:));
            y2=j2(2:end-1,2:end-1).*j2(2+i:end-1+i,2+j:end-1+j);
            y2=sum(y2(:));
            z2=j3(2:end-1,2:end-1).*j3(2+i:end-1+i,2+j:end-1+j);
            z2=sum(z2(:));
     
            x3=j3(2:end-1,2:end-1).*j4(2+i:end-1+i,2+j:end-1+j);
            x3=sum(x3(:));
            y3=j3(2:end-1,2:end-1).*j3(2+i:end-1+i,2+j:end-1+j);
            y3=sum(y3(:));
            z3=j4(2:end-1,2:end-1).*j4(2+i:end-1+i,2+j:end-1+j);
            z3=sum(z3(:));
     
            x4=j4(2:end-1,2:end-1).*j5(2+i:end-1+i,2+j:end-1+j);
            x4=sum(x4(:));
            y4=j4(2:end-1,2:end-1).*j4(2+i:end-1+i,2+j:end-1+j);
            y4=sum(y4(:));
            z4=j5(2:end-1,2:end-1).*j5(2+i:end-1+i,2+j:end-1+j);
            z4=sum(z4(:));
     
            x5=j5(2:end-1,2:end-1).*j6(2+i:end-1+i,2+j:end-1+j);
            x5=sum(x5(:));
            y5=j5(2:end-1,2:end-1).*j5(2+i:end-1+i,2+j:end-1+j);
            y5=sum(y5(:));
            z5=j6(2:end-1,2:end-1).*j6(2+i:end-1+i,2+j:end-1+j);
            z5=sum(z5(:));
     
            x6=j6(2:end-1,2:end-1).*j7(2+i:end-1+i,2+j:end-1+j);
            x6=sum(x6(:));
            y6=j6(2:end-1,2:end-1).*j6(2+i:end-1+i,2+j:end-1+j);
            y6=sum(y6(:));
            z6=j7(2:end-1,2:end-1).*j7(2+i:end-1+i,2+j:end-1+j);
            z6=sum(z6(:));
     
            t12(i+2,j+2)=x1/sqrt(y1*z1);
            t23(i+2,j+2)=x2/sqrt(y2*z2);
            t34(i+2,j+2)=x3/sqrt(y3*z3);
            t45(i+2,j+2)=x4/sqrt(y4*z4);
            t56(i+2,j+2)=x5/sqrt(y5*z5);
            t67(i+2,j+2)=x6/sqrt(y6*z6);
            %%%%%%%%%%%%%%%
        end
    end
     
     
    [a12,b12]=find(t12==max(max(t12)));
    [a23,b23]=find(t23==max(max(t23)));
    [a34,b34]=find(t34==max(max(t34)));
    [a45,b45]=find(t45==max(max(t45)));
    [a56,b56]=find(t56==max(max(t56)));
    [a67,b67]=find(t67==max(max(t67)));
     
     
    v12=[2-a12,2-b12]
    v23=[2-a23,2-b23]
    v34=[2-a34,2-b34]
    v45=[2-a45,2-b45]
    v56=[2-a56,2-b56]
    v67=[2-a67,2-b67]
     
    % on reptrouve les points de la trajectoire citée au depart
     
    pt=[0 0;v12;v12+v23;v12+v23+v34;v12+v23+v34+v45;v12+v23+v34+v45+v56;v12+v23+v34+v45+v56+v67]
    la forme que tu m'as indiqué ne donne pas la meme valeur des x y z. et c'est autant plus bizarre qu'on trouve des valeurs de t superieures à 1

    bonjour,
    nouveau probleme plus delicat: imaginons que je compare deux images translatées et dont l'une a tourné d'un certain angle. comment on fait dans ce cas pour trouver le vecteur translation?
    merci

Discussions similaires

  1. coefficient de correlation de deux images
    Par maraval dans le forum Images
    Réponses: 1
    Dernier message: 14/06/2010, 09h53
  2. Inter - Correlation entre Images
    Par Maxchee dans le forum Images
    Réponses: 3
    Dernier message: 29/05/2010, 22h45
  3. Réponses: 3
    Dernier message: 10/12/2008, 00h26
  4. correlation entre images
    Par z_meryem dans le forum Images
    Réponses: 1
    Dernier message: 08/07/2008, 11h44
  5. Correlation entre deux images
    Par bafade dans le forum Images
    Réponses: 5
    Dernier message: 05/02/2008, 07h43

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