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

Images Discussion :

translation d' image


Sujet :

Images

  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 translation d' image
    bonjour,
    j'ai implementé grace à cette formule, (merci zoop) un algorithme qui est sansé me donner le vecteur de trans lation d'une image.
    ce code fonctionne à perfection si je me deplace d'un seul pixel mais commence à donner des erreurs au delà, et je n'arrive pas à identifier le probleme.
    voici le dit 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
     
    % **************************************************** %
     
    clear all
     
     
     
     
    texture=imread('image\monochrome\IM1.jpg');
     
    % colormap(gray);
    % image(texture);
     
     
    i1=texture(1:200,1:200);
    i2=texture(1:200,1:200);
     
    i1=1*(i1-moy(i1));
    i2=1*(i2-moy(i2));
     
    i1=i1.^1;
    i2=i2.^1;
     
    %image(i1)
    % insertion des precedentes matrices dans des matrices de dim n+2 afin de
    % permettre de traiter les pixels aux limites
    pas=20;
     
    j1=zeros(length(i1)+2*pas);   j1(pas+1:length(i1)+pas,pas+1:length(i1)+pas)=i1;
    j2=zeros(length(i1)+2*pas);   j2(pas+1:length(i1)+pas,pas+1:length(i1)+pas)=i2;
     
    % initialistation des termes x, y, z
    x1=0;y1=0;z1=0;
     
    % recherche du max du produit de convolution. la position de celui-ci
    % traduit le vecteur de translation des l'image2 par rapport à l'image1
     
    for i=-pas:pas
        for j=-pas:pas
            %%%%%%%%%%%%%%%
            for k=4*pas+1:length(i1)-2*pas
                for l=4*pas+1:length(i1)-2*pas
                    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));
     
                end
            end
     
            t12(i+pas+1,j+pas+1)=x1/sqrt(y1*z1);
            %%%%%%%%%%%%%%%
        end
    end
    surface(t12)
    % position du max du produit de correlation
     
    [a12,b12]=find(t12==max(max(t12)));
    A=[pas+1,pas+1]-[a12,b12]
    max(max(t12))
    explication du code:
    je charge d'image
    j'en prends deux parcelles eloignées l'une de l'autre de cerais pixels (dans l'exemple ci dessus elles sont identiques)
    les couleurs de l'images etant proches che clcule l'ecart à la moyenne de chaque image.
    j'eleve l'image à une certaine puissance pour augmenter le contrast (ici c'est à la puissance 1)
    je fixe un pas maximal de translation des deux images (bien evidemment il faut que la translation que l'ai defini avant soit inferieure ou egale à ce pas
    je met les deux images dans deux matrices plus lages du pas de chaque coté
    je calcule la matrice comprenant les produits de correlation de l'image 1 par l'image 2 tranlatée de mois le pas à plus le pas selon x et y. je ne prends en comte que les points compris entre + le pas et la dimentions de l'image moins le pas.
    la poisition du max de la matrice du produit par rapport au centre donne le vecteur de translation.
    le HIC est que si j'impose un pas de 1 c'est bon, j'obtiens un vecteur nul pour les deux images identiques, mais plus j'augmente le pas, plus il y a une erreur sur ce vecteur comment remedier à ça?
    merci.

    Je joint l'image avec laquell j'ai fait l'essai car le contrast de l'image influence le resultat.

    [edit:]
    Je pricise:
    si je chage la premiere commande, au lieu d'importe une image je cree une matrice de Random, le resultat est juste:
    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
     
     
    clear all
     
     
     
    % creation de la texture : image monchrome de 256bit de dimension 192x192
     
    %texture=imread('image\monochrome\IM1.jpg');
    texture = round(rand(500)*250);
    % colormap(gray);
    % image(texture);
     
    % generation des images prises par la souris: clichets de la precedente 
    % image  decalés d'un pixel les un des autres, positionnées conformément 
    % à la trajecoire sus-citée
     
    i1=texture(1:200,1:200);
    i2=texture(10:209,3:202);
     
    i1=1*(i1-moy(i1));
    i2=1*(i2-moy(i2));
     
    i1=i1.^1;
    i2=i2.^1;
     
    %image(i1)
    % insertion des precedentes matrices dans des matrices de dim n+2 afin de
    % permettre de traiter les pixels aux limites
    pas=10;
     
    j1=zeros(length(i1)+2*pas);   j1(pas+1:length(i1)+pas,pas+1:length(i1)+pas)=i1;
    j2=zeros(length(i1)+2*pas);   j2(pas+1:length(i1)+pas,pas+1:length(i1)+pas)=i2;
     
    % initialistation des termes x, y, z
    x1=0;y1=0;z1=0;
     
    % recherche du max du produit de convolution. la position de celui-ci
    % traduit le vecteur de translation des l'image2 par rapport à l'image1
     
    for i=-pas:pas
        for j=-pas:pas
            %%%%%%%%%%%%%%%
            for k=4*pas+1:length(i1)-2*pas
                for l=4*pas+1:length(i1)-2*pas
                    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));
     
                end
            end
     
            t12(i+pas+1,j+pas+1)=x1/sqrt(y1*z1);
            %%%%%%%%%%%%%%%
        end
    end
    surface(t12)
    % position du max du produit de correlation
     
    [a12,b12]=find(t12==max(max(t12)));
    A=[pas+1,pas+1]-[a12,b12]
    max(max(t12))
    %V=[5-a12,6-b12]
    Images attachées Images attachées  

  2. #2
    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
    j'initialisais les x,y,et z au mauvais endroit d'ou l'erreur

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

Discussions similaires

  1. rotation et translation d'image
    Par diskostu dans le forum C
    Réponses: 1
    Dernier message: 30/04/2011, 01h25
  2. [Débutant] Translation dans une image sans en changer la taille
    Par MxBen9 dans le forum Images
    Réponses: 3
    Dernier message: 19/07/2010, 12h53
  3. translation d'image boucle for
    Par jujuj dans le forum Images
    Réponses: 10
    Dernier message: 28/09/2009, 16h05
  4. Translation d'images ?
    Par NeMo_O dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 15/05/2008, 18h31
  5. Animation d'une image, translation, rotation en javascript ?
    Par Ptit_Mouss dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/09/2006, 11h21

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