9.6.1 Colormap(颜色映射)
9.6.2 曲面图的颜色
9.6.3 Truecolor 真彩色
MATLAB图形可以生成丰富多样的颜色。你可能想知道怎么做到的。
Colormap(颜色映射)是用于将数值数据映射到颜色值的函数,常用于可视化和表达数据的特征。在MATLAB中,colormap函数用于设置当前图的颜色映射。
以下是关于colormaps的详细解释:
基本概念:Colormap是一个从数值数据到颜色值的映射函数。它将数据的不同值映射到不同的颜色,从而使得数据的特征可以通过可视化直观地呈现出来。每个数据值都会对应一个颜色值,形成一个颜色序列或调色板。
内置colormaps:MATLAB提供了许多内置的colormaps,包括'jet'、'hsv'、'gray'、'parula'等。不同的colormaps具有不同的颜色分布和视觉特点,您可以根据数据类型和可视化需求选择合适的colormap。
设置colormap:在MATLAB中,使用colormap函数可以设置当前图的颜色映射。语法如下:
colormap(map)
其中,map是一个包含RGB(红绿蓝)颜色值的矩阵。可以使用内置的colormaps,也可以创建自定义的colormap。
自定义colormaps:您可以根据自己的需求创建自定义的colormaps。一种简单的方法是通过插值生成一系列颜色值,然后将其传递给colormap函数。例如,可以使用interp1函数在指定的数据范围内生成一系列的颜色插值。
使用colormap的场景:colormap常用于可视化矩阵数据、表达梯度和等高线图以及制作颜色地图等领域。它帮助用户更好地理解和解释数据,将数据的模式和趋势通过颜色直观地展示出来。
总结来说,Colormap是一种将数值数据映射到颜色值的函数,常用于数据可视化。MATLAB提供了内置的colormaps,并允许用户创建自定义的colormaps来满足不同的可视化需求。Colormap可用于各种领域,如矩阵数据可视化、梯度和等高线图,以及制作颜色地图。
下面的脚本展示了从太空中看到的地球:
load earth
image(X); colormap(map)
axis image
"axis image"和"axis equal":这两个函数都用于调整坐标轴的纵横比例,以使图形在屏幕上显示时保持等比例缩放。但它们的作用有一些区别:
"axis image":这个函数会根据数据的真实尺寸来调整坐标轴的纵横比例,从而使图形的形状不发生扭曲。它会使得x轴和y轴的刻度在物理尺度上保持相等,但不一定等于z轴的刻度。
"axis equal":这个函数会将x轴、y轴和z轴的刻度都调整为相等的尺度,以使图形在各个方向上保持等比例缩放。它等价于设置"axis image"后再将z轴的刻度也设置为相等。
"colormap"中使用"hot":"colormap"函数用于设置图形的颜色映射。而"hot"是MATLAB中常用的一个预定义的colormap,它以黑色、红色、黄色和白色渐变来表示数据的不同数值,并常用于显示热度或温度相关的数据。
从"earth"加载的矩阵 X
的大小为257×250
。X
的每个元素是一个1到64之间的整数。例如,这是X
的3 × 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。下面是对这些函数的详细解释:
colormap(jet)
或 colormap('jet')
jet
常用于对高低值之间的渐变进行可视化,特别适用于用于表示温度、海拔高度、流速等连续数据的图表或图像。
% 创建一个具有渐变数据的矩阵
data = [1 2 3; 4 5 6; 7 8 9];
% 绘制颜色映射矩阵
imagesc(data)
colormap(jet)
colorbar
colormap(bone)
或 colormap('bone')
bone
常用于对高低值之间的渐变进行可视化,特别适用于用于表示密度、灰度级别等连续数据的图表或图像。通常在医学图像处理中视觉化骨骼结构时使用。
% 创建一个具有渐变数据的矩阵
data = [1 2 3; 4 5 6; 7 8 9];
% 绘制颜色映射矩阵
imagesc(data)
colormap(bone)
colorbar
colormap(flag)
或 colormap('flag')
flag
是MATLAB中预定义的一种颜色映射函数和调色板,用于将数据值映射到具有四段不同颜色的颜色映射。flag
常用于对数据进行分类或区域划分的可视化,特别适合用于表示离散数据标签或状态的图表或图像。
% 创建一个包含离散分类数据的矩阵
data = [1 1 1; 2 2 2; 3 3 3];
% 绘制颜色映射矩阵
imagesc(data)
colormap(flag)
colorbar
prism
是MATLAB中预定义的一种颜色映射函数和调色板,用于将数据值映射到具有六段不同颜色的颜色映射。功能:prism
函数生成一个具有六段不同颜色的颜色映射,每个颜色段均带有红、绿和蓝的组合。
使用示例:
colormap(prism)
或 colormap('prism')
colormap(ax, prism)
,其中 ax
是图像或坐标轴的句柄。自定义颜色映射范围:与其他颜色映射函数类似,默认情况下,prism
函数将整个数据范围映射到颜色映射。可以使用caxis
函数来定义特定的颜色映射范围。
caxis([lower_limit upper_limit])
这将限制prism
颜色映射的范围为 lower_limit
和 upper_limit
。
prism
函数的应用场景:prism
常用于对数据进行分类或区域划分的可视化,特别适合表示具有六个不同类别或状态的图表或图像。 % 创建一个包含离散分类数据的矩阵
data = [1 1 2; 2 3 3; 4 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)
注意64是colormap的默认长度。生成颜色映射的函数有一个可选参数,指定颜色映射的长度。
当你用一个矩阵参数(例如surf(z))绘制一个曲面图时,参数z指定了曲面的高度和颜色。作为一个例子,使用函数peaks可以生成一个带有几个峰和谷的表面:
z = peaks;
surf(z), colormap(jet), colorbar
(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"。
z = peaks(16)
:这行代码使用函数"peaks"生成一个16x16的网格数据。"peaks"函数生成一个正弦函数的二维数据,模拟了山地轮廓。
c = rand(16)
:这行代码使用"rand"函数生成一个16x16的随机数据矩阵。"rand"函数返回一个16x16的矩阵,其元素是0到1之间的随机数。这个随机矩阵将用作颜色映射中各点的数值。
surf(z, c)
:这行代码使用"surf"函数绘制三维曲面。参数z表示网格数据,而参数c表示每个网格点对应的颜色数据。这样,曲面上的每个点都会通过颜色映射根据c中的数值获得一个对应的颜色。
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
Truecolor 是一种图像表示方法,它使用24位色彩通道来表示每个像素的颜色。 在 Truecolor 图像中,每个像素由红色、绿色和蓝色三个颜色通道的强度值组成。 这种表示方法允许使用大约 16.7 百万种不同的颜色。
在 MATLAB 中,Truecolor 图像通常由一个 MN3 的矩阵表示,其中 M 和 N 分别表示图像的行数和列数。 矩阵中的每个元素代表一个像素,有三个值分别表示红、绿和蓝三个颜色通道的强度值。
下面是一个用于创建和显示 Truecolor 图像的示例代码:
% 创建 Truecolor 图像
image = zeros(100, 100, 3); % 创建一个空白的 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)
z(5,13)
的颜色的RGB值分别由c(5,13,1), c(5,13,2)和c(5,13,3)
给出。联系客服