Map grayscale to color using colormap

Alec Jacobson

February 19, 2011

weblog/

In matlab you can view a grayscale image with:
imshow(im)
Which for my image im shows:

matlab imshow grayscale

And you can also view this grayscale image using pseudocolors from a given colormap with something like:
imshow(im,'Colormap',jet(255))
Which shows:

matlab imshow colormap jet 255

But it's not obvious how to use the colormap to actually retrieve the RGB values we see in the plot. Here's a simple way to convert a grayscale image to a red, green, blue color image using a given colormap:
rgb = ind2rgb(gray2ind(im,255),jet(255));
Replace the 255 with the number of colors in your grayscale image. If you don't know the number of colors in your grayscale image you can easily find out with:
n = size(unique(reshape(im,size(im,1)*size(im,2),size(im,3))),1);
It's a little overly complicated to handle if im is already a RGB image. If you don't mind if the rgb image comes out as a uint8 rather than double you can use the following which is an order of magnitude faster:
rgb = label2rgb(gray2ind(im,255),jet(255));
Then with your colormaped image stored in rgb you can do anything you normally would with a rgb color image, like view it:
imshow(rgb);
which shows the same as above:

matlab imshow colormap jet 255

Possible function names include real2rgb, gray2rgb.