создать собственную цветовую карту с пользовательскими ограничениями и плавным переходом цветов в Matlab - PullRequest
0 голосов
/ 28 марта 2019

Я хочу преобразовать любое число 0<=f<=1 в код rbg, заданный четырьмя категориями green, yellow, orange and red.Я могу добиться этого с помощью следующей функции:

function [rgb,myColor]=colorCode(f)
cm = [0 1 0;1 1 0;255/255 153/255 51/255;1 0 0];
colorID = max(1, sum(f > [0:1/length(cm(:,1)):1])); 
myColor = cm(colorID, :);
rgb = uint8(myColor*255+0.5);

Теперь я хотел бы сделать 2 улучшения:

1.- Выше код разделит интервал [0,1]в четырех равных частях, то есть:

[0,0.25]>green
[0.25,0.5]>yellow
[0.5,0.75]>orange
[0.75,1]>red

Но я хотел бы определить пользовательские интервалы, например:

[0,0.3]>green
[0.3,0.5]>yellow
[0.5,0.7]>orange
[0.7,1]>red

2.- Я хотел бы, чтобы переход между цветовыми интерваламибыть более гладким.Прямо сейчас между 0,25 и 0,26 цвет внезапно меняется с зеленого на желтый.Идея состояла бы в том, чтобы перейти от зеленого к желто-зеленому к желто-зеленому до желтого, и аналогично для других переходов.Теперь мне нужно добавить больше строк в матрицу цветовой карты cm, но я понятия не имею, как ....

1 Ответ

1 голос
/ 29 марта 2019
function [rgb,myColor]=colorCode(f)
n=length(f);
switch n
    case 1
        cm = [0 1 0;1 1 0;255/255 128/255 0/255;1 0 0;1 0 0];
        x=[0 0.3 0.5 0.7 1];
        cm = interp1(x,cm, linspace(0, 1, 255));
        colorID = max(1, sum(f > [0:1/length(cm(:,1)):1])); 
        myColor = cm(colorID, :); % returns your color
        rgb = uint8(myColor*255+0.5);
    otherwise
        rgb=zeros(n,3);
        myColor=rgb;
        for i=1:n
            [rgb(i,:),myColor(i,:)]=colorCode(f(i));
        end
end
...