Как мне получить цветовую карту из файла JPEG в MATLAB?

#image #matlab #image-processing #3d

#изображение #matlab #обработка изображений #3D

Вопрос:

У меня есть файл изображения поверхности Нептуна в формате jpg. Я намерен создать отображение текстур (см. Справку Matlab по этому вопросу). Я использовал команду imread с файлом, но файлы jpg не имеют цветовой карты (как правило, команда imread создает матрицу MxNx3, а цветовая карта представляет собой матрицу Mx3). Я хотел бы знать, как я мог это сделать.

Например, изображение более ценно, чем 1000 слов (иногда), моя цель — сделать что-то подобное этому примеру, но для Нептуна.

Комментарии:

1. Примечание: изображение может стоить 0 слов: spikedmath.com/168.html

2. @Jonas: ха-ха, очень хорошее наблюдение.

3. @kigurai: Большое вам спасибо за редактирование этого вопроса.

Ответ №1:

Массив MxNx3 представляет собой массив RGB, то есть в позиции (x, y) третье измерение соответствует триплету значений красного, зеленого и синего.

Чтобы перейти от изображения RGB к индексированному изображению с цветовой картой, вы используете функцию RGB2IND

 [indexedImage,colorMap] = rgb2ind(rgbImage, nColors); %# set nColors to e.g. 128 
 

Комментарии:

1. Большое вам спасибо за ваш ответ, который позволил мне вместе с помощью Matlab по отображению текстур решить мою проблему.

2. @Jonas если изображение уже проиндексировано, не могли бы вы сказать мне, как я могу получить цветовую карту?

3. @LakshmiNarayanan: если все, что у вас есть, это проиндексированное изображение, невозможно узнать, какой была цветовая карта, поскольку все, что содержит индексированное изображение, — это индексы в отдельном массиве, который определяет цвета.

Ответ №2:

Вот решение моего вопроса, основанное на ответе Джонаса:

 [X, map] = rgb2ind(imread('neptune.jpg'),128);
[x,y,z] = sphere(50);
x = 24764*x;
y = 24764*y;
z = 24764*z;
props.FaceColor= 'texture';
props.EdgeColor = 'none';
props.Cdata = flipud(X); % it is necessary to do this for getting the 
% appropiate image on the sphere
surface(x,y,z,props);
colormap(map);
axis equal;
view([71 14]);