将matlab.graphics.primitive.Image(imagesc的输出)转换为rgb数组

时间:2017-04-05 09:46:29

标签: image matlab

我正在使用MATLAB函数

imagesc(my_gray_valued_image)

使用像my_gray_valued_image这样的色彩映像可视化[1024x1024] double arrayjet,其值为0.0 - 1.0(灰色值)。

我想将输出存储为RGB图像([1024x1024x3] double array)。但是,函数的输出是一个Image对象(matlab.graphics.primitive.Image),它包含原始数组(Image.CData),但不允许提取带有颜色的图像。

在类似(虽然容易混乱)的问题(How to convert an indexed image to rgb image in MATLAB?)后,我尝试了以下内容,但这给了我一个纯蓝色的图像:

RGB = ind2rgb(my_gray_valued_image, jet);
imshow(RGB);

2 个答案:

答案 0 :(得分:3)

这里是任意色彩映射:

im = rand(5); % input [0-1] image
figure;
h = imagesc(im); % imagesc handle
title('imagesc output')
cdata = h.CData; % get image data (if you don't have variable 'im')
cm = colormap(h.Parent); % get axes colormap
n = size(cm,1); % number of colors in colormap
c = linspace(h.Parent.CLim(1),h.Parent.CLim(2),n); % intensity range
ind = reshape(interp1(c,1:n,im(:),'nearest'),size(im)); % indexed image
rgb = ind2rgb(ind,cm); % rgb image
figure;
imshow(rgb,'InitialMagnification','fit');
title('rgb image')

enter image description here

enter image description here

答案 1 :(得分:1)

您可以使用ind2rgb使用您选择的色彩图将强度图像转换为RGB;但请确保输入的范围是从1到色彩映射中的颜色数。这是因为ind2rgb将值1映射到第一种颜色,2映射到第二种颜色等。

im = rand(5,5); % example intensity image
cmap = jet(256); % desired colormap
result = ind2rgb(ceil(size(cmap,1)*im), cmap);

您获得蓝色图像的原因是ind2rgb将输入图像的值剪切到从1到色彩图中颜色数的范围。因此,如果输入图片的值介于01之间,则它们都会映射到1,即映射到色彩映射中的第一种颜色。