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 :

établir une liaison entre deux points


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut établir une liaison entre deux points
    Salut tout le monde,
    je sais pas si ce sujet a été abordé avant, si ça était le cas prière de me donner un lien et merci
    étant données deux images, je prends des points de chaque image ( avec leurs coordonnées x1, y1 et x2, y2) j'affiche en couleur une droite entre ces deux points.
    sorte de matching (correspondance ou mapping ) entre chaque deux points .
    merci tout le monde

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    C'est bien trop vague pour l'instant, et tu ne poses pas de question !
    * Un matching entre points de deux images peut être défini de nombreuses facons: doit elle être bijective ? quelle distance/mesure de similarité entre points ? Dépends elle des voisinages ou juste des points ? En outre, elle ne dépend pas de la manière dont tu affiches les 2 images sur un même graphe.
    * A l'inverse,si tu veux une représentation graphique de ton matching via des lignes, cela va dépendre de la position des images. Si tu as une fonction de matching sous la main, çà ne doit pas être bien difficile d'afficher deux images et de plotter des lignes via la fonction line().

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    En fait, j'ai fait le matching
    maintenant comment paramétrer la fonction line ?
    j'ai im1: image1
    im2:image2
    x1, y1 : coordonnées du point1 dans image1
    x2, y2 : coordonnées du point1 dans image2
    avec un trait rouge
    je veux établir le lien entre les deux, merci de m'aider

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    il faut que tu concatènes les images en une seule et que tu gardes la position de chacune des images originales dans la surimage. Calcules les coordonnées absolues des points que tu veux relier, un truc du genre.
    xabs1 = posX_image1 + x1
    xabs2 = posX_image2 + x2

    Pour la couleur, cf la doc de line

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    merci Mr
    en fait j'ai essayé la concaténation des deux images, j'ai pas réussi
    j'ai essayé d'utiliser ce code mais j'ai manqué de bien paramétrer 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function frame=motif2frame(motif,frame,x,y,scale,mask)
    % motif : image 'source'
    % frame : image 'destination'
    % x,y : coordonnées des 4 sommets de la 'source' dans la 'destination'
    % scale : paramètre d'échelle
    % mask : masque 'destination' des pixels à ne pas modifier
     
    [hIn,wIn]=size(motif);
    xIn=[1 wIn wIn 1];
    yIn=[1 1 hIn hIn];
    xIn=wIn/2+scale*(xIn-wIn/2);
    yIn=hIn/2+scale*(yIn-hIn/2);
    tForm=cp2tform([xIn' yIn'],[x' y'],'projective');
    [motifTransform,xData,yData]=imtransform(motif,tForm,'Fill',-1);
    [hOut,wOut]=size(motifTransform);
    xOut=fix(xData(1));
    yOut=fix(yData(1));
    dxOut=xOut:xOut+wOut-1;
    dyOut=yOut:yOut+hOut-1;
    pos=find(mask(dyOut,dxOut)==1);
    if (length(pos))
        motifTransform(pos)=-1;
    end
    pos=find(motifTransform~=-1);
    for p=1:3
        frameCut=frame(dyOut,dxOut,p);
        if (length(pos))
            frameCut(pos)=uint8(motifTransform(pos));
        end
        frame(dyOut,dxOut,p)=frameCut;
    end
    y'a t'il des rectifications ou des meme une autre idée a propos la concaténation de 2 images ??

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Quelle erreur reçois-tu ? Il faut évidement que les dimensions correspondent (même nombre de ligne si tu concatènes en colonne, ou mm nombre de colonnes si tu cat en ligne). Il te faudra interpoler l'une des deux si les images ne sont pas à la même définition.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    j'aime mettre la 2 eme image sur la même ligne que la première étant donné que la taille des 2 images est 514*770
    donc si je fais appel à cette fonction que dois je mettre comme valeur des paramètres : motif, frame, x,y,scale,mask ??
    j'ai essayé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    motif2frame(im1,im2,[0 0 0 0],[0 0 0 0],1,'destination')
    mais ça fonctionne pas

  8. #8
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Si tu disposes de 2 3-D array x et y, de taille 514*770*3, la concaténation en ligne s'écrit cat(2,x,y);

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    merci bien
    maintenant me disposant de deux images concaténées dans la même figure,
    je veux établir la liaison avec la fonction line:
    si je prends par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x1=5;y1=10
    x2=45+size(im1,1); y2=125+size(im1,1);
    comment paramétrer la fonction line pour qu'elle construit une droite du point (x1,y1) et point (x2,y2) ??

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 308
    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 308
    Points : 52 891
    Points
    52 891
    Par défaut
    Citation Envoyé par aymench1985 Voir le message
    comment paramétrer la fonction line pour qu'elle construit une droite du point (x1,y1) et point (x2,y2) ??
    As-tu au moins consulter la documentation de la fonction line ?

    Montre nous ce que tu as essayé de coder, même si c'est faux.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    ok
    j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1:size(meilleure_solution)
         x1=points1(i,2);y1= points1(i,3);
         x2=points2(meilleure_solution(i),2)+size(im1,1);y2=points2(meilleure_solution(i),3)+size(im1,1);
        line([x1 x2],[y1 y2], concat); 
     end
    en prenant x1, y1 les coordonnées d'un point de la première image
    x2,y2 les coordonnées d'un point de la deuxième image
    Sachant que les 2 images sont concaténés dans une même image qui est concat

    j'ai trouvé cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> line
    Vectors must be the same lengths.
     
    Error in ==> final1 at 609
        line([x1 x2],[y1 y2], concat);
    comment faire et comment rectifier dans la fonction line ? et merci

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 308
    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 308
    Points : 52 891
    Points
    52 891
    Par défaut
    Le troisième argument d'entrée de line me parait bien bizarre…

    Ne chercherais-tu pas plutôt à faire ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    figure
     
    image(concat)
    hold on
    line([x1 x2],[y1 y2])
    Si ce n'est pas ça, explique nous mieux à quoi correspond la variable concat

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    merci bien
    c'est presque la solution voulue. Toutefois, lorsque j'ai concaténé les deux images les coordonnées du point 2 contenant dans la deuxième image ont changé, j'ai essayé d'ajouter size(im1,1) pour atteindre les nouvelles coordonnées mais la ligne ne touche meme pas la deuxième image et les autres points

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    Etant donné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cc1       323x483            156009  uint8
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cc2       323x483            156009  uint8
    lorsque je fait quelle est la position de cc2 par rapport a cc1 dans concat ?
    comment la savoir si non ?? pour que je puisse ajouter cette distance aux coordonnées des points que j'effectue la liaison

  15. #15
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 308
    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 308
    Points : 52 891
    Points
    52 891
    Par défaut
    Essaie ceci :

    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
    cc1 = [0 1 ; 2 3];
    cc2 = [60 61 ; 62 63];
    cc3 = cat(1, cc1, cc2);
    cc4 = cat(2, cc1, cc2);
     
    figure
    subplot(221)
    image(cc1)
    axis image
    title('cc1')
    subplot(222)
    image(cc2)
    axis image
    title('cc2')
    subplot(223)
    image(cc3)
    axis image
    title('cc3')
    subplot(224)
    image(cc4)
    axis image
    title('cc4')
    Voir le résultat sur l'image attachée

    Ensuite, il faut faire attention car :

    • les abscisses x correspondent aux indices des colonnes
    • les ordonnées y correspondent aux indices des lignes


    L'équivalence est donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    I(ligne,colonne) = I(y,x)
    Images attachées Images attachées  

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    Là pour l'histoire des lignes et colonnes, je sis d'accord avec vous et ça m'aide pour le départ de la droite que je veux construire. Maintenant ça reste combien j'ajoute pour les coordonnées du point de la deuxième image pour que je puisse le relier avec le premier ( pour que la droite le touche))?
    Moi j'ai ajouté qui est la dimension de cc1 ( nombre de colonnes donc largeur) et la droite n'a pas aboutit au deuxième point !

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    Pour remédier à ce problème j'ai ajouté seulement à l'ordonné du deuxième point ( pas à l'abscisse) et c'est résolu
    merci

  18. #18
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 308
    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 308
    Points : 52 891
    Points
    52 891
    Par défaut
    Encore une fois, si tu avais lu la documentation de la fonction size, tu te serais vite rendu compte de ton erreur.

    Où même avec un exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >> M = rand(3,2);
    >> size(M,1)
     
    ans =
     
         3
     
    >> size(M,2)
     
    ans =
     
         2

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2013
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 221
    Points : 31
    Points
    31
    Par défaut
    L'astuce est que je dois ajouter la taille de la première image seulement pour les colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for i=1:size(meilleure_solution,2)
         x1=points1(i,2);y1= points1(i,3);
         x2=points2(meilleure_solution(i),2);y2=points2(meilleure_solution(i),3)+size(cc1,2);
        figure
        imshow(concat)
        hold on
         line([y1 y2],[x1 x2]);
     
     end
    Maintenant, si je veux afficher toutes les droites sur la même figure. Que dois je faire ? merci

  20. #20
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 308
    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 308
    Points : 52 891
    Points
    52 891
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    figure
    imshow(concat)
    hold on
     
    for i = 1:size(meilleure_solution,2)
     
        x1 = points1(i,2);
        y1 = points1(i,3);
        x2 = points2(meilleure_solution(i),2);
        y2 = points2(meilleure_solution(i),3)+size(cc1,2);
     
        line([y1 y2],[x1 x2]);
     
    end
    ou avec un seul appel à line :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for i = 1:size(meilleure_solution,2)
     
        x(1,i) = points1(i,2);
        y(1,i) = points1(i,3);
        x(2,i) = points2(meilleure_solution(i),2);
        y(2,i) = points2(meilleure_solution(i),3)+size(cc1,2);
     
    end
     
    figure
    imshow(concat)
    hold on
    line(y,x);

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/06/2015, 14h35
  2. [XL-2003] Faire une liaison entre deux tableaux sur 2 classeurs différents
    Par Katell dans le forum Conception
    Réponses: 1
    Dernier message: 22/01/2015, 18h04
  3. Réponses: 0
    Dernier message: 02/08/2011, 14h30
  4. Réponses: 13
    Dernier message: 22/08/2009, 15h53
  5. Comment établir une relation entre deux tables
    Par Monta^^ dans le forum Hibernate
    Réponses: 15
    Dernier message: 30/04/2009, 19h54

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