When using ind2rgb, how do you use map as output argument?

10 views (last 30 days)
I am confused on what the 'map' is and how to create it. When I use the ind2rgb fucntion, I get an error becuase it says I did not use 'map.' I already have searched up the documentation for this and I am still confused on how to use it.

Accepted Answer

Steven Lord
Steven Lord on 1 Jul 2022
The map input to ind2rgb is the colormap for the image. The first input to ind2rgb represents indices into that colormap. So for example if I had a colormap:
map = [1 0 0; 0 1 0; 0 0 1]; % Color 1 is red, 2 is green, 3 is blue
Then my image will be values 1, 2, and 3 indicating whether this part of the image is red, green, or blue respectively.
rng default
im = randi(3, [4 4]) % Random image
im = 4×4
3 2 3 3 3 1 3 2 1 1 1 3 3 2 3 1
rgb = ind2rgb(im, map)
rgb =
rgb(:,:,1) = 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 1 rgb(:,:,2) = 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 rgb(:,:,3) = 1 0 1 1 1 0 1 0 0 0 0 1 1 0 1 0
All the 1's in im are translated to a value of 1 in the first page of rgb and 0's in the second and third pages. Similarly the 2's in im set the value of the corresponding elements of the second page of rgb to 1 and leave the first and third pages as 0. You can see if you look at im that the first row is blue, green, blue, and blue which you can see if you visualize the image.
image(rgb)
  7 Comments
Alexandar
Alexandar on 1 Jul 2022
Wow, I can't tell you how helpful this is and how much new coding techniques I learned. You're the absolute best @Steven Lord!

Sign in to comment.

More Answers (1)

Cris LaPierre
Cris LaPierre on 1 Jul 2022
It is the colormap to apply to your indexed image. See here. The indeces in the indexed image indicate which row of the colormap to use color that pixel. For a uint8 image, that means your colormap must have 256 rows.
[X,cmap] = imread('corn.tif');
imshow(X,cmap)
X(1,1) % index of pixel 1
ans = uint8 105
cmap(X(1,1),:) % corresponding color
ans = 1×3
0.2510 0.2392 0.2902
The easiest way to create it is to use the built in colormaps, though you can create your own in you want.
map = jet(256)
map = 256×3
0 0 0.5156 0 0 0.5312 0 0 0.5469 0 0 0.5625 0 0 0.5781 0 0 0.5938 0 0 0.6094 0 0 0.6250 0 0 0.6406 0 0 0.6562
figure
imshow(X,map)
  6 Comments
Image Analyst
Image Analyst on 1 Jul 2022
@Alexandar you can change certain indexed image values to be brighter. It will affect all pixels in the image with that value, not just certain pixels. For example this will make the turbo map but make it so that image pixels with the value of 0 show up as blue, 255 show up as red, and 128 show up as green.
cmap = turbo(256);
cmap(1,:) = [0,0,1] % Gray level 0 shows up as blue.
cmap(129,:) = [0,0,1] % Gray level 128 shows up as green.
cmap(256,:) = [1,0,0] % Gray level 255 shows up as red.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!