主要内容

导入图像

将数据导入MATLAB®图形文件的工作区,使用imread功能。使用此功能,您可以以许多标准文件格式从文件中导入数据,包括标记的图像文件格式(TIFF),Graphics Interchange格式(GIF),联合摄影专家组(JPEG)和便携式网络图形(PNG)格式。有关支持格式的完整列表,请参阅金宝appimread参考页。

此示例将以jpeg格式存储在文件中的图像数据中

i = imread('ngc6543a.jpg');

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

谁我的名称大小字节I类650x600x3 1170000 UINT8阵列Grand总数为1170000元素,使用1170000字节

有关对读取TIFF文件的更多控制,请使用tiff对象 - 查看从TIFF文件读取图像数据和元数据了解更多信息。

获取有关图像文件的信息

如果您有标准图形格式的文件,请使用imfinfo功能以获取有关其内容的信息。这imfinfo功能返回包含有关文件信息的结构。结构中的字段随文件格式而变化,但是imfinfo始终返回一些基本信息,包括文件名,最后修改日期,文件大小和格式。

此示例返回有关联合摄影专家组(JPEG)格式中有关文件的信息:

info = imfinfo('ngc6543a.jpg')
信息=文件名:'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'格式签名:''numberOfSamples:3 CodingMethod:'Huffman'CodingProcess:'sequention'注释:{'创建者:XV版本3.00B Rev:6/15/94质量= ...'}

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

虽然可以使用imread要从TIFF文件导入图像数据和元数据,该函数确实有一些限制。例如,TIFF文件可以包含多个图像,每个图像可以具有多个子映像。虽然您可以从多图像tiff文件中读取所有图像imread,您无法访问子图像。使用tiff对象,您可以从TIFF文件中读取图像数据,元数据和子图像。当您构建一个tiff对象,它代表您与TIFF文件的连接,并提供对Libtiff库中许多例程的访问。

使用的分步示例tiff从TIFF文件中读取子映像的对象方法和属性如下。充分利用tiff对象,熟悉TIFF规范和技术说明。看LIBTIFF- TIFF库和实用程序

从TIFF文件读取子图像

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

要读取IFD中的子图像,您必须从Subifd标签。这Subifd标签包含一个指向子映射的字节偏移数组。然后,您可以将Subifd的地址传递给setSubDirectory使subifd电流IFD的方法。最多tiff对象方法在当前IFD上操作。

  1. 打开一个包含图像和子图像的TIFF文件tiff对象构造函数。此示例使用在创建TIFF文件子目录,其中包含一个带有两个subifds的IFD目录。这tiff构造函数打开tiff文件,并使文件中的第一个subifd当前IFD:

    t = tiff('my_subimage_file.tif','r');
  2. 检索与当前IFD相关的Subifds的位置。使用getTag获取价值的方法Subifd标签。此方法返回一个字节偏移数组来指定SubiFD的位置:

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

    dirnum = 1;setDirectory(t,dirnum);
  4. 然后,使用setSubDirectory方法。将subifd的字节偏移指定为参数。此呼叫使SubIFD当前IFD:

    setSubDirectory(t,偏移(1));
  5. 从当前IFD(第一个subifd)中读取图像数据,就像您读取文件中的任何其他IFD的方式:

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

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

    setDirectory(t,dirnum);
  8. 然后,使用setSubDirectory方法。指定第二个subifd的字节偏移:

    setSubDirectory(t,偏移(2));
  9. 像文件中的任何其他IFD一样,从当前IFD(第二个Subifd)中读取图像数据:

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

    imagsc(subimage_two)
  11. 关上tiff目的:

    壁橱);

也可以看看

外部网站