Мне нужно создать карту, чтобы показать, насколько близки некоторые значения к диапазону, и, как следствие, придать им цвет. При этом значения, находящиеся в этом диапазоне, должны иметь другой цвет.
Например: действительными могут считаться только результаты, находящиеся в пределах [-2 2]. Для других значений цвета должны показывать, насколько они далеки от этих пределов (-3 светлее, чем -5, темнее)
Я пытался использовать colorbar, но не могу настроить самоопределяемая цветовая шкала.
Есть идеи?? Заранее спасибо!
Создайте специальную цветовую полосу в Matlab
Ответы (2)
Вам нужно определить цветовую карту для диапазона значений, которые у вас есть.
Цветовая карта представляет собой матрицу N * 3, определяющую значения RGB для каждого цвета.
См. пример ниже для диапазона -10:10 и допустимых значений v1,v2:
v1=-3;
v2=+3;
a = -10:10;
graylevels=[...
linspace(0,1,abs(-10-v1)+1) , ...
ones(1, v2-v1-1) , ...
linspace(1,0,abs(10-v2)+1)];
c=repmat(graylevels , [3 1])';
figure;
imagesc(a);
colormap(c);
Вот некоторый код, который я только что собрал, чтобы продемонстрировать простое средство создания вашей собственной таблицы поиска и присвоения значений из нее изображению, с которым вы работаете. Я предполагаю, что ваши результаты находятся в 2D-массиве, и я просто использовал случайно назначенные значения, но концепция та же.
Я упоминаю о возможном использовании HSV в качестве схемы окраски. Просто обратите внимание, что для этого требуется, чтобы у вас была матрица m на n на 3. Верхний слой — это H — оттенок, 2-й — S — насыщенность, а 3-й — V или значение (светлый/темный). Просто установите H и S на любые значения, которые вы хотите для цвета, и измените V аналогичным образом, как показано ниже, и вы можете получить различные светлые и темные цвета, которые вы хотите.
% This is just assuming a -10:10 range and randomly generating the values.
randmat = randi(20, 100);
randmat = randmat - 10;
% This should just be a black and white image. Black is negative and white is positive.
figure, imshow(randmat)
% Create your lookup table. This will illustrate having a non-uniform
% acceptable range, for funsies.
vMin = -3;
vMax = 2;
% I'm adding 10 here to account for the negative values since matlab
% doesn't like the negative indicies...
map = zeros(1,20); % initialized
map(vMin+10:vMax+10) = 1; % This will give the light color you want.
%linspace just simply returns a linearly spaced vector between the values
%you give it. The third term is just telling it how many values to return.
map(1:vMin+10) = linspace(0,1,length(map(1:vMin+10)));
map(vMax+10:end) = linspace(1,0,length(map(vMax+10:end)));
% The idea here is to incriment through each position in your results and
% assign the appropriate colorvalue from the map for visualization. You
% can certainly save it to a new matrix if you want to preserve the
% results!
for X = 1:size(randmat,1)
for Y = 1:size(randmat,2)
randmat(X,Y) = map(randmat(X,Y)+10);
end
end
figure, imshow(randmat)