导出到图像
从MATLAB导出数据®工作区中使用的标准图形文件格式之一,请使用imwrite
函数。支持TIFF (Tagged Image File Format)、JPEG (Joint Photographic Experts Group)、PNG (Portable Network Graphics)等格式的数据导出。有关支持的格式的完整列表,请参见万博1manbetximwrite
参考页面。
的多维数组uint8
数据我
从MATLAB工作区转换成TIFF格式的文件。写入文件的输出图像的类别取决于指定的格式。对于大多数格式,如果输入数组属于类uint8
,imwrite
将数据输出为8位值。看到imwrite
详情参考页。
whos I名称大小字节类我650x600x3 1170000 uint8数组总是1170000元素使用1170000字节imwrite(我,' my_graphics_file.tif','tif');
请注意
imwrite
万博1manbetx支持几种标准格式的不同语法。例如,使用TIFF文件格式,您可以指定MATLAB用于存储图像的压缩类型。看到imwrite
详情参考页。
有关将数据写入TIFF文件的更多控制,请使用Tiff
object-see将图像数据和元数据导出到TIFF文件获取更多信息。
将图像数据和元数据导出到TIFF文件
你可以用imwrite
要将图像数据和元数据(标签)导出到带标签图像文件格式(TIFF)文件,该功能确实有一些限制。例如,当要修改文件中的图像数据或元数据时,必须将所有数据写入文件。不能只写更新后的部分。使用Tiff
对象,您可以写入图像数据的部分,并修改或向TIFF文件添加单独的标记。当你构造一个Tiff
对象,它表示您与TIFF文件的连接,并提供对LibTIFF库中的许多例程的访问。
以下部分提供了使用的逐步示例Tiff
对象方法和属性来使用TIFF文件执行一些常见任务。来充分利用Tiff
对象,您必须熟悉TIFF规范和技术说明。查看此文档,请访问LibTIFF - TIFF库和实用程序.
创建一个新的TIFF文件
创建一些图像数据。下面的例子从MATLAB包含的JPEG文件中读取图像数据:
Imgdata = imread('ngc6543 .jpg');
创建一个新的TIFF文件
Tiff
对象,指定新文件的名称作为参数。若要创建文件,必须指定写入模式(' w '
)或追加模式(“一个”
):t = Tiff('myfile.tif','w');
创建新TIFF文件时,
Tiff
构造函数创建一个包含映像文件目录(IFD)的文件。TIFF文件使用这个IFD来组织与特定图像相关的所有数据和元数据。一个TIFF文件可以包含多个ifd。的Tiff
对象创建的IFD当前的IFD。Tiff
对象方法操作当前IFD。您可以在TIFF文件中的IFD之间导航,并指定当前使用的IFD是哪个IFDTiff
对象的方法。方法设置所需的TIFF标记
setTag
方法Tiff
对象。这些必需的标记指定了关于图像的信息,比如它的长度和宽度。要将图像数据分割为条,请为RowsPerStrip
标签。属性的值可将图像数据分解为磁块TileWidth
而且TileLength
标签。该示例创建了一个包含标记名称和值的结构,并将其传递给setTag
.您还可以单独设置每个标记。tagstruct。我mageLength = size(imgdata,1); tagstruct.ImageWidth = size(imgdata,2); tagstruct.Photometric = Tiff.Photometric.RGB; tagstruct.BitsPerSample = 8; tagstruct.SamplesPerPixel = 3; tagstruct.RowsPerStrip = 16; tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky; tagstruct.Software = 'MATLAB'; tagstruct % display tagstruct setTag(t,tagstruct)
有关受支持的TIFF标记以及如何设置其值的信万博1manbetx息,请参见设置标签值.例如,
Tiff
对象支持可用于万博1manbetx设置某些属性值的属性。本例使用Tiff
对象PlanarConfiguration
属性为大块配置指定正确的值:Tiff.PlanarConfiguration.Chunky
.将映像数据和元数据写入当前目录
写
方法Tiff
对象。写(t, imgdata);
如果要在文件中放入多个图像,请调用
writeDirectory
方法。的writeDirectory
方法在文件中设置一个新的图像文件目录,并将此新目录设置为当前目录。方法关闭与该文件的连接
Tiff
对象:关闭(t);
方法测试是否创建了有效的TIFF文件
imread
函数读取文件,然后显示图像:显示亮度图像(imread (' myfile.tif '));
写入图像数据的条带或平铺
请注意
如果数据未压缩,则只能修改图像数据的条或平铺。
控件,打开现有TIFF文件进行修改
Tiff
对象。中创建的文件创建一个新的TIFF文件.的Tiff
类的句柄Tiff
对象。t = Tiff('myfile.tif','r+');
生成一些要写入映像中的条带的数据。这个示例创建了一个三维零数组,其大小相当于一个条带。该代码使用条带中的行数、图像的宽度和每个像素的样本数作为维度。数组是的数组
uint8
值。width = getTag(t,'ImageWidth');height = getTag(t,'RowsPerStrip');numSamples = getTag(t,'SamplesPerPixel');stripData = 0(高度,宽度,numSamples,'uint8');
如果图像数据具有平铺布局,则可以使用
TileWidth
而且TileLength
标记来指定尺寸。方法将数据写入文件中的条带
writeEncodedStrip
方法。指定标识要修改的条带的索引号。示例选择了第18条,因为它更容易看到图像中的变化。writeEncodedStrip (t, 18岁,stripData);
如果图像具有平铺布局,则可以使用
writeEncodedTile
方法修改磁贴。方法关闭与该文件的连接
Tiff
对象。关闭(t);
方法测试您是否修改了TIFF文件中的图像条
imread
函数读取文件,然后显示图像。Modified_imgdata = imread('myfile.tif');显示亮度图像(modified_imgdata)
注意图像中间的黑色条纹。
修改TIFF文件元数据(标签)
方法打开现有TIFF文件以进行修改
Tiff
对象。中创建的文件创建一个新的TIFF文件.的Tiff
类的句柄Tiff
对象。t = Tiff('myfile.tif','r+');
文件中不包含
艺术家
标记,使用getTag
方法。这段代码应该发出一条错误消息,说明它无法检索标记。artist_value = getTag(t,'Artist');
添加
艺术家
标记。setTag
方法。setTag (t,“艺术家”,“毕加索”);
方法将新的标记数据写入TIFF文件
rewriteDirectory
方法。使用rewriteDirectory
在修改文件中的现有元数据或向文件中添加新元数据时,方法。rewriteDirectory (t);
方法关闭与该文件的连接
Tiff
对象。关闭(t);
的值来测试工作,方法是重新打开TIFF文件并获得
艺术家
标记,使用getTag
方法。t = Tiff('myfile.tif', 'r');getTag(t,'Artist') ans = Pablo Picasso close(t);
创建TIFF文件子目录
创建一些图像数据。这个例子从MATLAB包含的JPEG文件中读取图像数据。然后,该示例创建图像数据的两个降低分辨率(缩略图)版本。
Imgdata = imread('ngc6543 .jpg');减少像素数量的一半。Img_half = imgdata(1:2:end,1:2:end,:);减少像素数的三分之一。Img_third = imgdata(1:3:end,1:3:end,:);
创建一个新的TIFF文件
Tiff
对象,并指定新文件的名称作为参数。若要创建文件,必须指定写入模式(' w '
)或追加模式(“一个”
).的Tiff
类的句柄Tiff
对象。t = Tiff('my_subimage_file.tif','w');
方法设置所需的TIFF标记
setTag
方法Tiff
对象。这些必需的标记指定了关于图像的信息,比如它的长度和宽度。要将图像数据分割为条,请为RowsPerStrip
标签。要将图像数据分解为磁块,请使用TileWidth
而且TileLength
标签。该示例创建了一个包含标记名称和值的结构,并将其传递给setTag
.您还可以单独设置每个标记。创建子目录时,必须设置
SubIFD
标记,指定要创建的子目录的数量。方法的值并不是指定的数字SubIFD
标签。这个数字告诉我们Tiff
用于创建SubIFD
它指向两个子目录。的实际值SubIFD
标记将是两个子目录的字节偏移量。tagstruct。我mageLength = size(imgdata,1); tagstruct.ImageWidth = size(imgdata,2); tagstruct.Photometric = Tiff.Photometric.RGB; tagstruct.BitsPerSample = 8; tagstruct.SamplesPerPixel = 3; tagstruct.RowsPerStrip = 16; tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky; tagstruct.Software = 'MATLAB'; tagstruct.SubIFD = 2 ; % required to create subdirectories tagstruct % display tagstruct setTag(t,tagstruct)
有关受支持的TIFF标记以及如何设置其值的信万博1manbetx息,请参见设置标签值.例如,
Tiff
对象支持可用于万博1manbetx设置某些属性值的属性。本例使用Tiff
对象PlanarConfiguration
属性为大块配置指定正确的值:Tiff.PlanarConfiguration.Chunky
.将映像数据和元数据写入当前目录
写
方法Tiff
对象。写(t, imgdata);
方法设置第一个子目录
writeDirectory
方法。的writeDirectory
方法设置子目录并将新目录设置为当前目录。因为您指定了要创建两个子目录,writeDirectory
设置子目录。writeDirectory (t);
设置所需的标记,就像对常规目录所做的一样。根据LibTIFF API,子目录不能包含
SubIFD
标签。tagstruct2。我mageLength = size(img_half,1); tagstruct2.ImageWidth = size(img_half,2); tagstruct2.Photometric = Tiff.Photometric.RGB; tagstruct2.BitsPerSample = 8; tagstruct2.SamplesPerPixel = 3; tagstruct2.RowsPerStrip = 16; tagstruct2.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky; tagstruct2.Software = 'MATLAB'; tagstruct2 % display tagstruct2 setTag(t,tagstruct2)
将图像数据和元数据写入子目录
写
方法Tiff
对象。写(t, img_half);
方法设置第二个子目录
writeDirectory
方法。的writeDirectory
方法设置子目录并将其设置为当前目录。writeDirectory (t);
设置所需的标记,就像对任何目录一样。根据LibTIFF API,子目录不能包含
SubIFD
标签。tagstruct3。ImageLength= size(img_third,1); tagstruct3.ImageWidth = size(img_third,2); tagstruct3.Photometric = Tiff.Photometric.RGB; tagstruct3.BitsPerSample = 8; tagstruct3.SamplesPerPixel = 3; tagstruct3.RowsPerStrip = 16; tagstruct3.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky; tagstruct3.Software = 'MATLAB'; tagstruct3 % display tagstruct3 setTag(t,tagstruct3)
将图像数据和元数据写入子目录
写
方法Tiff
对象:写(t, img_third);
方法关闭与该文件的连接
Tiff
对象:关闭(t);
设置标签值
下表列出了所有TIFF标记Tiff
对象支持并包含万博1manbetx关于它们的MATLAB类和大小的信息。对于某些标记,该表还指示用于标记的值集Tiff
对象支持的所有万博1manbetx值,它是TIFF规范定义的所有可能值的子集。您可以使用Tiff
属性结构指定这些标记所支持的值。万博1manbetx例如,使用Tiff.Compression.JPEG
来指定JPEG压缩。有关完整的属性列表,请参阅Tiff参考页。
表1:支持的TIF万博1manbetxF标签
TIFF标签 | 类 | 大小 | 万博1manbetx支持的值 | 笔记 |
---|---|---|---|---|
艺术家 |
字符 |
1 xn |
||
BitsPerSample |
双 |
1 x1 |
1、8、16、32、64 | 看到表2 |
ColorMap |
双 |
256年x3 |
值应该在0-1之间标准化。内部存储为uint16 值。 |
光度 必须调色板 |
压缩 |
双 |
1 x1 |
没有一个 : 1CCITTRLE : 2CCITTFax3 : 3CCITTFax4 : 4LZW : 5JPEG : 7CCITTRLEW : 32771PackBits : 32773缩小 : 32946AdobeDeflate : 8 |
看到表3. |
版权 |
字符 |
1 xn |
||
DateTime |
字符 |
1 x19 |
如果需要,返回值被填充为19个字符。 | |
DocumentName |
字符 |
1 xn |
||
DotRange |
双 |
1 x2 |
光度 必须分离 |
|
ExtraSamples |
双 |
1 xn |
未指明的 : 0AssociatedAlpha : 1UnassociatedAlpha : 2 |
看到表4. |
FillOrder |
双 |
1 x1 |
||
GeoAsciiParamsTag |
字符 |
1 xn |
||
GeoDoubleParamsTag |
双 |
1 xn |
||
GeoKeyDirectoryTag |
双 |
Nx4 |
||
Group3Options |
双 |
1 x1 |
压缩 必须CCITTFax3 |
|
Group4Options |
双 |
1 x1 |
压缩 必须CCITTFax4 |
|
HalfToneHints |
双 |
1 x2 |
||
HostComputer |
字符 |
1 xn |
||
ICCProfile |
uint8 |
1 xn |
||
ImageDescription |
字符 |
1 xn |
||
ImageLength |
双 |
1 x1 |
||
ImageWidth |
双 |
1 x1 |
||
InkNames |
Char单元数组 |
1 x NumInks |
光度 必须分离 |
|
InkSet |
双 |
1 x1 |
CMYK : 1MultiInk : 2 |
光度 必须分离 |
JPEGQuality |
双 |
1 x1 |
取值在1到100之间 | |
使 |
字符 |
1 xn |
||
MaxSampleValue |
双 |
1 x1 |
0 - 65535 | |
MinSampleValue |
双 |
1 x1 |
0 - 65535 | |
模型 |
字符 |
1 xn |
||
ModelPixelScaleTag |
双 |
1 x3 |
||
ModelTiepointTag |
双 |
Nx6 |
||
ModelTransformationMatrixTag |
双 |
1乘16 |
||
NumberOfInks |
双 |
1 x1 |
必须等于SamplesPerPixel |
|
取向 |
双 |
1 x1 |
TopLeft : 1TopRight : 2BottomRight : 3BottomLeft : 4LeftTop : 5RightTop : 6RightBottom : 7LeftBottom : 8 |
|
PageName |
字符 |
1 xn |
||
PageNumber |
双 |
1 x2 |
||
光度 |
双 |
1 x1 |
MinIsWhite : 0MinIsBlack : 1RGB : 2调色板 : 3面具 : 4分离 : 5YCbCr : 6CIELab : 8ICCLab : 9ITULab : 10 |
看到表2. |
Photoshop |
uint8 |
1 xn |
||
PlanarConfiguration |
双 |
1 x1 |
厚实 : 1单独的 : 2 |
|
PrimaryChromaticities |
双 |
1 x6 |
||
ReferenceBlackWhite |
双 |
1 x6 |
||
ResolutionUnit |
双 |
1 x1 |
||
RICHTIFFIPTC |
uint8 |
1 xn |
||
RowsPerStrip |
双 |
1 x1 |
||
RPCCoefficientTag |
双 |
1 x92 |
92元行向量 | 看到表6 |
SampleFormat |
双 |
1 x1 |
使用Uint : 1Int : 2IEEEFP : 3 |
看到表2 |
SamplesPerPixel |
双 |
1 x1 |
||
SMaxSampleValue |
双 |
1 x1 |
为图像数据指定的MATLAB数据类型范围 | |
SMinSampleValue |
双 |
1 x1 |
为图像数据指定的MATLAB数据类型范围 | |
软件 |
字符 |
1 xn |
||
StripByteCounts |
双 |
1 xn |
只读 | |
StripOffsets |
双 |
1 xn |
只读 | |
SubFileType |
双 |
1 x1 |
默认的 : 0ReducedImage : 1页面 : 2面具 : 4 |
|
SubIFD |
双 |
1 x1 |
||
TargetPrinter |
字符 |
1 xn |
||
阈值 |
双 |
1 x1 |
上下两层的 : 1半色调 : 2ErrorDiffuse : 3 |
|
TileByteCounts |
双 |
1 xn |
只读 | |
TileLength |
双 |
1 x1 |
一定是16的倍数 | |
TileOffsets |
双 |
1 xn |
只读 | |
TileWidth |
双 |
1 x1 |
一定是16的倍数 | |
TransferFunction |
双 |
看到的请注意1 | 每个值应该在0-2 ^16-1之间 | SamplePerPixel 可以是1或3 |
WhitePoint |
双 |
1 x2 |
光度 可以是:RGB 调色板 YCbCr CIELab ICCLab ITULab |
|
XMP |
字符 |
1 xn |
N > 5 |
|
XPostion |
双 |
1 x1 |
||
XResolution |
双 |
1 x1 |
||
YCbCrCoefficents |
双 |
1 x3 |
光度 必须YCbCr |
|
YCbCrPositioning |
双 |
1 x1 |
为中心的 : 1Cosited : 2 |
光度 必须YCbCr |
YCbCrSubSampling |
双 |
1 x2 |
光度 必须YCbCr |
|
YPosition |
双 |
1 x1 |
||
YResolution |
双 |
1 x1 |
||
ZipQuality |
双 |
1 x1 |
取值在1到9之间 |
1大小是1 x2 ^ BitsPerSample
或3 x2 ^ BitsPerSample
.
表2:BitsPerSample设置的有效SampleFormat值
BitsPerSample | SampleFormat | MATLAB数据类型 |
---|---|---|
1 | 使用Uint |
逻辑 |
8 | 使用Uint ,Int |
uint8 ,int8 |
16 | 使用Uint ,Int |
uint16 ,int16 |
32 | 使用Uint ,Int ,IEEEFP |
uint32 ,int32 ,单 |
64 | IEEEFP |
双 |
表3:BitsPerSample和Photometric组合的有效SampleFormat值
BitsPerSample值 | |||||
---|---|---|---|---|---|
光度值 | 1 | 8 | 16 | 32 | 64 |
MinIsWhite |
使用Uint |
使用Uint / Int |
使用Uint Int |
使用Uint Int IEEEFP |
IEEEFP |
MinIsBlack |
使用Uint |
使用Uint / Int |
使用Uint Int |
使用Uint Int IEEEFP |
IEEEFP |
RGB |
使用Uint |
使用Uint |
使用Uint IEEEFP |
IEEEFP |
|
调色板 |
使用Uint |
使用Uint |
|||
面具 |
使用Uint |
||||
分离 |
使用Uint |
使用Uint |
使用Uint IEEEFP |
IEEEFP |
|
YCbCr |
使用Uint |
使用Uint |
使用Uint IEEEFP |
IEEEFP |
|
CIELab |
使用Uint |
使用Uint |
|||
ICCLab |
使用Uint |
使用Uint |
|||
ITULab |
使用Uint |
使用Uint |
表4:BitsPerSample和压缩组合的有效SampleFormat值
BitsPerSample值 | |||||
---|---|---|---|---|---|
压缩值 | 1 | 8 | 16 | 32 | 64 |
没有一个 |
使用Uint |
使用Uint Int |
使用Uint Int |
使用Uint Int IEEEFP |
IEEEFP |
CCITTRLE |
使用Uint |
||||
CCITTFax3 |
使用Uint |
||||
CCITTFax4 |
使用Uint |
||||
LZW |
使用Uint |
使用Uint Int |
使用Uint Int |
使用Uint Int IEEEFP |
IEEEFP |
JPEG |
使用Uint Int |
||||
CCITTRLEW |
使用Uint |
||||
PackBits |
使用Uint |
使用Uint Int |
使用Uint Int |
使用Uint Int IEEEFP |
IEEEFP |
缩小 |
使用Uint |
使用Uint Int |
使用Uint Int |
使用Uint Int IEEEFP |
IEEEFP |
AdobeDeflate |
使用Uint |
使用Uint Int |
使用Uint Int |
使用Uint Int IEEEFP |
IEEEFP |
表5:光度设置的有效SamplesPerPixel值
光度值 | SamplesPerPixel1 |
---|---|
MinIsWhite |
1 + |
MinIsBlack |
1 + |
RGB |
3 + |
调色板 |
1 |
面具 |
1 |
分离 |
1 + |
YCbCr |
3. |
CIELab |
3 + |
ICCLab |
3 + |
ITULab |
3 + |
表6:rpccoefficients标签值描述列表
92元向量中的索引值 | 值描述1 | 单位 |
---|---|---|
1 | 均方根偏差误差 | 米/水平轴 |
2 | 均方根随机误差 | 米/水平轴 |
3. | 线偏移量 | 像素 |
4 | 样本抵消 | 像素 |
5 | 大地纬度偏移 | 度 |
6 | 大地经度偏移 | 度 |
7 | 大地高度偏移 | 米 |
8 | 线尺度因子 | 像素 |
9 | 样本比例因子 | 像素 |
10 | 大地纬度比例尺 | 度 |
11 | 大地经度刻度 | 度 |
12 | 大地高度比例因子 | 米 |
13到32 | 分子系数r (n),有理多项式方程2 | |
33到52 | 有理多项式方程的分母系数r (n) | |
53到72 | 分子系数c (n),有理多项式方程2 | |
73到92 | 有理多项式方程的分母系数c (n) |
1属性指定此向量中的值RPCCoefficientTag
对象,看到
在映射工具箱™。RPCCoefficientTag
(映射工具箱)
2方程r (n)而且c (n)表示一般严格投影模型的规格化的行值和列值。