Можно ли изменить масштаб «цветовой карты» в Matlab? - PullRequest
0 голосов
/ 18 января 2019

у меня 2 матрицы. Матрица A содержит значения от 0 до 1, а матрица B содержит значения от 0 до 90. Я хочу отобразить изображение с другим цветом для чисел в каждой матрице.

Когда я использую функцию colormap с:

figure; colormap(jet); imshow(A);

Отображаемое изображение имеет несколько уровней серого, когда у меня должно быть несколько цветов (потому что я использую jet).

Когда я использую функцию colormap с:

figure; colormap(jet); imshow(B);

Отображаемое изображение полностью белое, возможно потому, что мои значения выше 64 (что составляет максимум jet).

Как я могу решить эти две проблемы? Я прочитал много учебников на нескольких форумах, но не могу найти ответ ...

Большое спасибо за ответ на мою проблему!

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Вы можете указать масштабирование карты цветов и количество фактических цветов в карте цветов следующим образом:

figure; imshow( A, [0 1], 'Colormap', jet(100) );
figure; imshow( B, [0 100], 'Colormap', jet(100) );

Струя (100) указывает на 100 уникальных цветов в используемой цветовой карте.

0 голосов
/ 23 января 2019

Вы используете неправильную функцию для поставленной задачи.
imshow ожидает ввода массива N by M на 3 из каналов RGB изображения. Когда вы используете 2D-матрицу, функция предполагает, что это изображение в градациях серого (это похоже на репликацию его на 3 идентичные матрицы для создания этих трех каналов - если все каналы в RGB имеют одинаковые значения, вы получаете цвета в градациях серого). Вы можете использовать эту функцию вместе с картой цветов , чтобы получить цветную матрицу, но есть гораздо более удобные альтернативы.

Одна простая функция для получения цветного представления матрицы: imagesc или (image, если вы хотите масштабировать значения самостоятельно). Эта функция берет значения в вашей матрице и назначает им цвет из выбранной вами цветовой карты:

A = rand(10);
figure; colormap(jet); imagesc(A);

imagesc result

Другой вариант - pcolor, который работает немного по-другому, но дает аналогичный результат. pcolor прикрепляет значения к вершинам ячеек (в противоположность центру, как это делает imagesc) и интерполирует цвет в каждой ячейке из ее вершин. Полученная цветная матрица всегда меньше в одной строке и одном столбце, потому что для определения n пробелов (ячеек в цветной матрице) требуется n + 1 точек (значений в исходной матрице) ). Вот пример:

A = rand(10);
figure; colormap(jet); pcolor(A);
shading flat

pcolor result

0 голосов
/ 18 января 2019

Просто нормализуйте матрицу по ее максимальному значению, если значения больше 1. Поэтому для вашей матрицы B попробуйте:

imshow(B/max(B(:)))
...