Как работает карта цветов

Я не могу понять, как работает colormap и как его использовать.

Я выполняю задание по программированию, где мне предоставляется некоторый код, в котором используется colormap, однако я не могу понять, что именно он делает.

Вот сжатый код:

colormap(gray);
h = imagesc(display_array, [-1 1]);

Здесь display_array содержит интенсивность пикселей изображения в градациях серого.

Я прочитал эту статью и немного понял, что colormap — это матрица с любым количеством строк и 3 столбцов со значениями от 0 до 1.

Я проверил значения интенсивности пикселей на моем изображении в градациях серого и нашел значения между -1 и 2. Теперь я не могу понять, как mapping встречается между этим изображением и colormap, как указано в статье выше. Просто представление высокого уровня о том, как это происходит, поможет.


person shiva    schedule 30.01.2017    source источник


Ответы (1)


При отображении изображения необходимо установить связь между значениями данных и цветом пикселей на экране, которые соответствуют этим значениям. Это цель палитры. Он буквально сопоставляет значение данных с цветом.

Как происходит это сопоставление, зависит от цветовых ограничений осей. Пределы цвета указывают, какое значение ваших данных должно отображаться на первое значение в палитре, а какое — на последнее значение в палитре. Вы можете настроить эти пределы для данного axes с помощью CLim или с помощью функции caxis.

По умолчанию imagesc (масштабированное изображение) устанавливает пределы цвета таким образом, что наибольшее значение ваших данных используется для верхнего предела цвета, а наименьшее значение используется для нижнего предела цвета. Это эквивалент

set(gca, 'CLim', [min(display_array(:)), max(display_array(:))])

В случае цветовой карты grey первое значение — черный, а последнее — белый. Это означает, что любые значения, меньшие или равные нижнему цветовому пределу, будут отображаться как черные, любые значения, большие или равные верхнему цветовому пределу, будут будут отображаться белым цветом, а все, что между ними, будет иметь оттенок серого, пропорциональный их значению.

Вы можете использовать функцию colormap, чтобы указать любую карту цветов, которую вы хотите. grey — это просто встроенная карта цветов для изображений в градациях серого. Формат палитры состоит в том, что каждая строка содержит три элемента (красный, зеленый, синий), и нижняя цветовая граница сопоставляется с первой записью, верхняя цветовая граница сопоставляется с последней, а данные линейно сопоставляются со всеми цветами, которые могут появляются между ними.

Однако в показанном вами примере вы указали пределы цвета как второй входной аргумент на imagesc и вручную заставил их быть [-1 1]. Это означает, что теперь -1 сопоставляется с первым значением в палитре (черным), а 1 сопоставляется с последним (белым). Поскольку у вас есть значения больше 1, все эти значения будут вынуждены быть белыми, поскольку верхний предел цвета равен 1.

person Suever    schedule 30.01.2017
comment
Спасибо за объяснение. Мое изображение имеет значения между -1 и 0, как указано в вопросе, но ваша неверная интерпретация помогла мне понять его еще лучше. - person shiva; 30.01.2017
comment
Я вот только не могу понять одну вещь, которую вы написали: You can adjust these limits for a given axes, о каких осях идет речь? - person shiva; 30.01.2017
comment
@shiva Оси, содержащие изображение. - person Suever; 30.01.2017