如何以编程方式创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);