Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

导入图像

要将图形文件中的数据导入到 MATLAB® 工作区,请使用 imread 函数。使用此函数可以从许多具有标准文件格式的文件中导入数据,这些文件格式包括:标记图像文件格式 (TIFF)、图形交换格式 (GIF)、联合图像专家组 (JPEG) 和可移植网络图形 (PNG) 格式。关于支持格式的完整列表,请参阅 imread 参考页。

以下示例将 JPEG 格式的文件中存储的图像数据以数组 I 的形式读取到 MATLAB 工作区:

I = imread('ngc6543a.jpg');

imread 将工作区中的图像表示为 uint8 类的多维数组。数组的维度取决于数据的格式。例如,imread 使用三个维度表示 RGB 颜色图像:

whos I
  Name      Size                           Bytes  Class

  I       650x600x3                      1170000  uint8 array

Grand total is 1170000 elements using 1170000 bytes

要更大程度地控制 TIFF 文件的读取,请使用 Tiff 对象 - 有关详细信息,请参阅从 TIFF 文件中读取图像数据和元数据

获取有关图像文件的信息

如果有标准图形格式的文件,可使用 imfinfo 函数获取有关其内容的信息。imfinfo 函数返回包含有关该文件的信息的一个结构体。结构体中的字段根据文件格式的不同而不同,imfinfo 始终返回一些基本信息,包括文件名、上次修改日期、文件大小和格式。

以下示例返回联合图像专家组 (JPEG) 格式的文件的相关信息:

info = imfinfo('ngc6543a.jpg')
info = 

           Filename: 'matlabroot\toolbox\matlab\demos\ngc6543a.jpg'
        FileModDate: '01-Oct-1996 16:19:44'
           FileSize: 27387
             Format: 'jpg'
      FormatVersion: ''
              Width: 600
             Height: 650
           BitDepth: 24
          ColorType: 'truecolor'
    FormatSignature: ''
    NumberOfSamples: 3
       CodingMethod: 'Huffman'
      CodingProcess: 'Sequential'
            Comment: {'CREATOR: XV Version 3.00b  Rev: 6/15/94  Quality =...'}

从 TIFF 文件中读取图像数据和元数据

虽然可以使用 imread 从 TIFF 文件中导入图像数据和元数据,但该函数有一些局限性。例如,TIFF 文件可以包含多个图像,并且每个图像可以有多个子图像。虽然可以使用 imread 从多图像 TIFF 文件中读取所有图像,但无法访问子图像。使用 Tiff 对象可以从 TIFF 文件中读取图像数据、元数据和子图像。构造的 Tiff 对象表示与 TIFF 文件的连接,并提供对 LibTIFF 库中的众多例程的访问。

下面的示例分步介绍了如何使用 Tiff 对象的方法和属性从 TIFF 文件读取子图像。为充分利用 Tiff 对象,请熟悉 TIFF 规范和技术说明。请参阅 LibTIFF - TIFF Library and Utilities

从 TIFF 文件中读取子图像

TIFF 文件可以包含一个或多个图像文件目录 (IFD)。每个 IFD 都包含与图像关联的图像数据和元数据(标记)。每个 IFD 可以包含一个或多个 subIFD,后者也可以包含图像数据和元数据。这些子图像通常是包含 subIFD 的 IFD 中图像数据的降分辨率版本(缩略图)。

要读取 IFD 中的子图像,必须从 SubIFD 标记中获取子图像的位置。SubIFD 标记包含由指向子图像的字节偏移量构成的数组。然后,可以将 subIFD 的地址传递到 setSubDirectory 方法以将该 subIFD 设置为当前 IFD。大多数 Tiff 对象方法作用于当前 IFD。

  1. 使用 Tiff 对象构造函数打开包含图像和子图像的 TIFF 文件。以下示例使用在创建 TIFF 文件子目录中创建的 TIFF 文件,该文件包含一个具有两个 subIFD 的 IFD 目录。Tiff 构造函数打开该 TIFF 文件,并将文件中的第一个 subIFD 设置为当前 IFD:

    t = Tiff('my_subimage_file.tif','r');
  2. 检索与当前 IFD 关联的 subIFD 的位置。使用 getTag 方法获取 SubIFD 标记的值。此方法将返回指定 subIFD 位置的字节偏移量数组:

    offsets = getTag(t,'SubIFD')
  3. 导航到第一个子图像。首先,将 currentIFD 设为包含第一个子图像的目录:

    dirNum = 1; 
    setDirectory(t,dirNum);
  4. 然后,使用 setSubDirectory 方法导航到第一个 subIFD。指定该 subIFD 的字节偏移量作为参数。此调用会将该 subIFD 设置为当前 IFD:

    setSubDirectory(t,offsets(1));
    
  5. 采用与读取文件中的任何其他 IFD 一样的方式,读取当前 IFD(第一个 subIFD)中的图像数据:

    subimage_one = read(t);
    
  6. 查看第一个子图像:

    imagesc(subimage_one)
    
  7. 导航到第二个子图像。首先,将 currentIFD 重置为包含第二个子图像的目录:

    setDirectory(t,dirNum);
  8. 然后使用 setSubDirectory 方法导航到第二个 subIFD。指定第二个 subIFD 的字节偏移量:

    setSubDirectory(t,offsets(2));
    
  9. 与读取文件中的任何其他 IFD 一样,读取当前 IFD(第二个 subIFD)中的图像数据。

    subimage_two = read(t);
    
  10. 查看第二个子图像:

    imagesc(subimage_two)
    
  11. 关闭 Tiff 对象:

    close(t);
    

另请参阅

外部网站