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 :

imshow et imagesc sur une meme figure?


Sujet :

Images

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut imshow et imagesc sur une meme figure?
    bonjour,

    Est-ce qu'il est possible d'avoir sur une meme figure, une image en noir et blanc avec imshow et une image couleur avec imagesc sans que tout devienne en noir et blanc?

    Merci!

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 163
    Points
    53 163
    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
    X1 =  rand(200,300);
    X2 = X1>.5;
     
    figure
    % colormap(jet)
     
    subplot(211);
    imagesc(X1);
    axis image
     
    subplot(212);
    X3 = cat(3,X2,X2,X2)*255;
    imshow(X3);
    Il suffit de passer l'une des deux images en couleurs vraies (RGB)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, 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 régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    Cool merci beaucoup!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    En fait ca ne marche pas à tous les coups cette facon de faire?

    Si on a ca par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    X1 = single(rand(200,300));
    subplot(211);
    imagesc(X1);
    axis off
    axis image
    subplot(212);
    imshow(X1);
    On aura 2 fois la meme image sur la figure en noir et blanc

    Mais si maintenant j'en veux une en couleur et une en noir et blanc ca ne marche pas la méthode, ca modifie complètement mon image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    X1 = single(rand(200,300));
    subplot(211);
    imagesc(X1);
    axis off
    axis image
    subplot(212);
    X11 = cat(2,X1,X1,X1)*255;
    imshow(X11);
    non?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 163
    Points
    53 163
    Par défaut
    C'est en posant les bonnes questions que l'on obtient généralement les bonnes réponse :
    1. ce n'est pas une image noir&blanc mais une image en niveau de gris
    2. tu n'as jamais dis non plus que tu voulais afficher la même image


    Donc :

    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, 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)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    Merci encore pour votre aide. J'ai encore quelques soucis. J'ai une matrice image X single de 240 par 320 pixels dont la valeur minimal est 296.27 et la valeur max est 309.6. Du coup j'essaye d'afficher cette image une fois en couleur et une fois en niveau de gris mais l'image noir et blanc est correcte alors que l'image couleur a le fond en couleur et le centre en noir et blanc (une plage de couleur semble avoir été perdue...) Voici mon 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
     
    cmap1 = colormap('jet');
    cmap2 = colormap('gray');
    cmap = [cmap1;cmap2];
    colormap(cmap)
    ax1 = subplot(121);
    h(1)=imagesc(X);
    ax2 = subplot(122);
    X2 = X;
    h(2) = imagesc(X2);
    m = 64;  % 64-elements is each colormap
    cmin = min(X(:));
    cmax = max(X(:));
    % CData for surface
    C1 = min(m,round((m-1)*(X-cmin)/(cmax-cmin))+1); 
    % CData for pcolor
    C2 = 64+C1;
    % Update the CDatas for each object.
    set(h(1),'CData',C1);
    set(h(2),'CData',C2);
    % Change the CLim property of axes so that it spans the 
    % CDatas of both objects.
    caxis([min(C1(:)) max(C2(:))])
    Vous voyez mon erreur?
    Merci

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 163
    Points
    53 163
    Par défaut
    Ici, je ferais plus "simplement" :
    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
     
    X = rand(6,8,'single')*13+296;
     
    cmap1 = colormap('jet');
    cmap2 = colormap('gray');
    cmap = [cmap1;cmap2];
    colormap(cmap)
     
    ax1 = subplot(211);
    h(1)=image(X);
    axis image
     
    ax2 = subplot(212);
    h(2) = image(X);
    axis image
     
    m = 64;  % 64-elements is each colormap
    cmin = min(X(:));
    cmax = max(X(:));
     
    % CData for surface
    C1 = min(m,round((m-1)*(X-cmin)/(cmax-cmin))+1);
    % CData for pcolor
    C2 = 64+C1;
     
    % Update the CDatas for each object.
    set(h(1),'CData',C1,'cdatamapping','direct');
    set(h(2),'CData',C2,'cdatamapping','direct');
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, 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)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    Cool merci ca marche.
    Donc ce qui a fait que ca marche maintenant c'est l'ajout de cdatamapping','direct' et que l'on utilise image au lieu de imagesc alors?
    Merci encore

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 163
    Points
    53 163
    Par défaut
    Citation Envoyé par soeursourire Voir le message
    Donc ce qui a fait que ca marche maintenant c'est l'ajout de cdatamapping','direct' et que l'on utilise image au lieu de imagesc alors?
    Oui.

    Tu crées une palette de couleur avec 128 couleurs (64 gray + 64 jet)

    Ensuite tu "normalises" les valeurs des pixels de la première image entre 1 et 64 et ceux de la seconde entre 65 et 128 en modifiant la propriété CData de chacune des images

    Tu dis à MATLAB de faire le lien direct en la nouvelle valeur de chaque pixel et la valeur correspondante dans la palette de couleur en mettant la propriété CDataMapping à Direct et en utilisant IMAGE à la place de IMAGESC
    • 1 => première valeur jet
    • 64 => dernière valeur jet
    • 65 => première valeur gray
    • 128 => dernière valeur gray


    C'est clair ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, 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)

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    Oui merci. y'a juste encore un petit truc que je ne comprends pas. Quand on fait :C2 = 64+C1; C'est parce que les 2 images sont identiques n'est-ce pas?
    Si maintenant je veux une image différente en noir et blanc dans mon 2ème plot et une image couleur dans mon 1er... je ne peux pas faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C1 = min(m,round((m-1)*(X-cminX)/(cmaxX-cminX))+1);
    C2 = 64+min(m,round((m-1)*(X2-cminX2)/(cmaxX2-cminX2))+1);
    Ca ne marche pas comme ca

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 163
    Points
    53 163
    Par défaut
    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
    X = rand(6,8,'single')*13+296;
    X2 = rand(6,8,'single')*13+296;
     
    figure
    cmap1 = colormap('jet');
    cmap2 = colormap('gray');
    cmap = [cmap1;cmap2];
    colormap(cmap)
     
    ax1 = subplot(211);
    h(1)=image(X);
    axis image
     
    ax2 = subplot(212);
    h(2) = image(X2);
    axis image
     
    m = 64; 
     
    cmin = min(X(:));
    cmax = max(X(:));
    C1 = min(m,round((m-1)*(X-cmin)/(cmax-cmin))+1);
     
    cmin = min(X2(:));
    cmax = max(X2(:));
    C2 = 64+min(m,round((m-1)*(X2-cmin)/(cmax-cmin))+1);
     
    set(h(1),'CData',C1,'cdatamapping','direct');
    set(h(2),'CData',C2,'cdatamapping','direct');
    Je te laisse trouver l'explication toi-même
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, 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)

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    Il y a toujours un truc que je n'arrive pas à comprendre...

    J'ai une image single avec des valeurs comprises entre -7.0 et 1.3. Mais j'aimerais obtenir la même image en faisant imshow et en faisant image. Pourquoi est-ce que je n'obtiens pas la même image avec ces deux méthodes:
    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
     
    a = -7.0;
    b = 1.3;
    I = a + (b-a).*rand(1995,1);
    I = single(reshape(I,[35,57]));
     
    % AVEC IMSHOW
    figure, imshow(I); colorbar;
     
    % AVEC IMAGE
    figure,
    cmap = gray(1);
    colormap(cmap)
    h(1) = image(I); colorbar
    m = 1;
    cmin = min(I(:));
    cmax = max(I(:));
    C = min(m,round((m-1)*(I-cmin)/(cmax-cmin))+1);
    set(h(1),'CData',C,'cdatamapping','direct');
    Merci.

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 163
    Points
    53 163
    Par défaut
    Ton soucis vient de IMSHOW ici :
    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
    a = -7.0;
    b = 1.3;
    I = a + (b-a).*rand(1995,1);
    I = single(reshape(I,[35,57]));
    
    % AVEC IMSHOW
    figure, imshow(I,[min(I(:)) max(I(:))],'InitialMagnification','fit'); colorbar;
    
    % Avec IMAGESC
    figure
    colormap(gray) % 64 niveaux de gris par défaut
    imagesc(I); colorbar
    axis image
    
    % AVEC IMAGE
    figure,
    m = 64;
    cmap = gray(m);
    colormap(cmap);
    
    h(1) = image(I); colorbar
    
    cmin = min(I(:));
    cmax = max(I(:));
    C = min(m,round((m-1)*(I-cmin)/(cmax-cmin))+1);
    set(h(1),'CData',C,'cdatamapping','direct');
    axis image
    Citation Envoyé par documentation de IMSHOW
    Class Support

    For grayscale images of class single or double, the default display range is [0 1]. If your image's data range is much larger or smaller than the default display range, you might need to experiment with setting the display range to see features in the image that would not be visible using the default display range. For all grayscale images having integer types, the default display range is [intmin(class(I)) intmax(class(I))].
    Il n'y a vraiment aucun mystère... MATLAB gère la couleur toujours de la même façon au finale quelque soit la fonction utilisée
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, 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. [Débutant] affichage d'un plot et d'une matrice sur une meme figure
    Par gegon dans le forum MATLAB
    Réponses: 6
    Dernier message: 29/10/2012, 17h43
  2. Comment tracer 2 graph 3D sur une meme figure?
    Par jojo67540 dans le forum MATLAB
    Réponses: 3
    Dernier message: 25/08/2008, 17h47
  3. Faire cohabiter ASP et PHP sur une même DB
    Par freud dans le forum Général Conception Web
    Réponses: 12
    Dernier message: 12/10/2005, 17h42
  4. alert + print sur une meme icone
    Par bachilbouzouk dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/05/2005, 13h09
  5. Association 1:n sur une meme table
    Par dafalcon dans le forum Décisions SGBD
    Réponses: 15
    Dernier message: 27/04/2005, 09h07

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