打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
9.6 颜色映射

9.6 色彩等

  • 9.6.1 Colormap(颜色映射)

  • 9.6.2 曲面图的颜色

  • 9.6.3 Truecolor 真彩色

9.6.1 Colormap(颜色映射)

MATLAB图形可以生成丰富多样的颜色。你可能想知道怎么做到的。

Colormap(颜色映射)是用于将数值数据映射到颜色值的函数,常用于可视化和表达数据的特征。在MATLAB中,colormap函数用于设置当前图的颜色映射。

以下是关于colormaps的详细解释:

  1. 基本概念:Colormap是一个从数值数据到颜色值的映射函数。它将数据的不同值映射到不同的颜色,从而使得数据的特征可以通过可视化直观地呈现出来。每个数据值都会对应一个颜色值,形成一个颜色序列或调色板。

  2. 内置colormaps:MATLAB提供了许多内置的colormaps,包括'jet'、'hsv'、'gray'、'parula'等。不同的colormaps具有不同的颜色分布和视觉特点,您可以根据数据类型和可视化需求选择合适的colormap。

  3. 设置colormap:在MATLAB中,使用colormap函数可以设置当前图的颜色映射。语法如下:

colormap(map)

其中,map是一个包含RGB(红绿蓝)颜色值的矩阵。可以使用内置的colormaps,也可以创建自定义的colormap。

  1. 自定义colormaps:您可以根据自己的需求创建自定义的colormaps。一种简单的方法是通过插值生成一系列颜色值,然后将其传递给colormap函数。例如,可以使用interp1函数在指定的数据范围内生成一系列的颜色插值。

  2. 使用colormap的场景:colormap常用于可视化矩阵数据、表达梯度和等高线图以及制作颜色地图等领域。它帮助用户更好地理解和解释数据,将数据的模式和趋势通过颜色直观地展示出来。

总结来说,Colormap是一种将数值数据映射到颜色值的函数,常用于数据可视化。MATLAB提供了内置的colormaps,并允许用户创建自定义的colormaps来满足不同的可视化需求。Colormap可用于各种领域,如矩阵数据可视化、梯度和等高线图,以及制作颜色地图。


下面的脚本展示了从太空中看到的地球:

load earth
image(X); colormap(map)
axis image

在MATLAB中,"axis image"和"axis equal"都是用于调整坐标轴的纵横比例的函数,但两者有一些差别。而使用"hot"作为colormap的参数来替代"map"可以产生不同的颜色映射效果。

  1. "axis image"和"axis equal":这两个函数都用于调整坐标轴的纵横比例,以使图形在屏幕上显示时保持等比例缩放。但它们的作用有一些区别:

    • "axis image":这个函数会根据数据的真实尺寸来调整坐标轴的纵横比例,从而使图形的形状不发生扭曲。它会使得x轴和y轴的刻度在物理尺度上保持相等,但不一定等于z轴的刻度。

    • "axis equal":这个函数会将x轴、y轴和z轴的刻度都调整为相等的尺度,以使图形在各个方向上保持等比例缩放。它等价于设置"axis image"后再将z轴的刻度也设置为相等。

  2. "colormap"中使用"hot":"colormap"函数用于设置图形的颜色映射。而"hot"是MATLAB中常用的一个预定义的colormap,它以黑色、红色、黄色和白色渐变来表示数据的不同数值,并常用于显示热度或温度相关的数据。

从"earth"加载的矩阵 X 的大小为257×250X 的每个元素是一个1到64之间的整数。例如,这是X3 × 3子矩阵(非洲东北部某地):

>> X(39:41,100:102)

ans =

    14    15    14
    10    16    10
    10    10    10

colormap 函数默认生成一个64 × 3的矩阵,其元素范围为0-1. 三列中的值分别表示红、绿、蓝(RGB)视频分量的强度。因此,该矩阵的每一行通过指定其RGB组件来定义特定的颜色. image函数将其参数的每个元素映射到colormap中的一行,以查找该元素的颜色。例如,X(40,101)的值为16. colormap的第16行有三个值0.6784 0.3216 0.1922.

地图颜色映射(colormap)也从"earth"加载。RGB的这些值指定了图中从顶部数第40个像素和从左侧数第101个像素的颜色。

下面验证一下:

>> cm = colormap(map);
cm(16,:)

ans =

    0.6784    0.3216    0.1922

MATLAB提供了许多用于生成颜色映射(colormap)的函数,例如jet(默认)、bone、flag和prism。下面是对这些函数的详细解释:

  1. jet函数:
    • 功能:jet函数生成一个"彩虹"色彩的颜色映射。它在低值处显示蓝色,中间值处显示绿色,高值处显示红色。
    • 示例代码:colormap(jet)colormap('jet')

jet常用于对高低值之间的渐变进行可视化,特别适用于用于表示温度、海拔高度、流速等连续数据的图表或图像。

% 创建一个具有渐变数据的矩阵
data = [1 2 34 5 67 8 9];

% 绘制颜色映射矩阵
imagesc(data)
colormap(jet)
colorbar
  1. bone函数:
    • 功能:bone函数生成一个黑白渐变的颜色映射,呈现出骨骼结构的效果。
    • 示例代码:colormap(bone)colormap('bone')

bone常用于对高低值之间的渐变进行可视化,特别适用于用于表示密度、灰度级别等连续数据的图表或图像。通常在医学图像处理中视觉化骨骼结构时使用。

% 创建一个具有渐变数据的矩阵
data = [1 2 34 5 67 8 9];

% 绘制颜色映射矩阵
imagesc(data)
colormap(bone)
colorbar
  1. flag函数:
    • 功能:flag函数生成一个四段不同颜色的颜色映射,每个颜色段都具有不同的饱和度和亮度。
    • 示例代码:colormap(flag)colormap('flag')

flag是MATLAB中预定义的一种颜色映射函数和调色板,用于将数据值映射到具有四段不同颜色的颜色映射。flag常用于对数据进行分类或区域划分的可视化,特别适合用于表示离散数据标签或状态的图表或图像。

% 创建一个包含离散分类数据的矩阵
data = [1 1 12 2 23 3 3];

% 绘制颜色映射矩阵
imagesc(data)
colormap(flag)
colorbar
  1. prism函数:prism是MATLAB中预定义的一种颜色映射函数和调色板,用于将数据值映射到具有六段不同颜色的颜色映射。
  • 功能:prism函数生成一个具有六段不同颜色的颜色映射,每个颜色段均带有红、绿和蓝的组合。

  • 使用示例:

    • 将颜色映射应用于当前图像:colormap(prism)colormap('prism')
    • 将颜色映射应用于特定图像或数据:colormap(ax, prism),其中 ax 是图像或坐标轴的句柄。
  • 自定义颜色映射范围:与其他颜色映射函数类似,默认情况下,prism函数将整个数据范围映射到颜色映射。可以使用caxis函数来定义特定的颜色映射范围。

   caxis([lower_limit upper_limit])

这将限制prism颜色映射的范围为 lower_limitupper_limit

  • 使用prism函数的应用场景:prism常用于对数据进行分类或区域划分的可视化,特别适合表示具有六个不同类别或状态的图表或图像。
  % 创建一个包含离散分类数据的矩阵
  data = [1 1 22 3 34 4 5];

  % 绘制颜色映射矩阵
  imagesc(data)
  colormap(prism)
  colorbar

此代码将创建一个图像,其中的离散分类数据将根据prism颜色映射显示不同的颜色段,以表示不同的分类或状态。


你可以用下面的语句很好地采样各种颜色映射,它显示了64条垂直带,每条都有不同的颜色:image(1:64),colormap(prism)

再比如生成一些随机的颜色

randmap(:,1) = rand(64,1);
randmap(:,2) = rand(64,1);
randmap(:,3) = rand(64,1);
image(1:64);colormap(randmap)

函数colorbar在图形中垂直或水平显示当前颜色映射,指示64种颜色是如何映射的。用地球的图像试试。

注意64是colormap的默认长度。生成颜色映射的函数有一个可选参数,指定颜色映射的长度。


9.6.2 曲面图的颜色

当你用一个矩阵参数(例如surf(z))绘制一个曲面图时,参数z指定了曲面的高度和颜色。作为一个例子,使用函数peaks可以生成一个带有几个峰和谷的表面:

z = peaks;
surf(z), colormap(jet), colorbar

颜色条表示z的最小元素(略小于 −6)映射到colormap的第一行(R = 0, G = 0, B = 0.5625),而最大元素(约8)映射到第64行(R = 0.5625, G = 0,B = 0)

你可以用第二个参数指定颜色,它的大小与第一个参数相同:

z = peaks(16); % generates a 16-by-16 mesh
c = rand(16);
surf(z, c), colormap(prism)

在这种形式的surf中,c的每个元素被用来确定z对应元素中点的颜色。默认情况下,MATLAB使用一个称为缩放映射的过程来从z(或c)的元素映射到colormap中的颜色。缩放的细节由axis命令决定。

在这个例子中,首先使用"peaks"函数生成一个16x16的网格数据存储在变量z中。然后使用"rand"函数生成一个16x16的随机数据矩阵存储在变量c中。接下来,使用"surf"函数将z和c作为参数传递进去,并使用"colormap"函数将颜色映射设置为"prism"。

  1. z = peaks(16):这行代码使用函数"peaks"生成一个16x16的网格数据。"peaks"函数生成一个正弦函数的二维数据,模拟了山地轮廓。

  2. c = rand(16):这行代码使用"rand"函数生成一个16x16的随机数据矩阵。"rand"函数返回一个16x16的矩阵,其元素是0到1之间的随机数。这个随机矩阵将用作颜色映射中各点的数值。

  3. surf(z, c):这行代码使用"surf"函数绘制三维曲面。参数z表示网格数据,而参数c表示每个网格点对应的颜色数据。这样,曲面上的每个点都会通过颜色映射根据c中的数值获得一个对应的颜色。

  4. colormap(prism):这行代码使用"colormap"函数将颜色映射设置为"prism"。"prism"是MATLAB中的一个预定义的颜色映射,它使用七种鲜艳的颜色循环显示数据,从紫色到红橙黄绿蓝。

通过将z作为曲面的高度数据,将c作为颜色数据,并使用"colormap"设置为"prism",代码实现了一个带有颜色映射的曲面图。这样,曲面的高度会影响形状,而颜色则会根据c的数值在颜色映射中进行对应。


可以利用该工具来指定颜色,以强调表面的属性。MATLAB文档中给出了以下示例:

z = peaks(40);
c = del2(z);
surf(z, c)
colormap hot

在这个示例中,函数del2用于计算表面z的离散拉普拉斯算子(Laplacian),该算子与表面的曲率有关。通过使用拉普拉斯算子生成一个颜色数组c,可以使具有相似曲率的区域以相同的颜色绘制。然后使用surf函数绘制表面z,并使用colormap hot命令指定颜色映射为热色调。在热色调中,较高的曲率对应较热的颜色。

接下来,将这种方式获得的表面与以下语句产生的表面进行比较:

surf(P)
colormap hot

在第二种情况下,使用surf函数绘制表面P(这个示例中未提供)并使用colormap hot命令指定颜色映射为热色调。在这种情况下,具有相似高度的区域将具有相同的颜色,这里的高度是相对于x-y平面的高度。

通过比较这两种情况,我们可以观察到,在第一种情况下,颜色强调表面的曲率,而在第二种情况下,颜色强调了相对于x-y平面的高度。通过使用不同的颜色表示方式,我们可以突出显示表面的不同属性。


surf(和相关的曲面函数)的其他形式有:

surf(x, y, z) % color determined by z
surf(x, y, z, c) % color determined by c

9.6.3 Truecolor 真彩色

Truecolor 是一种图像表示方法,它使用24位色彩通道来表示每个像素的颜色。 在 Truecolor 图像中,每个像素由红色、绿色和蓝色三个颜色通道的强度值组成。 这种表示方法允许使用大约 16.7 百万种不同的颜色。

在 MATLAB 中,Truecolor 图像通常由一个 MN3 的矩阵表示,其中 M 和 N 分别表示图像的行数和列数。 矩阵中的每个元素代表一个像素,有三个值分别表示红、绿和蓝三个颜色通道的强度值。

下面是一个用于创建和显示 Truecolor 图像的示例代码:

% 创建 Truecolor 图像
image = zeros(1001003);  % 创建一个空白的 100x100x3 矩阵

% 设置像素的颜色
image(:, :, 1) = 0.5;  % 设置红色通道的强度值为 0.5
image(:, :, 2) = 0.2;  % 设置绿色通道的强度值为 0.2
image(:, :, 3) = 0.8;  % 设置蓝色通道的强度值为 0.8

% 显示 Truecolor 图像
imshow(image);

在上述示例中,首先创建了一个空白的 Truecolor 图像矩阵 image,大小为 100x100x3。然后,通过设置每个像素的三个颜色通道的强度值,可以为图像中的像素分配相应的颜色。最后,使用 imshow 函数显示 Truecolor 图像。

Truecolor 图像广泛用于图像处理、计算机图形学、计算机视觉等领域。它可以更准确地表示图像的颜色和细节,以及进行复杂的颜色处理和编辑操作。

通过颜色图进行着色的技术称为索引着色——通过在颜色图中为每个数据点分配索引(行)来对表面进行着色。truecolet技术使用明确指定的RGB三元组为表面上色。下面是MATLAB文档中的另一个示例(它还演示了多维数组的使用):

z = peaks(25);
c(:,:,1) = rand(25);
c(:,:,2) = rand(25);
c(:,:,3) = rand(25);
surf(z, c)

c的三个“页”(由它的第三个下标表示)分别指定了用于为 z 中下标与 c 中前两个下标相同的点上色的RGB值。例如,点z(5,13)的颜色的RGB值分别由c(5,13,1), c(5,13,2)和c(5,13,3)给出。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
colormap函数(1)
Matlab之peaks,mesh,meshgrid函数
Matlab 画图修饰
查看并设置当前颜色图
Matlab中用到的一些函数
matlab画热力网格图_51CTO博客_MATLAB网格图 - 傲游5 5.3.8.2000
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服