Filter löschen
Filter löschen

Fake colorbar for image

7 Ansichten (letzte 30 Tage)
KAE
KAE am 8 Mai 2018
Bearbeitet: KAE am 8 Mai 2018
I would like to be able to show an image like the example below, but instead make a fake color scale that is not related to the image values. The scale would ideally look like a colorbar, but I would choose the number of colors in the scale, the text label of each color, and its RGB value. My example below might have 4 color patches: 'Red Pepper' [194 24 25], 'Green Pepper' [157 153 47], 'Purple Cloth' [134 94 157], and 'White Garlic' [255 255 255]. Or it could have a different number of color patches. I do not want to do any image processing on the image, just annotate it. Is this possible?
figure;
I = imread('peppers.png'); % Read in example image
imshow(I); % Show image
colorbar; % Not what we want, since it is a continuous color map which is automatically labelled 0, 0.2, 0.4, ...1
% Instead we want a color scale with with the color patch RGB values and text labels supplied by the user

Akzeptierte Antwort

Image Analyst
Image Analyst am 8 Mai 2018
Do you mean like this:
% Read in the color demo image.
[rgbImage, colorMap] = imread('peppers.png');
imshow(rgbImage, colorMap);
axis on;
title('Original Color Image', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
drawnow;
% 'Red Pepper' [194 24 25], 'Green Pepper' [114 24 55], 'Purple Cloth' [117 74 26], and 'White Garlic' [255 255 255].
cMap = [194 24 25;114 24 55; 117 74 26; 255 255 255]/255
colormap(cMap);
colorbar('Ticks',32:64:255,...
'TickLabels',{'Red Pepper','Green Pepper','Purple Cloth','White Garlic'},...
'FontSize', 20);
I think your color definitions are strange though. Purple and green seem switched.
  1 Kommentar
KAE
KAE am 8 Mai 2018
Bearbeitet: KAE am 8 Mai 2018
Yes, my mistake. Now corrected in the example, sorry!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Rik
Rik am 8 Mai 2018
As long as you're not using the colormap to show anything, you can use the method below. If you need to use the colormap, you can use ind2rgb.
I = imread('peppers.png'); % Read in example image
imshow(I); % Show image
h=colorbar;
cmap=[194 24 25;114 24 55;117 74 26;255 255 255];
cmap=cmap/255;
TickLabels={'Red Pepper','Green Pepper','Purple Cloth','White Garlic'};
Ticks=linspace(0,1,numel(TickLabels)+1);Ticks=Ticks(2:end)-diff(Ticks)/2;
colormap(cmap)
h.TickLabels=TickLabels;
h.Ticks=Ticks;
  1 Kommentar
KAE
KAE am 8 Mai 2018
This works great, as does the other answer. I wasn't sure what to do so I accepted the one with the screenshot.

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by