最近使用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中颜色的自定义。
在这里插入图片描述

4 推荐阅读

[1] MATLAB | 有关数值矩阵、颜色图及颜色列表的技巧整理

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐