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 :

Superposition deux images avec deux colormap différentes


Sujet :

Images

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 27
    Points : 10
    Points
    10
    Par défaut Superposition deux images avec deux colormap différentes
    Hello!

    Je cherche à faire quelque chose d'un peu différent de ce que l'on trouve dans les forums : je n'ai pas trouvé en cherchant ailleurs.

    Je cherche à afficher une image en nuance de gris (imagesc(monimage) colormap(gray)) et à superposer des blocs de couleurs.

    je veux mon image en nuance de gris avec la colormap gray et afficher au dessus des carrés avec une colormap normale (mes blocs vont de bleus à rouges).

    J'ai essayé par transparence sans grosse réussite. J'arrive à afficher des blocs sur l'image par transparence, mais ça reste attaché à la même colormap et ce n'est pas ce que je veux...

    Quelqu'un a une idée ?

    Merci par avance !

  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 165
    Points
    53 165
    Par défaut
    Tu dois afficher les carrés 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 à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Merci pour ta réponse, j'ai effectivement testé quelque chose comme ça "à la main" en gardant tout sur la même image.

    Mes intensités de pixels totaux ont été répartis entre 0 et 150, mes blocs de couleurs entre 151 et 255. Ca fait un contraste oui, mais cela n'affiche pas l'image en nuance de gris.

    C'est une image médicale en fond (echo) qui est en couleur, j'ai besoin d'utilisé le colormap(gray) pour afficher ça en noir et blanc. Ma matrice image est en double à une seule dimension pour les pixels (pas 3 canaux RGB) img = (width, depth, frames).

    Merci pour ton aide,

  4. #4
    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 165
    Points
    53 165
    Par défaut
    Citation Envoyé par defender19 Voir le message
    C'est une image médicale en fond (echo) qui est en couleur, j'ai besoin d'utilisé le colormap(gray) pour afficher ça en noir et blanc.
    Tu représentes des valeurs physiques sous forme d'image, elles n'ont pas réellement de couleur par opposition à une photographie par exemple (voir Représentation de phénomènes physiques).
    L'image résultante n'est pas "en couleur". C'est MATLAB qui possède par défaut une palette de couleurs Jet qui contient des couleurs… "en couleur"
    Si tu utilises Gray, alors tu obtiens des niveaux de gris.

    Bref, je comprends bien que tu affiches une image de fond, par contre, je n'ai toujours pas compris comment étaient représentés les "carrés de couleurs" ?
    Est-aussi une image ? Ou alors des objets Patch ?

    [Edit] Ou alors tu modifies artificiellement la valeur des pixels correspondant aux "carrés" sur l'image de fond (d'où la séparation des intensité à 150) ?
    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)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    J'ai deux techniques pour ça, jusqu'à maintenant j'ai remplacé des pixels de l'image elle même, mais c'est brouillon et ça ne permet pas du coup d'avoir les deux types de colormap.

    A terme, je voudrais avoir un peu de transparence : que mes blocs laissent voir les motifs derrière.
    J'ai donc mon image, et une matrice de la même taille avec mes blocs à certains endroits.

  6. #6
    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 165
    Points
    53 165
    Par défaut
    Tu peux t'inspirer de cette discussion Mise en evidence de segmentation layer ?

    Voici un exemple de ce qu'il est possible de faire :

    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
    I = rand(4);
     
    mask = rand(4)>0.3;
     
    rgb = zeros(4, 4, 3);
    rgb(:,:,1) = mask;
     
    figure(1)
    clf
    colormap(gray)
    subplot(2, 2, 1)
    imagesc(I);
    title('Image initiale')
    axis image
     
    subplot(2, 2, 2)
    imagesc(mask);
    title('Masque')
    axis image
     
    subplot(2, 2, 3)
    image(rgb);
    title('Image couleur')
    axis image
     
    subplot(2, 2, 4)
    imagesc(I);
    hold on
    image(rgb,'alphadata',mask*0.4);
    title('Superposition')
    axis image
    Images attachées Images attachées  
    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)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Pas mal, merci pour cette proposition !

    J'ai oublié de préciser mais j'ai plusieurs blocs de couleurs différentes. Penses-tu que ce soit encore jouable ? Quitte à multiplier les masques ?

  8. #8
    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 165
    Points
    53 165
    Par défaut
    Tu peux générer le masque à partir de l'image RGB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    rgb = zeros(4);
    idx = randperm(16);
    rgb(idx(1:5)) = 1;
    rgb(:,:,2) = 0;
    rgb(:,:,3) = 0;
     
    mask = sum(rgb,3)~=0;
    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)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Merci pour cette proposition de code, je vais tenter de l'arranger à ma sauce. Je posterai le résultat.

    Tu as une idée pour éventuellement s'affranchir du RGB et étendre la palette de couleur ?
    Préférentiellement, les blocs représentent une amplitude de mouvement et j'aimerai bien faire du dégradé de couleur..

  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 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 165
    Points
    53 165
    Par défaut
    Donc si je résume, tu veux une seule image.

    Pour l'intensité des pixels :
    • de 0 à 150 : niveaux de gris
    • de 151 à 255 : dégradé de couleur (palette Jet)


    Les valeurs des pixels sont stockées en uint8.

    C'est bien ça ?
    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)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Non, ça c'était mon essai de base, mais c'est brouillon et c'est pas ce que je veux.

    Voila ce que j'ai :

    • Image de taille (Y, X, FRAME)
    • Matrice Bloc (FRAME, Y, X, 3)


    Je veux mon image de base en gris et ma matrice de bloc avec des blocs de couleurs. Ton idée RGB est bonne, seulement ça ne laisse pas beaucoup de possibilité niveau couleur. C'était ma dernière question.

    Voila ce que j'ai fait, la grosse partie est pour remplir la matrice RGB avec une couleur par intervalle (je discrétise mes valeurs), à chaque point je met un bloc d'une couleur, de taille 2*mx/2*my centré sur le point.
    Je rajoute les FRAMES, mais ça ne change rien au problème, je ne travaille que sur une image là.

    Malheureusement, l'affichage final des blocs marche 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
        im = img(y1:y2,x1:x2,:);
        s_im = size(im);    
     
     
        rgb = zeros(s_im(3),s_im(1), s_im(2),  3); 
     
    // GESTION INTERVALLE COULEUR (RGB)
     
        d_max = max(max(d_x(:)), max(ref.MyTraj(:,1)));
        d_min = min(min(d_x(:)), min(ref.MyTraj(:,1)));
     
        ecart_min = abs(d_min) / 3;
        ecart_max = abs(d_max) / 3;
     
        range_min = (d_min:ecart_min:0);
        range_max = (0:ecart_max:d_max); 
     
        for i=1:length(d_x)
            for j=1:NB_POINT
     
                d = d_x(i, j);
     
                y1 = v_point(j, i+1, 2) - my;
                x1 = v_point(j, i+1, 1) - mx; 
                y2 = y1 + 2*my;
                x2 = x1 + 2*mx;    
     
                % DEPLACEMENT NUL
                if d == 0                
                    rgb(i, y1:y2, x1:x2, 1) = 1;
                    rgb(i, y1:y2, x1:x2, 2) = 1;
                    rgb(i, y1:y2, x1:x2, 3) = 1;
     
                % DEPLACEMENT NEGATIF
                elseif d < 0
     
                    if d < range_min(2)
                        rgb(i, y1:y2, x1:x2, 1) = 1;
                        rgb(i, y1:y2, x1:x2, 2) = 0;
                        rgb(i, y1:y2, x1:x2, 3) = 0;
     
                    elseif d > range_min(3)
                        rgb(i, y1:y2, x1:x2, 1) = 1;
                        rgb(i, y1:y2, x1:x2, 2) = 1;
                        rgb(i, y1:y2, x1:x2, 3) = 0;
     
                    else
                        rgb(i, y1:y2, x1:x2, 1) = 1;
                        rgb(i, y1:y2, x1:x2, 2) = 0;
                        rgb(i, y1:y2, x1:x2, 3) = 1;
                    end
     
                % DEPLACEMENT POSITIF
                elseif d > 0
     
                    if d > range_max(3)
                        rgb(i, y1:y2, x1:x2, 1) = 0;
                        rgb(i, y1:y2, x1:x2, 2) = 0;
                        rgb(i, y1:y2, x1:x2, 3) = 1;
     
                    elseif d < range_max(2)
                        rgb(i, y1:y2, x1:x2, 1) = 0;
                        rgb(i, y1:y2, x1:x2, 2) = 1;
                        rgb(i, y1:y2, x1:x2, 3) = 0;
     
                    else
                        rgb(i, y1:y2, x1:x2, 1) = 0;
                        rgb(i, y1:y2, x1:x2, 2) = 1;
                        rgb(i, y1:y2, x1:x2, 3) = 1;
                    end
     
                end     
            end        
        end
     
     
        %% GRAPHIQUE  
     
        figure;
        colormap(gray)
        for i=1:1%NB_FRAMES-1
            img = im(:,:,i);
            rgb_1 = squeeze(rgb(i,:,:,:));
     
            mask = sum(rgb_1,3)~=0;
     
            size(img)
            size(rgb_1)
            size(mask)
     
            imagesc(img);
            hold on
            image(rgb,'alphadata',mask*0.4);
     
            axis image
        end
    end

    Cela me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ans =
       116   231
    ans =
       116   231     3
    ans =
       116   231
    Error using image
    Error using image
    Indexed CData must be size [MxN], TrueColor CData must be size [MxNx3]
    Error in display_color_card (line 123)
            image(rgb,'alphadata',mask*0.4);
    J'ai pourtant bien les bonnes tailles.

  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 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 165
    Points
    53 165
    Par défaut
    Ne serait-ce pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image(rgb_1,'alphadata',mask*0.4);
    Sinon, que renvoie ceci :

    Une autre solution simple consisterait à convertir l'image du fond en RGB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    img = im(:,:,i);
    img(:,:,2) = img(:,:,1);
    img(:,:,3) = img(:,:,1);
     
    image(img)
    Et à superposer les blocs avec imagesc et une palette de couleurs comme Jet
    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)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Dut Voir le message
    Ne serait-ce pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image(rgb_1,'alphadata',mask*0.4);
    Oui ! Belle fourberie de ma part !
    Cela marche comme ça !

    Reste la question des couleurs, je vais regarder jet alors.

    Merci beaucoup !

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Dut Voir le message
    Une autre solution simple consisterait à convertir l'image du fond en RGB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    img = im(:,:,i);
    img(:,:,2) = img(:,:,1);
    img(:,:,3) = img(:,:,1);
     
    image(img)
    Et à superposer les blocs avec imagesc et une palette de couleurs comme Jet

    Je reviens à la charge...

    Qu'entends-tu par superposer les blocs avec imagesc ?
    J'ai bien essayé de convertir en rgb mon image et l'afficher avec image. Cela marche en noir et blanc sans problème. Par contre, comment faire une superpostion avec imagesc ? Le problème revient le mêmes si je fais ça avec ma matrice, je ne vois plus le fond...

Discussions similaires

  1. superposition de deux images avec transparence
    Par ol9245 dans le forum MATLAB
    Réponses: 3
    Dernier message: 27/10/2014, 10h45
  2. Superposition de deux images avec codage différent
    Par cedji dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 15/02/2012, 15h12
  3. "Merger" deux images avec une couleur de transparence
    Par MaelstroeM dans le forum VB.NET
    Réponses: 7
    Dernier message: 14/09/2007, 09h34
  4. Réponses: 2
    Dernier message: 26/03/2007, 12h05
  5. Image avec deux fonctions OnIDblClick
    Par Romainll93 dans le forum Delphi
    Réponses: 3
    Dernier message: 25/02/2007, 14h17

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