matlab将图片导入工作区,导入图像 - MATLAB & Simulink - MathWorks 中国

导入图像

要将图形文件中的数据导入到 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。

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

t = Tiff('my_subimage_file.tif','r');

检索与当前 IFD 关联的 subIFD 的位置。使用 getTag 方法获取 SubIFD 标记的值。此方法将返回指定 subIFD 位置的字节偏移量数组:

offsets = getTag(t,'SubIFD')

导航到第一个子图像。首先,将 currentIFD 设为包含第一个子图像的目录:

dirNum = 1;

setDirectory(t,dirNum);

然后,使用 setSubDirectory 方法导航到第一个 subIFD。指定该 subIFD 的字节偏移量作为参数。此调用会将该 subIFD 设置为当前 IFD:

setSubDirectory(t,offsets(1));

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

subimage_one = read(t);

查看第一个子图像:

imagesc(subimage_one)

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

setDirectory(t,dirNum);

然后使用 setSubDirectory 方法导航到第二个 subIFD。指定第二个 subIFD 的字节偏移量:

setSubDirectory(t,offsets(2));

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

subimage_two = read(t);

查看第二个子图像:

imagesc(subimage_two)

关闭 Tiff 对象:

close(t);

另请参阅

外部网站

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值