我正在使用MATLAB函数
imagesc(my_gray_valued_image)
使用像my_gray_valued_image
这样的色彩映像可视化[1024x1024] double array
:jet
,其值为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);
答案 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')
答案 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
到色彩图中颜色数的范围。因此,如果输入图片的值介于0
和1
之间,则它们都会映射到1
,即映射到色彩映射中的第一种颜色。