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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut [contour] Superposer des contours en couleur sur une image en niveaux de gris
    Bonjour,

    J'ai une image dicom en niveau de gris à laquelle j'aimerais superposer des contours calculés avec la fonction contour, qui correspondent à des valeurs de déformations dans l'image. Le problème est que la différence des cartes de couleurs (colormap) entre l'image dicom et les contours, fait que soit j'ai bien mon image en niveau de gris mais on ne voit pas les contours en noir, soit je laisse la colormap cool pour les contours, mais là l'image n'est plus en niveux de gris...

    Merci à celui qui pourra m'aider à afficher sur une même figure mon image dicom en niveux de gris et mes contours avec sa carte de couleurs spécifique !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Ingénieur R&D freelance
    Inscrit en
    novembre 2006
    Messages
    20 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur R&D freelance

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 008
    Points : 53 969
    Points
    53 969
    Par défaut
    Voici la solution :
    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
    figure
    colormap(gray)
     
    M=zeros(10);
    M(2:9,2:9)=.33;
    M(3:8,3:8)=.66;
    M(4:7,4:7)=1;
     
    imagesc(M)
     
    hold on
    [c,h]=contour(M,5); % Ou [c,h]=contour('v6',M,5); pour Matlab 7 et +
     
    map=hsv(length(h));
     
    for n=1:length(map)
     
        set(h(n),'edgecolor',map(n,:))
     
    end
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    Merci, j'ai bien l'affichage souhaité, cependant j'aimerais avoir quelques explications supplémentaires si possible :

    - que fait l'option 'v6' de la fonction contour ?
    - y a -til moyen de choisir une autre carte de couleur que 'edgecolor' ?
    - et enfin j'aimerais afficher les valeurs de chaque isocontour, mais avec ton code la ligne set(h,'Showtext', 'on') n fonctionne plus et renvoie l'erreur : There is no 'ShowText' property in the 'patch' class

    Merci de votre aide

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Ingénieur R&D freelance
    Inscrit en
    novembre 2006
    Messages
    20 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur R&D freelance

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 008
    Points : 53 969
    Points
    53 969
    Par défaut
    Note : la solution précédente était utilisée dans les versions précédentes de Matlab...elle n'est donc plus tout à fait à jour
    Citation Envoyé par matt67
    - que fait l'option 'v6' de la fonction contour ?
    Voir la doc : contour (rubrique "Backward Compatible Version")
    Citation Envoyé par matt67
    - y a -til moyen de choisir une autre carte de couleur que 'edgecolor' ?
    Je ne comprends pas bien , la couleur est gérée par :Regarde le principe de COLORMAP
    Citation Envoyé par matt67
    - et enfin j'aimerais afficher les valeurs de chaque isocontour, mais avec ton code la ligne set(h,'Showtext', 'on') n fonctionne plus et renvoie l'erreur : There is no 'ShowText' property in the 'patch' class
    Essaie avec CLABEL.
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    Ok, merci pour ces réponses , tout s'éclaircit petit à petit.
    J'aimerais encore améliorer le système, puisque je voudrais garder entre deux images différentes, pour une même isovaleur la même couleur de contour.

    Comment faire puisque l'échelle de couleur est fixé automatiquement en fonction de l'échelle des valeurs présentes...?

    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Ingénieur R&D freelance
    Inscrit en
    novembre 2006
    Messages
    20 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur R&D freelance

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 008
    Points : 53 969
    Points
    53 969
    Par défaut
    C'est un peu plus compliqué... je pense qu'il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [c,h]=contour(X,[val]);
    et ensuite affecter une couleur à chaque contour en fonction de val
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut Mise à jour du code sous matlab 2014b
    Bonjour,

    Je souhaiterais toujours superposer des contours, de couleur différente fonction de la valeur, sur une image en niveau de gris.

    L'ancien code fonctionnant mais qui ne fonctionne plus sous matlab 2014b :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    imshow(Ima1,[],'InitialMagnification','fit'); hold on
    [C,h] = contour(Xp,Yp,dRp,0:0.1:4,);
    map= winter(length(h));
    for n=1:length(map)
        set(h(n),'edgecolor',map(n,:),'LineWidth',1);
        axis on
    end 
    clabel(C,'FontWeight','bold','Color','w');
    Sous matlab 2014b, h n'est plus un vecteur mais une structure et il me semble impossible de définir comme dans l'ancien code une couleur pour chaque contour défini.

    Merci d'avance de l'aide que vous pourrez me fournir !

    Matthieu

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Ingénieur R&D freelance
    Inscrit en
    novembre 2006
    Messages
    20 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur R&D freelance

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 008
    Points : 53 969
    Points
    53 969
    Par défaut
    Une idée :

    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
    figure
     
    M = zeros(10);
    M(2:9,2:9)=.33;
    M(3:8,3:8)=.66;
    M(4:7,4:7)=1;
     
    rgbM = cat(3, M, M, M);
    image(rgbM)
    axis image
     
    hold on
    [c,h] = contour(M,5);
     
    map = winter(5);
    colormap(map)
    h.LineColor = 'flat';
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    Bonjour DUT,

    Merci pour cette réponse rapide.

    Cependant cela ne fonctionne pas chez moi pour deux raisons :

    1) Je ne connais pas d'avance le nombre de contours pour chaque matrice dRp contourée et je précise donc l'intervalle de valeur dont je souhaite observer les contours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C,h] = contour(Xp,Yp,dRp,0:0.1:4,);
    --> Je ne peux donc définir d'avance la taille de la matrice map utilisé dans :
    2) Lorsque j'essaie d'appliquer cette échelle de couleurs, la commande s'applique à mon image niveaux de gris et non aux contours superposés à cette image.

    Matthieu

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Ingénieur R&D freelance
    Inscrit en
    novembre 2006
    Messages
    20 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur R&D freelance

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 008
    Points : 53 969
    Points
    53 969
    Par défaut
    Citation Envoyé par matt67 Voir le message
    2) Lorsque j'essaie d'appliquer cette échelle de couleurs, la commande s'applique à mon image niveaux de gris et non aux contours superposés à cette image.
    C'est pour cela qu'il faut afficher l'image en couleurs vraies.

    D'où dans mon code précédent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rgbM = cat(3, M, M, M);
    image(rgbM)
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. Des fondus de couleur sur une map
    Par Nighthawk dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/10/2014, 12h51
  2. cvConvertScale sur une image en niveaux de gris
    Par dudux dans le forum OpenCV
    Réponses: 2
    Dernier message: 09/06/2011, 13h13
  3. Réponses: 28
    Dernier message: 18/06/2010, 13h41
  4. [Débutant] Fleche, Texte, Cadre et Choix des couleurs sur une image
    Par niepoc dans le forum MATLAB
    Réponses: 10
    Dernier message: 16/07/2008, 17h44

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