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 :

sélectionner une partie d'une image sous matlab [Débutant]


Sujet :

Images

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Points : 49
    Points
    49
    Par défaut sélectionner une partie d'une image sous matlab
    bonjour à tous,

    J'aimerais que l'utilisateur selectionne une partie de forme polygone sur une image donnée.Ensuite je vais enregistrer une matrice contenant la forme selectionné par l'utilisateur pour en effectué des calculs.
    Avant de passer au calcul j'ai voulu m'assurer que j'enregistre la bonne matrice en affichant la sous image sélectionnée mais le problème est que j'obtiens pas la bonne image

    j'ai écris le code 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
     
    im = imread([inpn infn]);
    imh = imshow(im);
    [x,y] =getline('closed') %dessine un polygonne fermé avec la sourie
     
            XData = get(imh, 'XData');
            YData = get(imh, 'YData');
     
            xmingrid = max( XData(1), floor(min(x)) )
            xmaxgrid = min( XData(2),  ceil(max(x)) )
            ymingrid = max( YData(1), floor(min(y)) )
            ymaxgrid = min( YData(2),  ceil(max(y)) )
     
            xgrid = xmingrid : xmaxgrid;
            ygrid = ymingrid : ymaxgrid;
            m = xmaxgrid - xmingrid +1;
            n = ymaxgrid - ymingrid +1;
            A = zeros(m,n);
            for i=1:m
                for j=1:n
                    A(i,j) = im(xmingrid+i-1, ymingrid+j-1);
                end
            end
            figure('Color','white'), image(A), colormap(cmap);

    le problème est que j'obtiens une image avec les bonnes coordonnées xgrid et ygrid mais le contenu de l'image c'est du blanc avec la forme dessinée par l'utilisateur au lieu du contenu original de la partie sélectionnée.

    peut être il y a une solution trivial pour ceux qui maîtrise déjà la programmation sous matlab, si c'est le cas je serais très reconnaissante pour celui qui peut me donner un coup de main

    merciiiiiiiiiiiiiiii


  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Salut,

    L'affichage de A dépend du type de valeur qu'elle contient (des entiers entre 0 et 255?). Par contre

    Sinon, si tu as la toolbox traitement d'images (apparemment oui, puisque tu utilises imshow), tu peux regarder du côté de roipoly pour créer un masque qui aura la forme du polygone dessiné par l'utilisateur.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Points : 49
    Points
    49
    Par défaut
    salut magelan, merci pour la repense rapide,

    j'ai vérifié le type de l'image originale c'est truecolor, donc la matrice im est m-by-n-by-3, j'ai pensé donc à copier les trois matrices A(xgrid,ygrid,1), A(xgrid,ygrid,3), A(xgrid,ygrid,3) pour former une image de type truecolor, j'ai modifié le code comme suit:
    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
     
    [x,y] =getline('closed') %dessine un polygonne fermé avec la sourie
     
            XData = get(imh, 'XData');
            YData = get(imh, 'YData');
     
            xmingrid = max( XData(1), floor(min(x)) );
            xmaxgrid = min( XData(2),  ceil(max(x)) );
            ymingrid = max( YData(1), floor(min(y)) );
            ymaxgrid = min( YData(2),  ceil(max(y)) );
     
            xgrid = xmingrid : xmaxgrid;
            ygrid = ymingrid : ymaxgrid;
            m = xmaxgrid - xmingrid +1;
            n = ymaxgrid - ymingrid +1;
            A = zeros(m,n,3);
            for i=1:m
                for j=1:n
                    A(i,j,1) = im(xmingrid+i-1, ymingrid+j-1,1);
                    A(i,j,2) = im(xmingrid+i-1, ymingrid+j-1,2);
                    A(i,j,3) = im(xmingrid+i-1, ymingrid+j-1,3);
                end
            end
     
            figure('Color','white'), imshow(im),title('image originale avec imshow');
            figure('Color','white'), imshow(A),title('sous image sélectionnée avec imshow');
    j'ai pensait que si je réussi à affiché l'image originale avec la matrice im qui le représente, je dois réussir à faire de même avec une partie de la matrice copié dans A, et représenterais la partie sélectionnée, mais appariement j'ai tord

    je comprends le problème!!

    j'ai vue un peu la notion de roipoly, si j'ai bien compris ça donne un masque qui represente le polygone selectionné et finalement j'obtient une matrice de même taille que la matrice originale, mais j'ai besoin seulement d'une matrice qui représente exactement la région sélectionnée

    est ce que quelqu'un voit le problème de mon premier code?
    sinon est ce que vous pouvez me pousser encore plus avec la méthode de roipoly

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Que retourne
    ?

    Pour roiploy, effectivement, il faudra de toute manière appliquer la même procédure pour extraire la fenêtre, par contre, on peut extraire les pixels internes au polygone dessiné par l'utilisateur.

    Sinon, tes boucles for peuvent être remplacées par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A = im(xmingrid : xmaxgrid,ymingrid : ymaxgrid,:);
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Points : 49
    Points
    49
    Par défaut
    retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Name        Size                Bytes  Class     Attributes
     
      A          54x61x3              79056  double              
      im        512x515x3            791040  uint8

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Ok, donc il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    figure('Color','white'), imshow(uint8(A)),title('sous image sélectionnée avec imshow');
    pour afficher ta fenêtre.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Points : 49
    Points
    49
    Par défaut

    merci infiniment magelan
    effectivement il suffisait d'avoir un même type de representation des nombres codant les images



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

Discussions similaires

  1. Copier une partie d'une form dans une image
    Par Duan dans le forum Débuter
    Réponses: 5
    Dernier message: 11/05/2009, 16h16
  2. donner une couleur a une partie d'une forme
    Par ralf91 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/04/2008, 17h02
  3. Réponses: 1
    Dernier message: 04/04/2008, 12h14
  4. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  5. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47

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