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

8 vues (au cours des 30 derniers jours)
Alexandar
Alexandar le 1 Juil 2022
Commenté : Image Analyst le 1 Juil 2022
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.

Réponse acceptée

Steven Lord
Steven Lord le 1 Juil 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 commentaires
Steven Lord
Steven Lord le 1 Juil 2022
Each row represents an RGB triplet. The first, [1 0 0] is essentially 100% red, 0% green, 0% blue. The second is 0% red, 100% green, 0% blue.
If you have vectors where two or all three components are present, that's a mix of colors. Red plus blue gives you magenta. I've made the line wider so it's easier to see.
plot(1:5, 1:5, 'Color', [1, 0, 1], 'LineWidth', 6, 'DisplayName', 'magenta')
If you have mostly green with some blue, you get cyan.
hold on % so all the lines show up in the same axes
plot(1:5, 10:-1:6, 'Color', [0, 1, 1], 'LineWidth', 6, 'DisplayName', 'cyan')
Red + green is yellow.
plot(6:10, 5:-1:1, 'Color', [1, 1, 0], 'LineWidth', 6, 'DisplayName', 'yellow')
If you specified say 0.5 for each, that's a form of gray.
plot(6:10, 6:10, 'Color', [0.5, 0.5, 0.5], 'LineWidth', 6, 'DisplayName', 'gray')
And there are a few predefined colors that let you specify them more simply in calls to plot. I'm just going to display this as one marker in the center, which is why I'm using the marker related properties in the plot call.
plot(5.5, 5.5, 'Marker', 'o', 'MarkerSize', 20, ...
'MarkerFaceColor', 'k', ... % 'k' is black, RGB [0 0 0]
'DisplayName', 'black')
legend show % Show the legend
Alexandar
Alexandar le 1 Juil 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!

Connectez-vous pour commenter.

Plus de réponses (1)

Cris LaPierre
Cris LaPierre le 1 Juil 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 commentaires
Alexandar
Alexandar le 1 Juil 2022
@Cris LaPierre, when you say you can create your own color maps, can you keep the same color map but change certain pixels to be brighter? Is that possible?
Image Analyst
Image Analyst le 1 Juil 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.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Orange dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by