How Image Data Relates to a Colormap
When you display images using the
you can control how the range of pixel values maps to the range of
the colormap. For example, here is a 5-by-5 magic square displayed
as an image using the default colormap.
A = magic(5)
A = 5×5 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
im = image(A); axis off colorbar
A contains values between 1 and 25. MATLAB® treats
those values as indices into the colormap, which has 64 entries. Thus,
all the pixels in the preceding image map to the first 25 entries
in the colormap (roughly the blue region of the colorbar).
You can control this mapping with the
Image object. The default behavior shown in
the preceding diagram corresponds to the
for this property. Direct mapping is useful when you are displaying
images (such as GIF images) that contain their own colormap. However,
if your image represents measurements of some physical unit (e.g.,
meters or degrees) then set the
'scaled'. Scaled mapping uses the full range
of colors, and it allows you to visualize the relative differences
in your data.
im.CDataMapping = 'scaled';
'scaled' option maps the smallest value
A to the first entry in the colormap, and maps
largest value in
A maps to the last entry in the
colormap. All intermediate values of
A are linearly
scaled to the colormap.
As an alternative to setting the
'scaled', you can call the
imagesc function to get the same effect.
imagesc(A); axis off colorbar
If you change the colormap, the values in
scaled to the new colormap.
Scaled mapping is also useful for displaying pictorial images
that have no colormap, or when you want to change the colormap for
a pictorial image. The following commands display an image using the
gray colormap, which is different than
the original colormap that is stored with this image.
load clown image(X,'CDataMapping','scaled'); colormap(gray); axis off colorbar