Tiff
LibTIFF 库例程的 MATLAB 入口
说明
Tiff
对象表示与带标记的图像文件格式 (TIFF) 文件的连接,并提供对 LibTIFF 库的许多函数的访问。Tiff
提供的功能比 imread
和 imwrite
函数更多,例如读取子图像、写入图像数据的图块和条带以及修改单个 TIFF 标记。
在大多数情况下,Tiff
对象函数的语法与对应的 LibTIFF 库函数的语法类似。要充分了解 Tiff
对象的功能,请参阅 LibTIFF API 以及 TIFF 规范和技术说明。请访问 LibTIFF - TIFF 库和实用工具查看此文档。
MATLAB® 使用 LibTIFF 版本 4.6.0。
创建对象
描述
输入参量
filename
— 文件名
字符串标量 | 字符向量
文件名,指定为字符串标量或字符向量。
示例: "myfile.tif"
mode
— 文件访问类型
"r"
(默认) | "w"
| "w8"
| "a"
| "r+"
文件访问类型,指定为下列值之一。
参数 | 描述 |
---|---|
"r" | 打开文件以便读取(默认值)。 |
"w" | 打开文件以便写入;放弃现有内容。 |
"w8" | 打开文件以便写入 BigTIFF 文件;放弃现有内容。 |
"a" | 打开或创建文件以便写入;将数据追加到文件末尾。 |
"r+" | 打开(而非创建)文件以便读写。 |
当您打开 TIFF 文件进行写入或追加时,Tiff
对象会自动在文件中创建一个图像文件目录 (IFD) 以写入后续数据。该 IFD 带有 TIFF 修订版 6.0 中指定的所有默认值。
属性
TIFF 文件由包含图像数据和关联标记的图像文件目录 (IFD) 组成。标记包含图像相关信息,例如图像宽度、图像高度和样本数量。每个 TIFF 属性都是为标记提供值的结构体。使用 setTag
函数设置标记值。例如,创建一个文件并指定 RGB 颜色空间。
t = Tiff("myfile.tif","w"); setTag(t,"Photometric",Tiff.Photometric.RGB)
创建文件时,在将数据写入文件之前,必须先设置以下标记:
ImageLength
ImageWidth
Photometric
根据图像中数据的类型,您可能还需要设置其他标记。这些标记通常包括:
Compression
BitsPerSample
SamplesPerPixel
根据图像的布局,您还必须设置以下标记:
条状布局 - 设置
RowsPerStrip
标记。分块布局 - 设置
TileWidth
和TileHeight
标记。
Compression
— 图像数据压缩方案
结构体
压缩图像数据的方案,以包含以下字段的结构体形式返回。
字段名称 |
---|
None |
CCITTRLE (Read-only) |
CCITTFax3 |
CCITTFax4 |
LZW |
OJPEG |
JPEG |
AdobeDeflate |
... |
要查看 MATLAB 所支持的有关 Compression
标记的值的完整列表,请在命令行窗口中键入 Tiff.Compression
。
示例: setTag(t,"Compression",Tiff.Compression.JPEG)
ExtraSamples
— 额外通道描述
结构体
额外通道描述,以包含以下字段的结构体形式返回。
字段名称 | 描述 |
---|---|
Unspecified | 未指定的数据 |
AssociatedAlpha | 关联的 alpha(前乘) |
UnassociatedAlpha | 未关联的 alpha 数据 |
如果除了通常的比色通道外还存在额外通道,则需要 ExtraSamples
标记。有关示例用法,请参阅用颜色和 alpha 通道数据编写 Tiff 图像。
示例: setTag(t,"ExtraSamples",Tiff.ExtraSamples.AssociatedAlpha)
Group3Options
— Group 3 传真压缩选项
结构体
Group 3 传真压缩选项,以包含以下字段的结构体形式返回。
字段名称 | 描述 |
---|---|
Encoding2D | 第 0 位为 1。 此值指定二维编码。如果指定了多个条带,每个条带都必须以一个一维编码行开头。也就是说, |
Uncompressed | 第 1 位为 1。 此值指定编码时的未压缩模式。 |
FillBits | 第 2 位为 1。 根据需要在 EOL 代码之前添加填充位,以使 EOL 始终在字节边界上结束。系约定将确保半字节零在 EOL 序列之前 1 个字节。例如, |
此属性也称为 Fax3
或 T4Options
。该属性的值是由前三个位控制的一个位掩码。
示例: setTag(t,"Group3Options",Tiff.Group3Options.Uncompressed)
InkSet
— 分色图像油墨组
结构体
分色图像油墨组,以包含以下字段的结构体形式返回。
字段名称 | 描述 |
---|---|
CMYK | 分量顺序:青蓝色、品红色、黄色、黑色。通常,值为 0 表示该分量的油墨覆盖率是 0%,值为 255 表示该分量的油墨覆盖率是 100%,但是请查阅 DotRange 的 TIFF 规范。指定 CMYK 时,请不要设置 InkNames 标记。 |
MultiInk | CMYK 以外的任何顺序。有关所使用的油墨描述,请查阅 InkNames 字段的 TIFF 规范。 |
就该属性而言,分色是光学意义上的,而非平面分层。
示例: setTag(t,"InkSet",Tiff.InkSet.CMYK)
JPEGColorMode
— 颜色模式
结构体
颜色模式,以包含以下字段的结构体形式返回。
字段名称 | 描述 |
---|---|
Raw (默认值) | 将输入作为单独的 Y、Cb 和 Cr 矩阵保留。 |
RGB | 将 RGB 输入转换为 YCbCr。 |
不要使用此属性将 YCbCr
图像读取为 RGB
。而应使用 readRGBAImage
、readRGBAStrip
和 readRGBATile
函数提供的 RGBA
接口。
有关示例,请参阅 根据 RGB 数据创建 YCbCr/JPEG 图像。
示例: setTag(t,"JPEGColorMode",Tiff.JPEGColorMode.RGB)
Orientation
— 图像数据的视觉方向
结构体
图像数据的视觉方向,以包含以下字段的结构体形式返回。
字段名称 |
---|
TopLeft |
TopRight |
BottomRight |
BottomLeft |
LeftTop |
RightTop |
RightBottom |
LeftBottom |
Orientation
属性描述相对于行和列的图像方位。例如,当 Orientation
设置为 TopLeft
时,第一行表示图像的顶部,第一列表示左侧。Orientation
标记中指定的值仅供参考,它不会影响 MATLAB 读取或写入图像数据的方式。
示例: setTag(t,"Orientation",Tiff.Orientation.TopLeft)
Photometric
— 图像数据的颜色空间
结构体
图像数据的颜色空间,以包含以下字段的结构体形式返回。
字段名称 |
---|
MinIsWhite |
MinIsBlack |
RGB |
Palette |
Mask |
Separated (CMYK) |
YCbCr |
CIELab |
ICCLab |
ITULab |
LogL |
LogLUV |
CFA |
LinearRaw |
示例: setTag(t,"Photometric",Tiff.Photometric.RGB)
PlanarConfiguration
— 存储配置
结构体
图像分量值的存储配置,以具有以下字段的结构体的形式返回。
字段名称 | 描述 |
---|---|
Chunky | 连续存储每个像素的分量值。例如,对于 RGB 数据,文件中的前三个像素存储为 RGBRGBRGB。几乎所有 TIFF 图像都具有连续的平面配置。 |
Separate | 分开存储每个像素的分量值。例如,对于 RGB 数据,红色分量将与绿色分量和蓝色分量分开存储在文件中。 |
示例: setTag(t,"PlanarConfiguration",Tiff.PlanarConfiguration.Chunky)
ResolutionUnit
— 分辨率单位
结构体
用来解释 XResolution
和 YResolution
标记中包含的值的分辨率单位,返回为具有下列字段的结构体。
字段名称 | 描述 |
---|---|
None | 默认值。 |
Inch | 为 XResolution 和 YResolution 标记包含的值分配单位英寸。 |
Centimeter | 为 XResolution 和 YResolution 标记包含的值分配单位厘米。 |
例如,以下代码将 X
和 Y
方向上的图像分辨率值设置为每英寸 300 像素。
setTag(t,"ResolutionUnit",Tiff.ResolutionUnit.Inch) setTag(t,"XResolution",300) setTag(t,"YResolution",300)
示例: setTag(t,"ResolutionUnit",Tiff.ResolutionUnit.Inch)
SampleFormat
— 像素样本格式
结构体
像素样本格式,以包含以下字段的结构体形式返回。
字段名称 | 描述 |
---|---|
UInt (默认值) | 无符号整数数据 |
Int | 2 的补码有符号整数数据 |
IEEEFP | IEEE 浮点数据 |
MATLAB 不支持 Void
、ComplexInt
或 ComplexIEEEFP
格式。
示例: setTag(t,"SampleFormat",Tiff.SampleFormat.IEEEFP)
SGILogDataFmt
— SGIL
编解码器数据格式
结构体
SGIL
编解码器数据格式,以包含以下字段的结构体形式返回。
字段名称 | 描述 |
---|---|
Float | 单精度样本 |
Bits8 | uint8 样本(只读) |
将 SGILogDataFmt
标记设置为 Float
或 Bits8
表示对于 LogLuv
图像来说 SamplesPerPixel
值为 3
,对于 LogL
图像来说值为 1
。
对于 LogLuv
或 LogL
TIFF 图像对象的每个实例,您只能设置一次 SGILogDataFmt
标记。
使用以下代码创建一个 Tiff
对象,设置 SGIL 数据格式,然后读取图像数据。
tiffobj = Tiff("example.tif","r"); setDirectory(tiffobj,3); % image 3 is a LogLuv image setTag(tiffobj,"SGILogDataFmt",Tiff.SGILogDataFmt.Float) imdata = read(tiffobj);
示例: setTag(t,"SGILogDataFmt",Tiff.SGILogDataFmt.Float)
SubFileType
— 图像的类型
结构体
图像的类型,以包含以下字段的结构体形式返回。
字段名称 | 描述 |
---|---|
Default | 单个图像文件或第一个图像的默认值。 |
ReducedImage | 图像是多图像(或多页)文件的单个图像。 |
Page | 未关联的 alpha 数据。 |
Mask | 图像是文件中其他图像的透明度掩码。光度解释值必须是 Photometric.Mask 。 |
示例: setTag(t,"SubFileType",Tiff.SubFileType.Mask)
TagID
— TIFF 标记 ID
结构体
MATLAB 支持的 TIFF 标记 ID,以包含以下字段的结构体形式返回。
字段名称 | 值 |
---|---|
SubFileType | 254 |
ImageWidth | 256 |
ImageLength | 257 |
BitsPerSample | 258 |
Compression | 259 |
Photometric | 262 |
Thresholding | 263 |
FillOrder | 266 |
... | ... |
有关标记名称及其对应标记 ID 的完整列表,请在命令行窗口中键入 Tiff.TagID
。
使用 setTag
函数时,使用此属性指定标记。例如,Tiff.TagID.ImageWidth
返回 ImageWidth
标记的 ID。要获得所有支持的标记的列表,请使用 Tiff.getTagNames
函数。
示例: setTag(t,Tiff.TagID.ImageWidth,300)
Thresholding
— 阈值方法
结构体
阈值方法,以包含以下字段的结构体形式返回。
字段名称 |
---|
BiLevel |
HalfTone |
ErrorDiffuse |
此属性描述将像素从灰度转换为黑白时使用的算法。
示例: setTag(t,"Thresholding",Tiff.Thresholding.HalfTone)
YCbCrPositioning
— 色度样本的位置
结构体
色度样本相对于亮度样本的位置,以包含以下字段的结构体形式返回。
字段名称 | 描述 |
---|---|
Centered | 指定此值以与行业标准(如 PostScript® Level 2)兼容。 |
Cosited | 指定此值以与大多数数字视频标准(如 CCIR Recommendation 601-1)兼容。 |
示例: setTag(t,"YCbCrPositioning",Tiff.YCbCrPositioning.Centered)
对象函数
TIFF 文件由一个或多个图像文件目录 (IFD) 组成。IFD 包含图像数据及其关联的元数据。IFD 可以包含子 IFD,后者也包含图像数据和元数据。当您打开 TIFF 文件进行读取时,Tiff
对象将使文件中的第一个 IFD 成为当前 IFD。Tiff
对象函数作用于当前 IFD。
读取图像
read | 读取整个 TIFF 图像 |
readEncodedStrip | 从指定条带读取数据 |
readEncodedTile | 从指定图块读取数据 |
readRGBAImage | 使用 RGBA 接口读取图像 |
readRGBAStrip | 使用 RGBA 接口读取条带数据 |
readRGBATile | 使用 RGBA 接口读取图块数据 |
close | 关闭 Tiff 对象 |
写入图像
write | 写整个图像 |
writeEncodedStrip | 将数据写入到指定的条带 |
writeEncodedTile | 将数据写入到指定的图块 |
close | 关闭 Tiff 对象 |
设置或获取标签
getTag | 指定标记的值 |
setTag | 设置标记的值 |
Tiff.getTagNames | 识别的 TIFF 标记的列表 |
更改图像文件目录 (IFD)
currentDirectory | 返回当前 IFD 的索引 |
lastDirectory | 确定当前 IFD 是否为文件中的最后一个目录 |
nextDirectory | 使下一个 IFD 成为当前 IFD |
setDirectory | 使指定的 IFD 成为当前 IFD |
setSubDirectory | 使 subIFD 成为当前 IFD |
rewriteDirectory | 将修改后的元数据写入现有 IFD |
writeDirectory | 创建新的 IFD 并将其设置为当前 IFD |
获取图块、条带或库信息
isTiled | 确定图像是否为分块布局 |
computeTile | 包含指定坐标的图块的编号 |
numberOfTiles | 图像中的图块总数 |
computeStrip | 包含指定坐标的条带的索引编号 |
numberOfStrips | 图像中的条带总数 |
getVersion | LibTIFF 库版本 |
示例
使用 Tiff
对象创建新 TIFF 文件
用颜色和 alpha 通道数据编写 Tiff 图像
对于包含颜色和 alpha 通道的数据集,请设置 Tiff
标记,然后将数据写入文件。
创建一个包含颜色通道和 alpha 通道的数组 data
。
rgb = imread("example.tif"); numrows = size(rgb,1); numcols = size(rgb,2); alpha = 255*ones([numrows numcols],"uint8"); data = cat(3,rgb,alpha);
创建一个 Tiff
对象。
t = Tiff("myfile.tif","w");
设置 Tiff
标记并指定 ExtraSamples
标记的值,因为除颜色通道外,数据还包含 alpha 通道。
setTag(t,"Photometric",Tiff.Photometric.RGB) setTag(t,"Compression",Tiff.Compression.None) setTag(t,"BitsPerSample",8) setTag(t,"SamplesPerPixel",4) setTag(t,"SampleFormat",Tiff.SampleFormat.UInt) setTag(t,"ExtraSamples",Tiff.ExtraSamples.Unspecified) setTag(t,"ImageLength",numrows) setTag(t,"ImageWidth",numcols) setTag(t,"TileLength",32) setTag(t,"TileWidth",32) setTag(t,"PlanarConfiguration",Tiff.PlanarConfiguration.Chunky)
将数据写入 TIFF 文件并关闭 Tiff
对象。
write(t,data) close(t)
根据 RGB 数据创建 YCbCr/JPEG 图像
将 RGB 图像数据作为 YCbCr/JPEG 图像写入 TIFF 文件。
获取 RGB 数据。
rgb = imread("example.tif");
创建 Tiff
对象 t
,并设置标记。使用 JPEGColorMode
标记指定输入数据为 RGB。
t = Tiff("myfile.tif","w"); setTag(t,"Photometric",Tiff.Photometric.YCbCr) setTag(t,"Compression",Tiff.Compression.JPEG) setTag(t,"YCbCrSubSampling",[2 2]) setTag(t,"BitsPerSample",8) setTag(t,"SamplesPerPixel",3) setTag(t,"SampleFormat",Tiff.SampleFormat.UInt) setTag(t,"ImageLength",size(rgb,1)) setTag(t,"ImageWidth",size(rgb,2)) setTag(t,"TileLength",32) setTag(t,"TileWidth",32) setTag(t,"PlanarConfiguration",Tiff.PlanarConfiguration.Chunky) setTag(t,"JPEGColorMode",Tiff.JPEGColorMode.RGB) setTag(t,"JPEGQuality",75)
将数据写入 TIFF 文件并关闭 Tiff
对象。
write(t,rgb) close(t)
版本历史记录
在 R2009b 中推出R2024a: LibTIFF 库升级到版本 4.6.0
LibTIFF 库升级到了版本 4.6.0。
R2023b: LibTIFF 库升级到版本 4.5.0
LibTIFF 库升级到了版本 4.5.0。
R2022b: LibTIFF 库升级到版本 4.4.0
LibTIFF 库升级到了版本 4.4.0。
R2021b: LibTIFF 库升级到版本 4.2.0
LibTIFF 库升级到了版本 4.2.0。
R2020b: 从包含 JPEG 2000 压缩的 Aperio SVS 和 TIFF 文件中读取图像
您可以读取包含 JPEG 2000 压缩的 Aperio SVS 显微图像文件和 TIFF 图像文件。
R2020b: LibTIFF 库升级到版本 4.1.0
LibTIFF 库升级到了版本 4.1.0。
R2020a: 读写有理多项式系数标记的值
您可以使用 Tiff
对象的 RPCCoefficientTag
属性来读取和写入有理多项式系数 (RPC) 标记的值。有关详细信息,请参阅导出到图像中的表 6。
R2019b: LibTIFF 库升级到版本 4.0.10
LibTIFF 库升级到了版本 4.0.10。
R2019b: Tiff
不推荐使用用于写入特定 TIFF 文件的对象
不建议写那些具有某些光度配置和每像素采样数的 TIFF 图像。SamplesPerPixel
的值必须等于 Tiff
对象中指定的 Photometric
颜色通道数和 ExtraSamples
的值的总和。
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)