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

将matlab.graphics.primitive.Image(imagesc的输出)转换为rgb阵列,image,matlab,Image,Matlab,我正在使用MATLAB函数 imagesc(my_gray_valued_image) 要可视化my_gray\u valued\u image:[1024x1024]双数组,使用颜色贴图(如jet)将值设置为0.0-1.0(灰度值) 我想将输出存储为RGB图像([1024x1024x3]双数组)。但是,该函数的输出是一个图像对象(matlab.graphics.primitive.Image),它包含原始数组(Image.CData),但不允许提取彩色缩放图像 在一个类似的问题(尽管有点混乱

我正在使用MATLAB函数

imagesc(my_gray_valued_image)
要可视化
my_gray\u valued\u image
[1024x1024]双数组
,使用颜色贴图(如
jet
)将值设置为0.0-1.0(灰度值)

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

在一个类似的问题(尽管有点混乱)之后,我尝试了以下方法,但这给了我一个普通的蓝色图像:

RGB = ind2rgb(my_gray_valued_image, jet);
imshow(RGB);
您可以使用选择的颜色贴图将强度图像转换为RGB;但请确保输入范围从
1
到colormap中的颜色数。这是因为
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
到颜色贴图中颜色数的范围内。因此,如果输入图像的值介于
0
1
之间,则它们都将映射到
1
,即,映射到颜色映射中的第一种颜色。

这里对于任意颜色映射:

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')


是的,感谢您的解释,这是一个优雅的解决方案,我将使用这个解决方案:)-将另一个解决方案标记为已接受,因为它更好地回答了问题的标题(从imagesc()函数的输出中提取图像)。是的,我完全同意:-)哇,因为我害怕提取imagesc()结果证明,输出并非真正的环境因素。我坚持使用路易斯·门多(Louis Mendo)的解决方案,但感谢您展示了它的工作原理。如果您有
imagesc
输入,它会使事情变得更简单:)