2014-01-30 2 views
2

У меня есть изображение grayscle. Я могу создать тепловую карту в Matlab, используя:heatmap to color image matlab

 I = imagesc(I); 

отображает значения интенсивности в цвете. Я хочу получить цветное изображение с помощью этой карты тепла. Как мне это сделать?

Это выход imagesc: This is the output of imagesc

ответ

5

Предположительно на «цветное изображение» вы имеете в виду в RGB или полноцветные изображения (массив изображения с тремя цветовыми каналами). И то, что вы называете «Heatmap», - это colormap, которое Matlab применяет по умолчанию к изображениям в оттенках серого (массивы изображений только с одним цветным каналом). Изображение в оттенках серого и цветная карта называются индексированным цветным изображением (подробнее об этом here). Вы можете использовать функцию ind2rgb конвертировать из индексированных цветов в RGB:

IMG_gray = rand(100); 
map = colormap; % Get the current colormap 
IMG_rgb = ind2rgb(IMG_gray,map); 

Обратите внимание, что по умолчанию в Matlab цветовые карты используются только 64 цветов довольно 256. Для того, чтобы получить более гладкие градации цвета вы можете установить цветовую палитру вручную через map = colormap(jet(256)); или map = colormap(hsv(256));.

Если вы хотите получить файл изображения, вы можете использовать imwrite, который может принимать как изображения RGB, так и индексированные цветные изображения с цветовыми картами в качестве входных данных.

+0

Большое спасибо. Это очень полезно. понял. – user570593

+0

'по умолчанию цветовые карты в Matlab используют только 64 цвета, а 256' Это, сэр, полезная информация. Благодаря! –

+1

@Jigg: Я знаю. В 2014 году все! Надеюсь, они когда-нибудь изменят его. Возможно, когда будет выпущена новая [Handle Graphics 2] (http://undocumentedmatlab.com/blog/hg2-update/). – horchler

3

Масштаб значения интенсивности в изображении как imagesc делает, и использовать цветовую палитру (jet по умолчанию):

N = 256; 
IN = round(N * (I-min(I(:)))/(max(I(:))-min(I(:)))); 
cmap = jet(N); % see also hot, etc. 
IRGB = ind2rgb(IN,cmap); 
+0

спасибо. понял. – user570593