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

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

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

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

您也可以使用 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)

请注意,对应于 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)

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

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

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

im.AlphaData = 0.5;

读取 JPEG 图像文件。

C = imread('ngc6543a.jpg');

imread 返回 650×600×3 数组 C

显示图像。

image(C)

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

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

输入参数

全部折叠

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

  • 向量或矩阵 - 此格式定义索引图像数据。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 之前推出

全部展开

另请参阅

函数

属性