imread
从图形文件读取图像
语法
说明
支持上述语法中的任何输入参量,且可使用一个或多个名称-值对组参量指定格式特定的选项。A
= imread(___,Name,Value
)
[
另外还返回图像透明度。此语法仅适用于 PNG、CUR 和 ICO 文件。对于 PNG 文件,如果存在 alpha 通道,A
,map
,transparency
] = imread(___)transparency
会返回该 alpha 通道。对于 CUR 和 ICO 文件,它为 AND(不透明度)掩码。
示例
读取和显示图像
将索引图像转换成 RGB
读取索引图像示例文件 corn.tif
中的第一幅图像。
[X,cmap] = imread('corn.tif');
索引图像 X
是 uint8
类型的 415×312 数组。颜色图 cmap
是 double
类型的 256×3 矩阵,因此索引图像中有 256 种颜色。显示图像。
imshow(X,cmap)
将索引图像转换为 RGB 图像。结果为一个 double
类型的 415×312×3 数组。
RGB = ind2rgb(X,cmap);
检查 RGB 图像的值是否在 [0, 1] 范围内。
disp(['Range of RGB image is [',num2str(min(RGB(:))),', ',num2str(max(RGB(:))),'].'])
Range of RGB image is [0.0078431, 0.97647].
读取多页 TIFF 文件中的特定图像
返回 PNG 图像的 Alpha 通道
返回示例图 peppers.png
的 Alpha 通道。
[X,map,alpha] = imread('peppers.png'); whos alpha
Name Size Bytes Class Attributes alpha 0x0 0 double
没有提供 Alpha 通道,因此 alpha
为空。
读取 TIFF 图像的指定区域
读取示例图 corn.tif
像素的特定区域。
用表示要读取的区域边界的向量元胞数组指定 'PixelRegion'
参数。第一向量指定要读取的行范围,第二向量指定要读取的列范围。
A = imread('corn.tif','PixelRegion',{[1,2],[2,5]});
imread
读取 corn.tif
中 1–2 行和 2–5 列的图像数据,并返回 2×4 数组 A
。
输入参数
filename
— 图形文件名
字符向量 | 字符串标量
图形文件的名称,指定为字符向量或字符串标量。
根据文件的位置,filename
可以采用下列形式之一。
位置 | 形式 | ||||||||
---|---|---|---|---|---|---|---|---|---|
当前文件夹或 MATLAB® 路径上的文件夹 | 指定 示例: | ||||||||
文件夹中的文件 | 如果该文件不在当前文件夹或 MATLAB 路径下的文件夹中,则指定完整或相对路径名。 示例: 示例: | ||||||||
URL | 如果文件是通过 Internet URL 定位的,则 示例: | ||||||||
远程位置 | 如果文件存储在远程位置,则
根据远程位置,
有关详细信息,请参阅处理远程数据。 示例: |
有关每种文件类型支持的位深、压缩方案和颜色空间的信息,请参阅算法。
数据类型: char
| string
fmt
— 图像格式
字符向量 | 字符串标量
图像格式,指定为指示标准文件扩展名的字符向量或字符串标量。调用 imformats
可查看支持的格式及其文件扩展名列表。
示例: 'png'
数据类型: char
| string
idx
— 要读取的图像
整数标量 | 整数向量
要读取的图像,指定为整数标量或整数向量(对于 GIF 文件)。例如,如果 idx
为 3,则 imread
将返回文件中的第三个图像。对于 GIF 文件,如果 idx
为 1:5
,则 imread
仅返回前五个帧。idx
参量仅支持用于多图像 GIF、CUR、ICO 和 HDF4 文件。
从同一 GIF 文件读取多个帧时,请将 idx
指定为帧向量或使用 'Frames','all'
名称-值对组参量。由于构造 GIF 文件的方式,这些语法可提供比循环调用 imread
更快的性能。
对应 HDF4 文件,idx
对应于要读取的图像的引用编号。引用编号不一定与文件中图像的顺序对应。您可以使用 imfinfo
将图像顺序与引用编号进行匹配。
示例: 3
数据类型: double
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: 'Index',5
读取 TIFF 文件的第五个图像。
Frames
— 要读取的帧
1 (默认) | 正整数 | 整数向量 | 'all'
要读取的帧,指定为逗号分隔的对组,其中包含 'Frames'
和一个正整数、整数向量或 'all'
。例如,如果指定值 3,imread
将读取文件中的第三个帧。如果您指定 'all'
,则 imread
读取所有帧并按其在文件中显示的顺序返回这些帧。
示例: 'frames',5
PixelRegion
— 要读取的子图像
{rows,cols}
形式的元胞数组
要读取的子图像,指定为包含 'PixelRegion'
和 {rows,cols}
形式的元胞数组的逗号分隔对组。rows
输入指定要读取的行范围。cols
输入指定要读取的列范围。rows
和 cols
都必须为包含以 1 开始的索引的二元素向量。例如,'PixelRegion',{[1 2],[3 4]}
读取图像数据的第 1 和第 2 行以及第 3 和第 4 列界定的子图像。如果 'ReductionLevel'
值大于 0,则 rows
和 cols
为子图像的坐标。
示例: 'PixelRegion',{[1 100],[4 500]}
ReductionLevel
— 降低图像分辨率
0 (默认) | 非负整数
降低的图像分辨率,指定为以逗号分隔的对组,包含 'ReductionLevel'
和一个非负整数。对于约简级别 L,图像分辨率按因子 2^L 进行约简。约简级别受限于 imfinfo
函数输出中的 'WaveletDecompositionLevels'
字段指定的分解级别总数。
示例: 'ReductionLevel',5
数据类型: single
| double
V79Compatible
— 与 MATLAB 7.9 (R2009b) 及更早版本的兼容性
false
(默认) | true
与 MATLAB 7.9 (R2009b) 及更早版本的兼容性,指定为包含 'V79Compatible'
以及 true
或 false
的逗号分隔对组。如果您指定 true
,则返回的灰度或 RGB 图像与之前版本的 imread
(MATLAB 7.9 (R2009b) 及更早版本)一致。
示例: 'V79Compatible',true
数据类型: logical
BackgroundColor
— 背景色
'none'
| 整数 | 3 元素整数向量
背景色,指定为 'none'
、整数或三元素整数向量。如果 BackgroundColor
为 'none'
,则 imread
不执行任何组合操作。否则,imread
将透明像素与背景色混合。
如果输入图像为索引图像,
BackgroundColor
的值必须为[1,P]
范围中的一个整数,其中P
是颜色图长度。如果输入图像为灰度,则
BackgroundColor
的值必须为[0,1]
范围中的整数。如果输入图像为 RGB,则
BackgroundColor
的值必须为三元素向量,其中的值介于[0,1]
范围内。
BackgroundColor
的默认值取决于 transparency
输出参量和图像类型的存在性:
如果您请求
transparency
输出参量,则BackgroundColor
的默认值为'none'
。如果您不请求
transparency
输出且 PNG 文件包含背景色块,则该颜色是BackgroundColor
的默认值。如果不请求
transparency
输出并且文件不包含背景色块,则对于索引图像,BackgroundColor
的默认值为1
;对于灰度图像,默认值为0
;对于真彩色 (RGB) 图像,默认值为[0 0 0]
。
Index
— 要读取的图像
1 (默认) | 正整数
要读取的图像,指定为包含 'Index'
和正整数的逗号分隔对组。例如,如果 Index
的值为 3,则 imread
读取文件中的第三个图像。
数据类型: single
| double
Info
— 图像的相关信息
结构体数组
图像的相关信息,指定为包含 'Info'
和 imfinfo
函数返回的结构体数组的逗号分隔对组。使用 Info
名称-值对组参量可帮助 imread
更快地找到多图像 TIFF 文件中的图像。
数据类型: struct
PixelRegion
— 区域边界
元胞数组
区域边界,指定为包含 'PixelRegion'
和一个 {rows,cols}
形式的元胞数组的逗号分隔对组。rows
输入指定要读取的行范围。cols
输入指定要读取的列范围。rows
和 cols
必须为二元素或三元素的从 1 开始的索引向量。二元素向量指定要读取的第一行和最后一行或第一列和最后一列。例如,'PixelRegion',{[1 2],[3 4]}
读取图像数据的第 1 和第 2 行以及第 3 和第 4 列界定的区域。
三元素向量的形式必须为 [start increment stop]
,其中 start
是要读取的第一行或第一列,increment
是增量值,stop
是要读取的最后一行或最后一列。此语法支持图像下采样。例如,'PixelRegion',{[1 2 10],[4 3 12]}
读取由第 1 和第 10 行以及第 4 和第 12 列界定的区域,在垂直方向每隔 2 个像素进行数据采样,在水平方向每隔 3 个像素进行数据抽样。
示例: 'PixelRegion',{[1 100],[4 500]}
数据类型: cell
输出参量
A
— 图像数据
数组
图像数据,以数组的形式返回。
如果文件包含灰度图像,则 A 为
m
×n
数组。如果文件包含索引图像,则 A 为
m
×n
数组,其中的索引值对应于map
中该索引处的颜色。如果文件包含真彩色图像,则 A 为
m
×n
×3 数组。如果文件是一个包含使用 CMYK 颜色空间的彩色图像的 TIFF 文件,则 A 为
m
×n
×4 数组。
A
的类取决于图像数据的图像格式和位深。有关详细信息,请参阅 算法
map
— 颜色图
m
×3 的矩阵
与 A
中的索引图像数据关联的颜色图,以 m
×3 的 double
类矩阵形式返回。
transparency
— 透明度信息
矩阵
以矩阵形式返回的透明度信息。对于 PNG 文件,transparency
为 alpha 通道(若存在)。如果不存在 alpha 通道,或者如果指定了 'BackgroundColor'
名称-值对组参量,则 transparency
为空。对于 CUR 和 ICO 文件,transparency
是 AND 掩码。对于光标文件,该掩码有时仅包含有用的数据。
详细信息
算法
对于大多数图像文件格式,imread
对每个颜色平面使用 8 位或更少位来存储图像像素。此表列出了返回的图像数组 A
与文件格式使用的位深对应的类。
文件中的位深 |
|
---|---|
每像素 1 位 |
|
每颜色平面 2 到 8 位 |
|
每像素 9 位到 16 位 |
对于 16 位的 BMP 压缩格式 (5-6-5),MATLAB 返回 |
以下部分提供了有关特定格式的支持信息,各格式按名称的字母顺序列出。
BMP - Windows 位图
此表列出了输出图像数据数组支持的位深和数据类型。
支持的位深 | 无压缩 | RLE 压缩 | 输出类 | 注释 |
---|---|---|---|---|
1 位 | ✓ | – | logical | |
4 位 | ✓ | ✓ | uint8 | |
8 位 | ✓ | ✓ | uint8 | |
16 位 | ✓ | – | uint8 | 1 个样本/像素 |
24 位 | ✓ | – | uint8 | 3 个样本/像素 |
32 位 | ✓ | – | uint8 | 3 个样本/像素 (1 个字节填充) |
CUR - 光标文件
此表列出了输出图像数据数组支持的位深和数据类型。
支持的位深 | 无压缩 | 压缩 | 输出类 |
---|---|---|---|
1 位 | ✓ | – | logical |
4 位 | ✓ | – | uint8 |
8 位 | ✓ | – | uint8 |
注意
默认情况下,Microsoft® Windows® 光标为 32×32 像素。因为 MATLAB 指针必须为 16×16,所以您可能需要缩放图像。您可以使用 imresize
函数进行此操作。
GIF - 图形交换格式
此表列出了输出图像数据数组支持的位深和数据类型。
支持的位深 | 无压缩 | 压缩 | 输出类 |
---|---|---|---|
1 位 | ✓ | – | logical |
2 位到 8 位 | ✓ | – | uint8 |
HDF4 - 分层数据格式
此表列出了输出图像数据数组支持的位深和数据类型。
支持的位深 | 带有颜色图的光栅图像 | 不带颜色图的光栅图像 | 输出类 | 注释 |
---|---|---|---|---|
8 位 | ✓ | ✓ | uint8 | |
24 位 | – | ✓ | uint8 | 3 个样本/像素 |
ICO - 图标文件
请参阅CUR - 光标文件
JPEG - 联合图像专家组
imread
读取任何基准 JPEG 图像以及带有某些常用扩展名的 JPEG 图像。有关 JPEG 2000 文件支持的信息,请参阅 JPEG 2000。
支持的采样位数 | 有损压缩 | 无损压缩 | 输出类 | 注释 |
---|---|---|---|---|
8 位 | ✓ | ✓ | uint8 | 灰度或 RGB |
12 位 | ✓ | ✓ | uint16 | 灰度或 RGB |
16 位 | – | ✓ | uint16 | 灰度 |
JPEG 2000 - 联合图像专家组 2000
有关 JPEG 文件的信息,请参阅 JPEG。
注意
不支持 JPEG 2000 索引图像。JP2/JPX 文件仅支持 JP2 兼容颜色空间。默认情况下,将按图像在文件中的存储顺序返回所有图像通道。
支持的采样位数 | 有损压缩 | 无损压缩 | 输出类 | 注释 |
---|---|---|---|---|
1 位 | ✓ | ✓ | logical | 仅限灰度 |
2 位到 8 位 | ✓ | ✓ | uint8 或 int8 | 灰度 或 RGB |
9 位到 16 位 | ✓ | ✓ | uint16 或 int16 | 灰度 或 RGB |
PBM - 可移植位图
此表列出了输出图像数据数组支持的位深和数据类型。
支持的位深 | 原始二进制 | ASCII(普通)编码 | 输出类 |
---|---|---|---|
1 位 | ✓ | ✓ | logical |
PCX - Windows 画笔
此表列出了输出图像数据数组支持的位深和数据类型。
支持的位深 | 输出类 | 注释 |
---|---|---|
1 位 | logical | 仅限灰度 |
8 位 | uint8 | 灰度或索引图像 |
24 位 | uint8 | RGB 3 个 8 位样本/像素 |
PGM - 可移植灰度图
此表列出了输出图像数据数组支持的位深和数据类型。
支持的位深 | 原始二进制 | ASCII(普通)编码 | 输出类 | 注释 |
---|---|---|---|---|
8 位 | ✓ | – | uint8 | |
16 位 | ✓ | – | uint16 | |
任意 | – | ✓ | 1 位到 8 位:uint8 9 位到 16 位: uint16 | 值被缩放 |
PNG - 可移植网络图形
此表列出了输出图像数据数组支持的位深和数据类型。
支持的位深 | 输出类 | 注释 |
---|---|---|
1 位 | logical | 灰度 |
2 位 | uint8 | 灰度 |
4 位 | uint8 | 灰度 |
8 位 | uint8 | 灰度或索引图像 |
16 位 | uint16 | 灰度或索引图像 |
24 位 | uint8 | RGB 3 个 8 位样本/像素。 |
48 位 | uint16 | RGB 3 个 16 位样本/像素。 |
PPM - 可移植像素图
此表列出了输出图像数据数组支持的位深和数据类型。
支持的位深 | 原始二进制 | ASCII(普通)编码 | 输出类 |
---|---|---|---|
最多 16 位 | ✓ | – | uint8 |
任意 | – | ✓ |
RAS - Sun 光栅
此表列出了输出图像数据数组支持的位深和数据类型。
支持的位深 | 输出类 | 注释 |
---|---|---|
1 位 | logical | 位图 |
8 位 | uint8 | 索引 |
24 位 | uint8 | RGB 3 个 8 位样本/像素 |
32 位 | uint8 | 带有 Alpha 的 RGB 4 个 8 位样本/像素 |
Aperio SVS - Aperio ScanScope 虚拟幻灯片
基于 TIFF 的图像文件格式。imread
支持读取未压缩和压缩的图像,包括采用 JPEG2000 压缩的图像。有关详细信息,请参阅TIFF - 标记图像文件格式。
TIFF - 标记图像文件格式
imread
读取 TIFF 规范或 LibTIFF 支持的大多数图像。imread
函数支持以下 TIFF 功能:
每像素任意个样本
CCITT group 3 和 4 FAX、Packbits、JPEG、LZW、Deflate、ThunderScan 压缩和未压缩的图像
逻辑、灰度、索引颜色、真彩色和高光谱图像
RGB、CMYK、CIELAB、ICCLAB 颜色空间。如果彩色图像使用 CMYK 颜色空间,则
A
为m
×n
×4 数组。要确定所使用的颜色空间,请使用imfinfo
获取有关图形文件的信息并查看PhotometricInterpretation
字段的值。如果文件包含 CIELAB 颜色数据,则imread
将其转换为 ICCLAB,然后将其移到 MATLAB 工作区中。由于 8 位或 16 位 TIFF CIELAB 编码值混合使用有符号和无符号数据类型,而这两种数据类型无法表示为单个 MATLAB 数组,因此需要进行此转换。数据组成图块或扫描线
imread
按如下方式读取并转换 TIFF 图像:
YCbCr 图像转换为 RGB 颜色空间。
所有灰度图像都按“黑色 =
0
”、“白色 = 最大值”进行读取。1 位图像以
logical
类形式返回。16 位浮点图像以类
single
形式返回。CIELab 图像转换为 ICCLab 颜色空间。
XWD - X 窗口转储
此表列出了 XWD 文件支持的位深、压缩和输出类。
支持的位深 | ZPixmaps | XYBitmaps | XYPixmaps | 输出类 |
---|---|---|---|---|
1 位 | ✓ | – | ✓ | logical |
8 位 | ✓ | – | – | uint8 |
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
此函数仅支持读取 8 位 JPEG 图像。输入参量
filename
必须为有效的绝对路径或相对路径。此函数生成的代码使用预编译的、特定于平台的共享库 (Image Processing Toolbox)。
如果在生成代码时禁用运行时错误检查,并且随后遇到运行时错误,则会以下方式之一报告错误:
如果
filename
不是编译时常量,则返回空矩阵。如果
filename
是编译时常量,则返回一个与filename
维度相同的黑色图像。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
此函数仅支持读取 8 位 JPEG 图像。输入参量
filename
必须为有效的绝对路径或相对路径。此函数生成的代码使用预编译的、特定于平台的共享库 (Image Processing Toolbox)。
如果在生成代码时禁用运行时错误检查,并且随后遇到运行时错误,则会以下方式之一报告错误:
如果
filename
不是编译时常量,则返回空矩阵。如果
filename
是编译时常量,则返回一个与filename
维度相同的黑色图像。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
用法说明和限制:
当您使用
backgroundPool
或 Parallel Computing Toolbox™Threadpool
在后台运行imread
时,imread
不支持读取分层数据格式 (HDF)、SVS 或 TIFF 文件。
有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2006a 之前推出R2021b: JPEG 2000 图像中的像素差异
R2021b 中的 JPEG 2000 图像和以前版本的 MATLAB 之间可能存在像素值差异。
R2021a: 默认仅读取 GIF 文件中的第一帧
当您在未指定附加参量的情况下读取 GIF 文件时,imread
函数默认只读取第一帧。以前,imread
默认读取文件中的所有帧。
R2020b: 从包含 JPEG 2000 压缩的 Aperio SVS 和 TIFF 文件中读取图像
您可以读取包含 JPEG 2000 压缩的 Aperio SVS 显微图像文件和 TIFF 图像文件。
R2019b: 从多图像 PGM、PBM 或 PPM 文件中读取图像
您可以从多图像 PGM、PBM 或 PPM 文件中读取指定的图像。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)