Создайте специальную цветовую полосу в Matlab

Мне нужно создать карту, чтобы показать, насколько близки некоторые значения к диапазону, и, как следствие, придать им цвет. При этом значения, находящиеся в этом диапазоне, должны иметь другой цвет.
Например: действительными могут считаться только результаты, находящиеся в пределах [-2 2]. Для других значений цвета должны показывать, насколько они далеки от этих пределов (-3 светлее, чем -5, темнее)
Я пытался использовать colorbar, но не могу настроить самоопределяемая цветовая шкала.
Есть идеи?? Заранее спасибо!


person Luis    schedule 27.06.2012    source источник


Ответы (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);
person Yanai Ankri    schedule 27.06.2012
comment
Довольно просто и довольно легко реализовать. Но в случае, если a меняется, меняется и масштаб. Как я могу это решить? - person Luis; 02.07.2012
comment
Вам нужно знать, какой цвет присваивать какому значению. Например, установите минимальное и максимальное значения черным цветом, а среднее значение — белым. Другой вариант — использовать процентили данных, что является более надежным. Как только вы решите это, отображение будет простым: замените в коде выше значения -10, 10, v1, v2, как вам нужно. - person Yanai Ankri; 08.07.2012

Вот некоторый код, который я только что собрал, чтобы продемонстрировать простое средство создания вашей собственной таблицы поиска и присвоения значений из нее изображению, с которым вы работаете. Я предполагаю, что ваши результаты находятся в 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)
person Ben A.    schedule 27.06.2012