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!
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!
Comme ceci :
Il suffit de passer l'une des deux images en couleurs vraies (RGB)
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);
En fait ca ne marche pas à tous les coups cette facon de faire?
Si on a ca par exemple:
On aura 2 fois la meme image sur la figure en noir et blanc
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);
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:
non?
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);
C'est en posant les bonnes questions que l'on obtient généralement les bonnes réponse :
- ce n'est pas une image noir&blanc mais une image en niveau de gris
- tu n'as jamais dis non plus que tu voulais afficher la même image
Donc :
- soit : Using Multiple Colormaps in a Single Figure
- soit : gray2ind + ind2rgb (non testé)
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:
Vous voyez mon erreur?
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(:))])
Merci
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');
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
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 ?
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:
Ca ne marche pas comme ca
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);![]()
Je te laisse trouver l'explication toi-même
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');![]()
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:
Merci.
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');
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 imageIl 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éeEnvoyé par documentation de IMSHOW
Partager