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 :

Recaler 2 images qui tournent sur elles-mêmes sans faire du point à point


Sujet :

Images

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut Recaler 2 images qui tournent sur elles-mêmes sans faire du point à point
    Bonjour,

    Je fais des essais simples pour l'instant et le résultat est aberrant ...
    Juste l'alignement d'une droite (tournée à 90° dans la 2nde image) !!!

    Mon but final est de recaler 2 images qui tournent sur elles-même sans faire du point à point et l'automatisation est nécessaire !

    Le problème peut venir de la fonction optimisée mais je n'ai pas beaucoup de connaissances en la matière...
    Les conditions initiales sont ici choisies assez proches de la solution et pourtant, cela ne fonctionne pas!

    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
    clear all, close all, clc
    % Lecture des images et taille
    I=imread('1.bmp');
    I=I(:,:,1);
    [M N]=size(I);
    I_transform=imread('2.bmp');
    I_transform=I_transform(:,:,1);
     
    % Conditions initiales
    initial_scale=[3*pi/8 1 1];
     
    % Trouver les paramètres qui minimise la fonction 
    [scale,Fval]=fminsearch('rescale2',initial_scale,[],I,I_transform);
    disp(Fval);
     
    u=scale(1);
    dx=scale(2);
    dy=scale(3);
     
    % Construction de la matrice de recalage (combinaison rotation & translation)
    Trotation=[cos(u) sin(u) 0; -sin(u) cos(u) 0; 0 0 1;];
    Ttranslation=[1 0 0; 0 1 0; dx dy 1;];
    T=Trotation*Ttranslation;
     
    % Image recalée
    Tform=maketform('affine',T);
    I_aligned=imtransform(I_transform,Tform,'Xdata',[1 N],'Ydata',[1 M]);
     
    % Visualisation
    subplot(1,3,1); imshow(I);
    title('Original Image');
    subplot(1,3,2); imshow(I_transform);
    title('Transformed Image');
    subplot(1,3,3); imshow(I_aligned);
    title('Aligned Image');
    Et le code de la fonction
    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
    function [err]=rescale2(scale,I,I_transform);
     
    [M N]=size(I);
     
    % Application de la transformation avec des paramètres d'échelle divers
    % jusqu'à ce que la corrélation entre 2 les images soit acceptable  
    u=scale(1);
    dx=scale(2);
    dy=scale(3);
     
    Trotation=[cos(u) sin(u) 0; -sin(u) cos(u) 0; 0 0 1;];
    Ttranslation=[1 0 0; 0 1 0; dx dy 1;];
    T=Trotation*Ttranslation;
     
    Tform=maketform('affine',T);
    I_aligned=imtransform(I_transform,Tform,'Xdata',[1 N],'Ydata',[1 M]);
     
    % Find the correlation between the base and the aligned images
    err=-abs(corr2(I_aligned,I));
    end
    Pouvez-vous m'aider? Avez-vous des idées afin d'améliorer mon programme, sa rapidité... Je suis preneuse de tous conseils et de toutes aides....

  2. #2
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Citation Envoyé par lilyla
    Bonjour,

    Avez-vous des idées afin d'améliorer mon programme, sa rapidité... Je suis preneuse de tous conseils et de toutes aides....
    Un lien qui peut t'aider:
    http://www.mathworks.com/support/sol...lution=1-15NM7

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par tug83
    Je vais y jeter un coup d'oeil de suite mais le problème majeur est que mon programme ne fait pas ce que je veux... mais il faut quand même que je pense à sa rapidité d'exécution car comme je l'ai déjà dit je veux automatiser donc une certaine rapidité sera nécessaire.

    Merci de votre réponse si rapide! J'apprend beaucoup sur ce forum car je n'avais quasi aucune compétence en Matlab!

  4. #4
    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
    Résultat aberrant : c'est à dire ?
    Qu'attends-tu, qu'obtiens-tu ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par progfou
    Résultat aberrant : c'est à dire ?
    Qu'attends-tu, qu'obtiens-tu ?
    Par exemple, image originale : droite horizontale, image transformée : même droite mais tournée de 90°. Avec mon programme, l'image finale doit être l'image transformée ramenée à sa position initiale (image originale) et je peux ainsi trouver la rotation et les déplacements dx et dy (image 2D).

    Là, je récupère une image finale qui n'est pas une droite !!! : un bout en blanc et un en noir.... Donc je ne peux pas renvoyer un angle et dx, dy qui soient cohérents!

    Si ce n'est toujours pas clair. Dites le moi, je ne suis pas vraiment une pro des explications, désolée....

    Merci de vous pencher sur mon problème!

  6. #6
    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
    Bonsoir,

    pouvez vous poster les deux image ??

    parceque avec les images que j'ai essayé, ca marche.

    [IMG][/IMG]

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    Demain matin je posterais les images sur lesquelles je veux travailler!

    Mais avec des images comme les votres je n'obtenais pas ce résultat ! Alors ...??? je ne comprend pas! avez-vous changé les conditions initiales??

  8. #8
    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
    Non, j'ai rien changé, sauf que j'ai créé les matrice I et I_tranform :
    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
    clear all, close all, clc
    % Lecture des images et taille
    %I=imread('1.bmp');
    %I=I(:,:,1);
    I=zeros(100,100);I(49:51,:)=255;
    [M N]=size(I);
    %I_transform=imread('1.bmp');
    I_transform=zeros(100,100);I_transform(:,49:51)=255;
    %I_transform=I_transform(:,:,1);
    
    % Conditions initiales
    initial_scale=[3*pi/8 1 1];
    
    .....

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    J'en prend note et testerais comme vous demain! Comme je veux travailler sur des images, je n'y avais pas pensé, j'avais créé les images à partir de paint si je me souviens bien!

    Merci !!!

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    En construisant I et J depuis le code, ça fonctionne mais avec les images de droite il y a toujours un problème ! Si quelqu'un a une idée là ...

    Je mets le résultat que j'ai obtenu et les images sur lesquelles je veux travailler!
    L'angle est d'environ 90° visuellement!

  11. #11
    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,

    Je ne sais pas si ce code va t'aider, mais juste une idée, essaie de l'adapter à ton probléme et de l'optimiser.
    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
     
    I=zeros(100,100);I(49:51,30:70)=255;
    I2=zeros(100,100);I2(10:50,29:31)=255;
    [N,M]=size(I);
    u=1:10:360;
    for i=1:length(u)
        I3=imrotate(I2,u(i));
        c=xcorr2(I,I3);
        a(i)=max(c(:));
    end
    [m,q]=max(a);
    I3=imrotate(I2,u(q));
    c=xcorr2(I,I3);
    [dx,dy]=find(c==m);
    dx=size(c,1)/2-dx(1);
    dy=size(c,2)/2-dy(1);
     
    T=[1 0 0; 0 1 0; dx dy 1;];
    Tform=maketform('affine',T);
    I3=imtransform(I3,Tform,'Xdata',[1 N],'Ydata',[1 M]);
    subplot(1,3,1);imshow(I);
    subplot(1,3,2);imshow(I2);
    subplot(1,3,3);imshow(I3);
    u(q)
    pour des images de grande taille, ca sera trés lent à cause de xcorr2. je ne sais pas s'il y a un autre moyen.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Malgré la date de ce post, je propose une réponse au problème de Lilyla.
    Le problème que j'ai pu relever est un problème de cadrage, tout simplement Il ya avait aussi un petit problème me semble t'il sur la définition de la matrice de rotation.

    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
    clear all, close all, clc
    % Lecture des images et taille
    I=imread('1.bmp');
    I=I(:,:,1);
    [M N]=size(I);
    I_transform=imread('2.bmp');
    I_transform=I_transform(:,:,1);
    
    % Conditions initiales
    initial_scale=[3*pi/8 1 1];
    
    % Trouver les paramètres qui minimise la fonction 
    [scale,Fval]=fminsearch('rescale2',initial_scale,[],I,I_transform);
    disp(Fval);
    
    u=scale(1);
    dx=scale(2);
    dy=scale(3);
    
    % Construction de la matrice de recalage (combinaison rotation & translation)
    Trotation=[cos(u) sin(u) 0; -sin(u) cos(u) 0; 0 0 1;];Trotation=[cos(u) -sin(u) 0; sin(u) cos(u) 0; 0 0 1;];
    Ttranslation=[1 0 0; 0 1 0; dx dy 1;];
    T=Trotation*Ttranslation;
    
    % Image recalée
    Tform=maketform('affine',T);
    I_aligned=imtransform(I_transform,Tform);,'Xdata',[1 N],'Ydata',[1 M]);
    
    % Visualisation
    subplot(1,3,1); imshow(I);
    title('Original Image');
    subplot(1,3,2); imshow(I_transform);
    title('Transformed Image');
    subplot(1,3,3); imshow(I_aligned);
    title('Aligned Image');
    En espérant que cela puisse être utile à quelqu'un

    Lilou

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

Discussions similaires

  1. Faire pivoter une image sur elle-même
    Par JeanMarc_T2k dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/01/2010, 10h54
  2. [SQL2K] delete cascade d'une table sur elle même
    Par StormimOn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2006, 16h28
  3. Une iframe qui se supprime elle-même
    Par jibouze dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 19/12/2005, 10h11
  4. L'installation d'XP boucle sur elle-même
    Par pf106 dans le forum Windows XP
    Réponses: 13
    Dernier message: 20/08/2005, 14h55
  5. TABLE pointant sur elle-même, requete de selection recursive
    Par Mike@Nestor dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/07/2005, 14h50

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