custom colormap with missing colors

4 visualizzazioni (ultimi 30 giorni)
André
André il 4 Lug 2018
Commentato: André il 10 Lug 2018
If I create the following image, with 3 possible values: 1, 2 and 10.
im = zeros(128,128)
im(1:32,:) = 1
im(33:64,:) = 2
im(65:end,:) = 10
ax = imshow(im,[])
%I apply the following colormap:
cmap = [0.9020 0.0980 0.2941
0.2353 0.7059 0.2941
0.8000 0.8000 0.8000]
colormap(ax.Parent,cmap)
I obtain an image with only 2 colors, when the colormap has 3 colors. Why isn't the colormap being respected? I want these specific colors for each value of the image. And I want my colormap to include only these colors, no more and no less. And no, my image does not contain values from 3 to 9. It is just 1, 2 and 10 and it is supposed to be like this.
Any help appreciated
André

Risposta accettata

Stephen23
Stephen23 il 4 Lug 2018
Modificato: Stephen23 il 4 Lug 2018
You could:
1. specify the limits, and provide the axes handle when calling colormap:
imshow(im,[1,3]);
colormap(gca,cmap)
2. treat it as an indexed image (note that out-of-range indices are truncated to the end colors):
>> imshow(im,cmap)
3. convert it to a TrueColor (RGB) image:
>> [~,idx] = ismember(im,[1,2,10]);
>> rgb = ind2rgb(idx,cmap);
>> imshow(rgb)
  3 Commenti
Stephen23
Stephen23 il 4 Lug 2018
Modificato: Stephen23 il 4 Lug 2018
@André: Thank you. You might like to read these:
You can easily specify the patch 'CDataMapping' to be 'direct', in which case the patch CData corresponds one-to-one with the axes colormap, as does the colorbar. Like this:
>> cmap = [0,0,1;0,1,0;1,0,0;0,1,1;1,1,0;1,0,1]; % six ugly colors.
>> X = [0,1,0,1;1,2,1,2;1,2,1,2;0,1,0,1]; % four squares
>> Y = [0,0,1,1;0,0,1,1;1,1,2,2;1,1,2,2]; % four squares
>> patch(X,Y,[1;2;3;6],'FaceColor','flat','CDataMapping','direct')
>> colormap(cmap)
>> colorbar()
>> caxis([0.5,6.5])
Note the third input to patch: you can see how each patch C value corresponds to the colormap row/color. Note how all colormap colors are shown exactly in the colorbar, in the correct order:
A colorbar is just a narrow axes on one side of the figure, so you could easily create this yourself, which gives you complete control over its location, size, tick labels, etc.
André
André il 10 Lug 2018
Exactly what I needed. Thanks a lot.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by