如何以编程方式创build自定义颜色映射?

我想在matlab中创build一个色彩表。 我想根据像素的灰度级淡化颜色。

例如:

from 255 to 160 -> white from 159 to 120 -> pink from 119 to 50 -> brown from 49 to 0 -> dark 

从文档 :

色彩映射是0.0到1.0之间的实数的m×3matrix。 每行是定义一种颜色的RGBvector。 颜色地图的第k行定义第k个颜色,其中map(k,:) = [r(k)g(k)b(k)])指定红色,绿色和蓝色的强度。

好吧,开始我们要创build一个m×3的matrix,在你的情况下,m是161:

 m = 161; map = zeros(m , 3); 

现在你想让底部变黑(我要用黑色),第50点变成棕色。 但以红色为例,因为它更容易。 黑色和红色分别为RGB三元组: [0,0,0][1,0,0]

好,所以目前我们的色彩图是黑色的。 我们知道我们想要map(50,:) = [1, 0 ,0]就是红色,但是现在我们需要一个梯度在右边? 因此,让我们使用linspace这个(注意,有一个更好的方法使用interp1而不是在这个答案的末尾linspace ):

 R0to50 = linspace(0,1,50)'; 

把这个放在地图上:

 map(1:50, 1) = R0to50; 

所以,现在让我们使用棕色,而不是红色,以获得从该链接的三重分割每个颜色分量255,所以我们的三重是t = [101, 67, 33]./255 。 好了,现在只需重复每种颜色的linspace过程:

 R = linspace(0,t(1),50); G = linspace(0,t(2),50); B = linspace(0,t(3),50); T = [R', G', B']; map(1:50, :) = T; 

现在重复您的每个其他节点。

例如:

 I = linspace(0,1,161); imagesc(I(:, ones(10))) colormap(map) 

在这里输入图像描述


每个通道单独使用linspace一次,并为每种颜色重复此操作的替代方法是使用线性插值。

创build一个matrix,每行是一个三色

 T = [0, 0, 0 %// dark 101, 67, 33 %// brown 255, 105, 180 %// pink 255, 255, 255 %// white 255, 255, 255]./255; %// white again -> note that this means values between 161 and 255 will be indistinguishable 

现在做一个向量,每个颜色应该在什么范围(即这个向量定义的颜色的间距,他们不需要有规律地/等距):

 x = [0 50 120 160 255]; 

最后,您可以使用一个简单的插值创build整个地图:

 map = interp1(x/255,T,linspace(0,1,255)); 

testing

 I = linspace(0,1,255); imagesc(I(ones(1,10),:)') colormap(map) 

在这里输入图像描述

或者,您可以使用FEX的 AdvancedColormap函数。 如果你需要一个平滑的色彩地图,你可以这样做:

 map = AdvancedColormap('kbpw',256,[0 50 120 255]/255); 
Interesting Posts