Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

image

从数组显示图像

说明

示例

image(C) 会将数组 C 中的数据显示为图像。C 的每个元素指定图像的 1 个像素的颜色。生成的图像是一个 m×n 像素网格,其中 mn 分别是 C 中的行数和列数。这些元素的行索引和列索引确定了对应像素的中心。

示例

image(x,y,C) 指定图像位置。使用 xy 可指定与 C(1,1)C(m,n) 对应的边角的位置。要同时指定两个边角,请将 xy 设置为二元素向量。要指定第一个边角并让 image 确定另一个,请将 xy 设为标量值。图像将根据需要进行拉伸和定向。

image('CData',C) 将图像添加到当前坐标区中而不替换现有绘图。此语法是 image(C) 的低级版本。有关详细信息,请参阅图像的高级与低级版本

image('XData',x,'YData',y,'CData',C) 指定图像位置。此语法是 image(x,y,C) 的低级版本。

示例

image(___,Name,Value) 使用一个或多个名称-值对组参量指定图像属性。您可以使用上述语法中的任意输入参量组合指定图像属性。

image(ax,___) 将在由 ax 指定的坐标区中而不是当前坐标区 (gca) 中创建图像。选项 ax 可以位于上述语法中的任何输入参量组合之前。

示例

im = image(___) 返回创建的 Image 对象。使用 im 在创建图像后设置图像的属性。您可以使用上述语法中的任意输入参量组合指定此输出。如需图像属性和说明的列表,请参阅 Image 属性

示例

全部折叠

创建矩阵 C。显示 C 中数据的图像。向图形添加颜色栏以显示当前颜色图。

C = [0 2 4 6; 8 10 12 14; 16 18 20 22];
image(C)
colorbar

Figure contains an axes object. The axes object contains an object of type image.

默认情况下,图像的 CDataMapping 属性设置为 'direct',因此 image 会将 C 中的值解释为颜色图的索引。例如,与 C 中最后一个元素 (22) 对应的右下方像素使用颜色图的第 22 个颜色。

通过在创建图像时将 CDataMapping 属性设置为 'scaled',将值的范围缩放到当前颜色图的完整范围。

image(C,'CDataMapping','scaled')
colorbar

Figure contains an axes object. The axes object contains an object of type image.

您也可以使用 imagesc 函数缩放这些值,而不是使用 image(C,'CDataMapping','scaled')。例如,使用 imagesc(C)

放置图像,使其位于 x 轴上的 5 和 8 之间及 y 轴上的 3 和 6 之间。

x = [5 8];
y = [3 6];
C = [0 2 4 6; 8 10 12 14; 16 18 20 22];
image(x,y,C)

Figure contains an axes object. The axes object contains an object of type image.

请注意,对应于 C(1,1) 的像素居中显示在点 (5,3) 上。对应于 C(3,4) 的像素在点 (8,6) 上居中显示。image 在这两个点之间定位和定向该图像的其余部分。

创建 C 作为真彩色三维数组。将该数组的最后两页设为零,以便仅使用红色。

C = zeros(3,3,3);
C(:,:,1) = [.1 .2 .3; .4 .5 .6; .7 .8 .9]
C = 
C(:,:,1) =

    0.1000    0.2000    0.3000
    0.4000    0.5000    0.6000
    0.7000    0.8000    0.9000


C(:,:,2) =

     0     0     0
     0     0     0
     0     0     0


C(:,:,3) =

     0     0     0
     0     0     0
     0     0     0

显示 C 中数据的图像。

image(C)

Figure contains an axes object. The axes object contains an object of type image.

绘制一个线条,然后在该线条上方创建一个图像。返回图像对象。

plot(1:3)
hold on
C = [1 2 3; 4 5 6; 7 8 9];
im = image(C);

Figure contains an axes object. The axes object contains 2 objects of type line, image.

使图像半透明,这样线条就会在图像中透明呈现。

im.AlphaData = 0.5;

Figure contains an axes object. The axes object contains 2 objects of type line, image.

读取 JPEG 图像文件。

C = imread('ngc6543a.jpg');

imread 返回 650×600×3 数组 C

显示图像。

image(C)

Figure contains an axes object. The axes object contains an object of type image.

创建一个曲面图。然后,在曲面下添加一个图像。imagexy 平面中显示该图像。

Z = 10 + peaks;
surf(Z)
hold on 
image(Z,'CDataMapping','scaled')

Figure contains an axes object. The axes object contains 2 objects of type surface, image.

输入参数

全部折叠

图像颜色数据,指定为下列形式之一:

  • 向量或矩阵 - 此格式定义索引图像数据。C 的每个元素定义图像的 1 个像素的颜色。例如,C = [1 2 3; 4 5 6; 7 8 9];C 的元素映射到相关联的坐标区的颜色图中的颜色。CDataMapping 属性控制映射方法。

  • 由 RGB 三元组组成的三维数组 - 此格式定义使用 RGB 三元值的真彩色图像数据。每个 RGB 三元组定义图像的 1 个像素的颜色。RGB 三元组是三元素向量,指定颜色的红、绿和蓝分量的强度。三维数组的第一页包含红色分量,第二页包含绿色分量,第三页包含蓝色分量。由于图像使用真彩色代替颜色图的颜色,因此 CDataMapping 没有任何作用。

    • 如果 Cdouble 类型,则 RGB 三元值 [0 0 0][1 1 1] 分别对应于黑色和白色。

    • 如果 C 为整数类型,则该图像使用完整范围的数据确定颜色。例如,如果 C 为类型 uint8,则 [0 0 0][255 255 255] 分别对应于黑色和白色。如果 CData 为类型 int8,则 [-128 -128 -128][127 127 127] 分别对应于黑色和白色。

    • 如果 C 为类型 logical,则 [0 0 0][1 1 1] 分别对应于黑色和白色。

下图演示了两种颜色模型的 C 的相对维度。

Diagram of the color image data, or CData, for indexed colors and true colors. The CData for indexed colors is an m-by-n array. The CData for true colors is an m-by-n-by-3 array.

NaN 元素的行为未定义。

要改用 image 函数的低级版本,请将 CData 属性设为名称-值对组。例如,image('CData',C)

double 和整数数据类型之间转换

如果您使用向量或二维矩阵调用 image 函数并使用默认的 CDataMapping 值,则在 double 值和整数类型之间转换时,必须将数据值偏移 1。当 CDataMapping 设置为 'scaled' 时,此偏移不是必需的。

例如,如果 U8 包含 uint8 类型的索引图像数据,您可以使用以下语法将其转换为 double 类型:

D = double(U8) + 1;

要将索引图像数据从 double 类型转换为整数类型,请减去 1 并使用 round 确保所有值都为整数。例如,如果 D 包含 double 类型的索引图像数据,则使用以下语法将其转换为 uint8

U8 = uint8(round(D - 1));

在归一化的 double 和真彩色值之间转换

要将真彩色图像数据从整数类型转换为 double 类型,请重新缩放数据。例如,如果 RGB8uint8 类型的真彩色图像数据,则使用以下语法将其转换为 double

RGB = double(RGB8)/255;

要将真彩色图像数据从 double 类型转换为整数类型,请重新缩放数据并使用 round 确保所有值都为整数。例如,如果 RGBdouble 类型的图像数据,则使用以下语法将其转换为 uint8

RGB8 = uint8(round(RGB*255));

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

沿着 x 轴放置,以下列形式之一指定:

  • 二元素向量 - 将第一个元素用作 C(1,1) 的中心位置,将第二个元素用作 C(m,n) 的中心位置,其中 [m,n] = size(C)。如果 C 为三维数组,则 mn 为前两个维度。C 的其余元素的中心均匀分布在这两点之间。

    每个像素的宽度由以下表达式确定:

    (x(2)-x(1))/(size(C,2)-1)

    如果 x(1) > x(2),则图像左右翻转。

  • 标量 - 会以此位置作为 C(1,1) 的中心,并使后面的每个元素相隔一个单位。

注意

  • 如果 x 有两个以上的元素,image 将使用第一个和最后一个元素,而忽略其他元素。

  • 要改用低级版本的 image 函数,请使用名称-值参量设置 XData 属性。例如,image('XData',x,'YData',y,'CData',C)

  • 您无法在以交互方式将图像平移或缩放到图像的 x 轴或 y 轴范围以外,除非设置的坐标轴范围界限已超出图像边界。如果这些轴范围超出边界,则无此类限制。如果其他对象(例如,线条)占用坐标区,并延伸到图像边界以外,您可以平移或缩放到其他对象的边界,但不能越过边界。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime (自 R2023b 起) | duration (自 R2023b 起) | categorical (自 R2023b 起)

沿着 y 轴放置,以下列形式之一指定:

  • 二元素向量 - 将第一个元素用作 C(1,1) 的中心位置,将第二个元素用作 C(m,n) 的中心位置,其中 [m,n] = size(C)。如果 C 为三维数组,则 mn 为前两个维度。C 的其余元素的中心均匀分布在这两点之间。

    每个像素的高度由以下表达式确定:

    (y(2)-y(1))/(size(C,1)-1)

    如果 y(1) > y(2),则图像上下翻转。

  • 标量 - 会以此位置作为 C(1,1) 的中心,并使后面的每个元素相隔一个单位。

注意

  • 如果 y 有两个以上的元素,image 将使用第一个和最后一个元素,而忽略其他元素。

  • 要改用低级版本的 image 函数,请使用名称-值参量设置 YData 属性。例如,image('XData',x,'YData',y,'CData',C)

  • 您无法在以交互方式将图像平移或缩放到图像的 x 轴或 y 轴范围以外,除非设置的坐标轴范围界限已超出图像边界。如果这些轴范围超出边界,则无此类限制。如果其他对象(例如,线条)占用坐标区,并延伸到图像边界以外,您可以平移或缩放到其他对象的边界,但不能越过边界。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime (自 R2023b 起) | duration (自 R2023b 起) | categorical (自 R2023b 起)

Axes 对象。如果您不指定 Axes 对象,则 image 使用当前坐标区。

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: image([1 2 3],'AlphaData',0.5) 会显示半透明图像。

此处所列的属性只是一部分图像属性。有关完整列表,请参阅 Image 属性

颜色数据的映射方法,指定为 'direct''scaled'。使用该属性控制 CData 中的颜色数据值到颜色图的映射。CData 必须是用来定义索引颜色的向量或矩阵。如果 CData 是定义真彩色的三维数组,该属性不起作用。

这些方法具有以下作用:

  • 'direct' - 将值解释为当前颜色图中的索引。带小数部分的值舍取为最接近的整数。

    • 如果值为 doublesingle 类型,则小于或等于 1 的值将映射到颜色图中的第一个颜色。大于或等于颜色图长度的值将映射到颜色图中的最后一种颜色。

    • 如果值为 uint8uint16uint32uint64int8int16int32int64 类型,则小于或等于 0 的值将映射到颜色图中的第一个颜色。大于或等于颜色图长度的值将映射到颜色图中的最后一种颜色(或者最大可为该类型的范围限值)。

    • 如果值为 logical 类型,则值 0 将映射到颜色图中的第一个颜色,值 1 将映射到颜色图中的第二个颜色。

  • 'scaled' - 缩放值以使其跨度覆盖颜色范围。坐标区的 CLim 属性包含颜色范围。

透明度数据,指定为以下格式之一:

  • 标量 - 在整个图像中使用一致的透明度。

  • 大小与 CData 相同的数组 - 对每个图像元素使用不同的透明度值。

AlphaDataMapping 属性控制 MATLAB® 如何解释 alpha 数据透明度值。

示例: 0.5

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

AlphaData 值的解释,指定为下列值之一:

  • 'none' - 将值解释为透明度值。值 1 或更大的值表示完全不透明,值 0 或更小的值表示完全透明,介于 0 和 1 之间的值表示半透明。

  • 'scaled' - 将值映射到图窗的 alphamap 中。坐标区的最小和最大 alpha 范围确定分别映射到 alphamap 中第一个和最后一个元素的 alpha 数据值。例如,如果 alpha 范围是 [3 5],则小于或等于 3 的 alpha 数据值映射到 alphamap 中的第一个元素。大于或等于 5 的 alpha 数据值映射到颜色图中的最后一个元素。坐标区的 ALim 属性包含 alpha 范围。图窗的 Alphamap 属性包含 alphamap。

  • 'direct' - 将值解释为图窗的 alphamap 的索引。带小数部分的值向下舍取为最接近的整数:

    • 如果值为 doublesingle 类型,则小于或等于 1 的值将映射到 alphamap 中的第一个元素。等于或大于 alphamap 的长度的值映射到 alphamap 中的最后一个元素。

    • 如果值的类型为整数,则 0 或更小的值映射到 alphamap 中的第一个元素。等于或大于 alphamap 的长度的值映射到 alphamap 中的最后一个元素(或者最大可为该类型的范围限值)。整数类型有 uint8uint16uint32uint64int8int16int32int64

    • 如果值为 logical 类型,则值 0 将映射到 alphamap 中的第一个元素,值 1 将映射到 alphamap 中的第二个元素。

输出参量

全部折叠

Image 对象,以标量形式返回。使用 im 在创建图像后设置图像的属性。有关列表,请参阅 Image 属性

详细信息

全部折叠

图像的高级与低级版本

image 函数有两个版本:高级版本和低级版本。如果您使用的 image'CData' 作为输入参量,则您使用的是低级版本。否则,您使用的是高级版本。

image 的高级版本在绘图前调用 newplot 并设置以下坐标区属性:

  • Layer'top'。该图像显示在任何刻度线或网格线前面。

  • YDir'reverse'。沿 y 轴的值从上到下递增。要使值从上到下递减,请将 YDir 设置为 'normal'。此设置会反转 y 轴和图像。

  • View[0 90]

image 函数的低级版本不调用 newplot 且不设置这些坐标区属性。

提示

  • 要将图像数据从不同标准格式(如 TIFF)的图形文件读取到 MATLAB 中,请使用 imread。要将 MATLAB 图像数据写入图形文件,请使用 imwriteimreadimwrite 函数支持各种图形文件格式和压缩方案。

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开

另请参阅

函数

属性