#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]);