dear matlab developers,
i have a double matrix (MxN). is there a way to convert it to RGB?
when i use imagesc(matrix), all the values are color coded and displayed, but is there a way to write the RGB values into a new array (MxNx3)?
br philipp

 採用された回答

Matt Fig
Matt Fig 2012 年 8 月 6 日

6 投票

I wonder if this is what you mean, Philipp?
% Say this is the given matrix:
G = rand(10,10)*300 - 100;
% Use IMAGESC to plot G.
figure('pos',[100 100 1000 800]);
% colormap(copper) % You realize this affects final image (H)?
subplot(1,2,1)
imagesc(G);
title('IMAGESC (MxN)')
% Now make an RGB image that matches display from IMAGESC:
C = colormap; % Get the figure's colormap.
L = size(C,1);
% Scale the matrix to the range of the map.
Gs = round(interp1(linspace(min(G(:)),max(G(:)),L),1:L,G));
H = reshape(C(Gs,:),[size(Gs) 3]); % Make RGB image from scaled.
subplot(1,2,2)
image(H) % Does this image match the other one?
title('IMAGE (MxNx3)')

5 件のコメント

Philipp
Philipp 2012 年 8 月 8 日
編集済み: Philipp 2012 年 8 月 8 日
Hi Matt, thanks for you helpful answer, it really addresses the problem I was struggling with. I found it also to be useful to create the lookup table directly from jet(1:1000) without the need of an interpolation.
br philipp
Seth
Seth 2013 年 5 月 1 日
This is very helpful Matt - solved my problem as well - very efficiently I might add.
The only thing I would add is that if you don't want to display a figure during this process (just work with data), then you need to modify the following lines:
Change: C = colormap; % Get the figure's colormap.
To: C = jet(64); %State the name of the colormap and the number of levels
For whatever reason, the function "colormap" creates and displays an empty window where as directly defining the colormap by name and number of levels suppresses the creation of a new figure.
Thanks again for the great piece of code.
Bruno
Bruno 2014 年 1 月 31 日
Such beatiful peace of code. I'm very thankful!
Mathieu
Mathieu 2015 年 8 月 12 日
Thank you so Much Matt, very helpful!!
DGM
DGM 2023 年 1 月 15 日
You could also use ind2rgb() with the desired colortable.
% create a 2D array that's not in standard image data scale
myarray = repmat(linspace(-1,1,200),[100,1]);
% create whatever color table
CT = jet(256);
% rescale to index range (multiple ways to do this)
%scaledpict = round(rescale(double(myarray),1,size(CT,1))); % R2017b+
%scaledpict = gray2ind(mat2gray(myarray),size(CT,1)); % IPT
scaledpict = round(1 + mat2gray(myarray)*(size(CT,1)-1));
% convert to RGB
outpict = ind2rgb(scaledpict,CT);
% display it
imshow(outpict)
% or save it
imwrite(outpict,'mypicture.png')

サインインしてコメントする。

その他の回答 (3 件)

Jurgen
Jurgen 2013 年 5 月 1 日

1 投票

The FEX has mat2im and real2rgb. Can recommend both!

1 件のコメント

Jurgen
Jurgen 2013 年 5 月 1 日
Just noticed this thread was old...

サインインしてコメントする。

Image Analyst
Image Analyst 2012 年 8 月 6 日

0 投票

rgbImage = cat(3, redChannel, greenChannel, blueChannel);
Cast to uint8 if you want to display or save to a file. Scale to 0-255 if it's not already in that range. mat2gray() might help.

カテゴリ

ヘルプ センター および File ExchangeColor and Styling についてさらに検索

タグ

質問済み:

2012 年 8 月 6 日

コメント済み:

DGM
2023 年 1 月 15 日

Community Treasure Hunt

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

Start Hunting!

Translated by