概述
导入图像
要将图形文件中的数据导入到 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: 'matlabroottoolboxmatlabdemosngc6543a.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);
另请参阅
外部网站
最后
以上就是追寻舞蹈为你收集整理的matlab怎么把图片导入工作区,导入图像 - MATLAB & Simulink - MathWorks 中国的全部内容,希望文章能够帮你解决matlab怎么把图片导入工作区,导入图像 - MATLAB & Simulink - MathWorks 中国所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复