我想将任何数字0<=f<=1
转换为四个类别green, yellow, orange and red
给定的rbg代码。我可以通过以下功能来实现:
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色图矩阵中添加更多行,但是我不知道如何。...
答案 0 :(得分:1)
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