Main Content

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

imshow

显示图像

说明

imshow(I) 在图窗中显示灰度图像 Iimshow 使用图像数据类型的默认显示范围,并优化图窗、坐标区和图像对象属性以便显示图像。

示例

imshow(I,[low high]) 显示灰度图像 I,以二元素向量 [low high] 形式指定显示范围。有关详细信息,请参阅 DisplayRange 参量。

imshow(I,[]) 显示灰度图像 I,根据 I 中的像素值范围缩放灰度显示。imshow 使用 [min(I(:)) max(I(:))] 作为显示范围。imshowI 中的最小值显示为黑色,将最大值显示为白色。有关详细信息,请参阅 DisplayRange 参量。

示例

imshow(RGB) 在图窗中显示真彩色图像 RGB

示例

imshow(BW) 在图窗中显示二值图像 BW。对于二值图像,imshow 将值为 0(零)的像素显示为黑色,将值为 1 的像素显示为白色。

示例

imshow(X,map) 显示具有颜色图 map 的索引图像 X

示例

imshow(filename) 显示存储在由 filename 指定的图形文件中的图像。

示例

imshow(___,Name=Value) 使用名称-值参量控制运算的各个方面来显示图像。

himage = imshow(___) 返回 imshow 创建的图像对象。

imshow(Im,R) 显示图像 Im 以及相关联的二维空间参照对象 R。第一个参量 Im 可以是灰度图像 I、真彩色图像 RGB、二值图像 BW,或是这些类型之一的图像的文件名 filename

示例

imshow(X,R,map) 显示索引图像 X 以及相关联的二维空间参照对象 R 和颜色图 map

示例

全部折叠

使用 imshow 函数显示 RGB(真彩色)、灰度、二值或索引图像。

显示 RGB 图像

将示例 RGB 图像 peppers.png 读入 MATLAB® 工作区。

rgbImage = imread("peppers.png");

使用 imshow 显示 RGB 图像。

imshow(rgbImage)

显示灰度图像

使用 im2gray 函数将 RGB 图像转换为灰度图像。

grayImage = im2gray(rgbImage);

使用 imshow 显示灰度图像。

imshow(grayImage)

显示二值图像

通过使用阈值化将灰度图像转换为二值图像。

meanVal = mean(grayImage,"all");
binaryImage = grayImage >= meanVal;

使用 imshow 显示二值图像。

imshow(binaryImage)

显示索引图像

将示例索引图像 corn.tif 读入 MATLAB 工作区。

[corn_indexed,map] = imread("corn.tif");

使用 imshow 显示索引图像。

imshow(corn_indexed,map)

显示存储在文件中的图像。

filename = "peppers.png";
imshow(filename)

将示例灰度三维体图像 mri.mat 加载到工作区的变量 D 中。使用 squeeze 函数去除三维体的单一维度。

load("mri.mat");
vol = squeeze(D);

从三维体的中间选择一个切片。使用 copper 颜色图显示切片,并将显示范围缩放至像素值范围。

sliceZ = vol(:,:,13);
imshow(sliceZ,[],Colormap=copper)

使用 colormap 函数更改图像的颜色图。

colormap(hot)

将真彩色 (RGB) 图像读入工作区中。该图像的数据类型是 uint8

RGB = imread("peppers.png");

提取图像的绿色通道。绿色通道是第二个颜色平面。

G = RGB(:,:,2);
imshow(G)

创建一个用于检测图像水平边缘的滤波器。

filt = [-1 -1 -1; 0 0 0; 1 1 1];

使用 filter2 函数对图像的绿色通道进行滤波。将得到一个数据类型为 double 的图像,最小值为 -422,最大值为 656。滤波后的图像中具有大幅值的像素表示强边缘。

edgeG = filter2(filt,G);

使用 imshow 和默认显示范围显示滤波后的图像。对于数据类型为 double 的图像,默认显示范围为 [0, 1]。图像显示为黑白,因为滤波后的像素值超出范围 [0, 1]。

imshow(edgeG)

显示滤波后的图像,并将显示范围缩放为图像中的像素值。图像以完整范围的灰度值显示。

imshow(edgeG,[])

corn.tif 文件中的灰度图像读取到工作区中。此图像的灰度版本是文件中的第二个图像。

corn_gray = imread("corn.tif",2);

选择图像的一小部分。使用 imshow 以 100% 放大倍率显示细节图像。

corn_detail = corn_gray(1:100,1:100);
imshow(corn_detail)

使用 InitialMagnification 名称-值参量以 1000% 放大倍率显示图像。默认情况下,imshow 执行像素值的最近邻点插值。图像有块伪影。

imshow(corn_detail,InitialMagnification=1000)

以 1000% 放大倍率显示图像,指定双线性插值方法。图像看起来更平滑。

imshow(corn_detail,InitialMagnification=1000,Interpolation="bilinear")

将灰度图像读入工作区。显示图像并获取由 imshow 函数创建的 Image 对象。

I = imread("pout.tif");
hIm = imshow(I)

hIm = 
  Image with properties:

           CData: [291x240 uint8]
    CDataMapping: 'scaled'

  Use GET to show all properties

显示 Image 对象的 XDataYData 属性。坐标区范围显示图像的空间范围。默认情况下,空间范围等于图像的大小。

spatialExtentIm = [hIm.XData; hIm.YData]
spatialExtentIm = 2×2

     1   240
     1   291

创建与图像相关联的空间参照对象。使用参照对象设置世界坐标系中的 x 轴和 y 轴范围。

RI = imref2d(size(I));
RI.XWorldLimits = [0 3];
RI.YWorldLimits = [2 5];

显示图像,指定空间参照对象。获取由 imshow 函数创建的空间参照 Image 对象。

hRef = imshow(I,RI);

显示空间参照 Image 对象的 XDataYData 属性。坐标区范围现在位于空间参照对象指定的世界坐标系范围内。hRef.XDataRI.XWorldLimits(以及类似的 href.YDataRI.YWorldLimits)之间的差异是因为前者测量边缘像素的中心之间的距离,而后者测量边缘像素的外边界之间的距离。

spatialExtentRef = [hRef.XData; hRef.YData]
spatialExtentRef = 2×2

    0.0063    2.9937
    2.0052    4.9948

输入参数

全部折叠

灰度图像,指定为矩阵。灰度图像可以是任何数值数据类型。

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

真彩色图像,指定为 m×n×3 数组。

如果您指定数据类型为 singledouble 的真彩色图像,则值应在 [0, 1] 范围内。如果像素值超出此范围,则可以使用 rescale 函数将像素值缩放到范围 [0, 1] 内。当输入图像为真彩色时,DisplayRange 参量不起作用。

数据类型: single | double | uint8 | uint16

二值图像,指定为矩阵。

数据类型: logical

索引图像,指定为由正整数组成的二维矩阵。X 中的值是指向 map 指定的颜色图的索引。

数据类型: single | double | uint8 | logical

与索引图像 X 关联的颜色图,指定为 c×3 矩阵。map 的每行都是一个包含三个元素的 RGB 三元组,指定颜色图中单个颜色的红、绿和蓝分量。当 map 的数据类型为 singledouble 时,矩阵的值在 [0, 1] 范围内。

数据类型: single | double | uint8

文件名,指定为字符串标量或字符向量。图像必须可由 imread 函数读取。imshow 函数显示图像,但不将图像数据存储在 MATLAB® 工作区中。如果该文件包含多个图像,则 imshow 显示文件中的第一个图像。

示例: "peppers.png"

数据类型: string | char

灰度图像显示范围,指定为二元素向量。有关详细信息,请参阅 DisplayRange 名称-值参量。

示例: [50 250]

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

与输入图像相关联的二维空间参照对象,指定为 imref2d 对象。

名称-值参数

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

示例: imshow("board.tif",Border="tight") 显示文件名为 board.tif 的图像,且图窗中该图像周围没有留白。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: imshow("board.tif","Border","tight") 显示文件名为 board.tif 的图像,且图窗中该图像周围没有留白。

图窗窗口边框留白,指定为 "tight""loose"。当设置为 "loose" 时,图窗窗口中图像周围留有空白。当设置为 "tight" 时,图窗窗口中图像周围不留空白。

如果图像非常小或者该图窗除了包含图像及其坐标区之外还包含其他对象,无论如何设置该参量,imshow 可能都会使用边框留白。

数据类型: char

坐标区的颜色图,指定为由范围 [0, 1] 内的值组成的 c×3 矩阵。矩阵的每行都是一个包含三个元素的 RGB 三元组,指定颜色图中单个颜色的红、绿和蓝分量。使用此参量可以查看假彩色灰度图像。如果指定空的颜色图 ([]),则 imshow 函数会忽略该参量。

示例: cmap = copper; imshow("board.tif",Colormap=cmap)

数据类型: double

显示灰度图像的范围,指定为 [low high] 形式的二元素向量。imshow 函数将值 low(以及任何小于 low 的值)显示为黑色,并将值 high(以及任何大于 high 的值)显示为白色。使用默认数量的灰度级别时,介于 lowhigh 之间的值显示为灰色的中间色调。

如果您指定空矩阵 ([]),则 imshow 使用 [min(I(:)) max(I(:))] 的显示范围。换句话说,I 中的最小值是黑色,最大值是白色。

如果未指定显示范围,则 imshow 根据图像数据类型选择默认显示范围。

  • 如果 I 是整数类型,则 DisplayRange 默认为该整数类的最小和最大可表示值。例如,uint16 数组的默认显示范围是 [0, 65535]。

  • 如果 I 的数据类型为 singledouble,则默认显示范围是 [0, 1]。

注意

除了图像由文件名指定时外,其他情况下包含参量名称都是可选的。imshow(I,[low high]) 语法等效于 imshow(I,DisplayRange=[low high])。如果使用文件名调用 imshow,则必须指定 DisplayRange 名称-值参量。

示例: DisplayRange=[10 250]

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

图像显示的初始放大倍率,指定为数值标量或 "fit"。如果设置为 100,则 imshow 在 100% 放大倍率下显示图像(每个图像像素对应一个屏幕像素)。如果设置为 "fit",则 imshow 缩放整个图像以适合窗口。

首先,imshow 会尝试以指定的放大倍率显示整个图像。如果放大倍率值很大以至于图像太大而无法在屏幕上显示,则 imshow 在适合屏幕大小的最大放大倍率下显示该图像。

如果图像显示在图窗中时其 WindowStyle 属性设置为 "docked",则 imshow 在适合图窗大小的最大放大倍率下显示该图像。

注意:如果指定坐标区的位置,则 imshow 忽略您可能已指定的任何初始放大倍率并默认设置为 "fit" 行为。

当您将 imshowReduce 名称-值参量结合使用时,初始放大倍率必须为 "fit"

MATLAB Online™ 中,InitialMagnification 设置为 "fit" 且不能更改。

示例: InitialMagnification=80

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

插值方法,指定为 "nearest""bilinear"。MATLAB 通过插值在屏幕上显示图像的缩放版本。您选择的值不会影响图像数据。请根据图像内容和要实现的效果选择插值方法:

  • "nearest" - 最近邻点插值。位于 (x, y) 的像素值是原始图像中与 (x, y) 最邻近的像素值。当有少量表示明显不同类别的像素值时,或当您要在高度放大的视图中查看各个像素时,此方法最合适。

  • "bilinear" - 双线性插值。位于 (x, y) 的像素值是原始图像中该位置周围像素的加权平均值。为了最大限度地减少显示伪影,当您缩小图像时,imshow 函数会执行抗锯齿功能。此方法在几乎所有其他情况下都非常合适。

图像对象的父坐标区,指定为 Axes 对象或 UIAxes 对象。使用 Parent 名称-值参量构建一个 UI,用于控制 FigureAxes 属性。

子采样图像的指示符,指定为数值或逻辑值 true (1) 或 false (0)。此参量仅在与 TIFF 文件的名称一起使用时才有效。使用 Reduce 参量可显示非常大的图像的概览图。

数据类型: logical

非默认坐标系的 X 坐标轴范围,指定为二元素向量。该参量通过指定图像 XData 创建非默认的空间坐标系。该值可以拥有两个以上的元素,但 imshow 仅使用第一个和最后一个元素。

示例: XData=[100 200]

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

非默认坐标系的 Y 坐标轴范围,指定为二元素向量。该值可以拥有两个以上的元素,但 imshow 仅使用第一个和最后一个元素。

示例: YData=[100 200]

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

输出参量

全部折叠

imshow 函数创建的图像,指定为图像对象。

提示

  • 要在创建图像后更改颜色图,请使用 colormap 命令。

  • 可以将 imshowtiledlayoutnexttile 函数结合使用,在同一个图窗中显示多个具有不同颜色图的图像。

  • 您可以在调用 imshow 后使用 hold on 命令在 imshow 创建的坐标区上创建一个坐标区。

  • 可以将图像查看器用作集成环境,以显示图像并执行常见的图像处理任务。

  • 可以使用 iptsetpref 函数设置 Image Processing Toolbox™ 预设项以修改 imshow 的行为。

  • 使用 -nojvm 选项启动 MATLAB 时,不支持 imshow 函数。

  • 实时编辑器中,图窗标题可能会截断。要确保整个标题可见,请将父坐标区对象的 PositionContraint 属性设置为 "outerposition"。更新属性值的语句应置于 imshow 函数之后,title 函数之前。

    I = imread("peppers.png");
    imshow(I)
    ax = gca;
    ax.PositionConstraint = "outerposition";
    title("Peppers");
    如果使用 Parent 名称-值参量指定父坐标区,请设置指定的父坐标区对象的 PositionConstraint 属性。有关坐标区位置属性的更多详细信息,请参阅控制坐标区布局

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开