Fake colorbar for image
7 views (last 30 days)
Show older comments
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
0 Comments
Accepted Answer
Image Analyst
on 8 May 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.
More Answers (1)
Rik
on 8 May 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;
See Also
Categories
Find more on Red in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!