最近使用matlab绘图过程中需要自定义colormap,发现定义颜色过少时colormap中使用的颜色只有设置的几种,没有很好的形成自然的过渡渐变。
1. 条纹式colormap
当用于定义colormap的颜色数量较小时,各个颜色变化时分界线明显。
% A中每一行代表定义的一种颜色(RGB数值表示)
A = [068 004 090
065 062 133
048 104 141
031 146 139
053 183 119
145 213 066
248 230 032]/255;
% 使用A中定义的colormap
figure;
colormap(A);
imagesc(rescale(D1)), title('Euclidean')
colorbar
2. 渐变式colormap
当用于定义colormap的颜色数量较小时,各个颜色变化时分界线明显。若想过渡的更为自然,将条纹式变为渐变式只需要在定义colormap式添加更多的颜色即可。一种简单的方法:首先定义几种关键颜色得到颜色矩阵
A
A
A,然后在这几个颜色值之间进行插值从而对矩阵
A
A
A中的颜色数量进行扩充,得到新的颜色矩阵
n
e
w
m
a
p
newmap
newmap,新的颜色矩阵就会产生更为自然的渐变效果。
A = [068 004 090
065 062 133
048 104 141
031 146 139
053 183 119
145 213 066
248 230 032]/255;
% 插值颜色数量
nColors = 256;
% 对 colormap 进行插值,通过插值可以将colormap从条纹式变为渐变式
newmap = interp1(1:size(A,1), A, linspace(1, size(A,1), nColors), 'linear');
figure
% 将newmap中定义的colormap 应用于图像
colormap(newmap);
imagesc(rescale(D1)), title('Euclidean')
colorbar
3.补充说明
3.1 通过在matlab的GUI界面操作也可以实现颜色矩阵的扩充。
(1)绘制好的图像
(2)工具栏中编辑选项卡
→
\to
→颜色图
(3)由于我们只在颜色矩阵
A
A
A中定义了 7 种颜色,因此编辑大小和颜色空间中Label此时的数值为 7。
(4)将编辑大小和颜色空间中Label的数值增大到256,可见此时已经由条纹式变为了渐变式,实现了和程序插值同样的效果。
Label表示颜色空间中的颜色数,其有效范围为 [1, 1000] 内的整数。
3.2 通过在matlab的GUI界面操作也可以实现颜色矩阵的定义。
在下图位置中可以通过GUI界面完成colormap中颜色的自定义。