TransformedDatastore
说明
使用一个 TransformedDatastore
对象变换或处理从基础数据存储中读取的数据。
创建对象
您可以使用 transform
函数创建 TransformedDatastore
对象。例如,dsnew = transform(ds1_data,ds2_data,...dsN_data,@fcn)
会创建一个数据存储,该数据存储使用变换函数 fcn
ds1_data,ds2_data,...dsN_data
来变换一个或多个数据存储。
属性
UnderlyingDatastores
— 基础数据存储
数据存储对象的元胞数组
基础数据存储,以数据存储对象的元胞数组形式返回。
Transforms
— 变换函数集
元胞数组
变换函数集,指定为函数句柄元胞数组。
数据类型: cell
IncludeInfo
— 包含来自 read
函数的信息
逻辑向量
包括来自 read
函数的信息,指定为逻辑向量。对于 IncludeInfo
为 true
的每个值,变换后的数据存储使用 transformSet
中对应变换函数的替代签名。
read
函数以 info
结构体形式返回有关所提取数据的信息。有关详细信息,请参阅 read
函数页。
数据类型: logical
SupportedOutputFormats
— 支持写入的格式
字符串行向量
此 属性 为只读。
支持写入的格式,以字符串组成的行向量形式返回。此属性指定使用 writeall
从数据存储写入输出文件时可能的输出格式。
对象函数
combine | 合并来自多个数据存储的数据 |
hasdata | 确定是否有数据可读取 |
preview | 预览数据存储中的数据子集 |
read | 读取数据存储中的数据 |
readall | 读取数据存储中的所有数据 |
writeall | 将数据存储写入文件 |
reset | 将数据存储重置为初始状态 |
transform | 变换数据存储 |
numpartitions | 数据存储分区数 |
partition | 划分数据存储 |
shuffle | 对数据存储中的所有数据进行乱序处理 |
isPartitionable | 确定数据存储是否可分区 |
isSubsettable | Determine whether datastore is subsettable |
isShuffleable | 确定数据存储是否可乱序 |
示例
将变换应用于图像集合
为图像集合创建一个数据存储,并对数据存储中的所有图像应用相同的变换。例如,将集合中的所有图像调整到指定的目标大小。
创建一个包含两个图像的 ImageDatastore
。
imds = imageDatastore({'street1.jpg','peppers.png'})
imds = ImageDatastore with properties: Files: { ' .../devel/bat/Bdoc22b/build/matlab/toolbox/matlab/demos/street1.jpg'; ' .../devel/bat/Bdoc22b/build/matlab/toolbox/matlab/imagesci/peppers.png' } Folders: { '/mathworks/devel/bat/Bdoc22b/build/matlab/toolbox/matlab/demos'; '/mathworks/devel/bat/Bdoc22b/build/matlab/toolbox/matlab/imagesci' } AlternateFileSystemRoots: {} ReadSize: 1 Labels: {} SupportedOutputFormats: ["png" "jpg" "jpeg" "tif" "tiff"] DefaultOutputFormat: "png" ReadFcn: @readDatastoreImage
读取所有图像。请注意,该数据存储包含不同大小的图像。
img1 = read(imds); % reads the first image img2 = read(imds); % reads the next image whos img1 img2
Name Size Bytes Class Attributes img1 480x640x3 921600 uint8 img2 384x512x3 589824 uint8
将数据存储中的所有图像变换为指定的目标大小。
targetSize = [224,224]; imdsReSz = transform(imds,@(x) imresize(x,targetSize));
读取图像并显示其大小。
imgReSz1 = read(imdsReSz); imgReSz2 = read(imdsReSz); whos imgReSz1 imgReSz2
Name Size Bytes Class Attributes imgReSz1 224x224x3 150528 uint8 imgReSz2 224x224x3 150528 uint8
显示调整大小后的图像。
tiledlayout(1,2); nexttile imshow(imgReSz1); axis on; title('Resized Street1.jpg') nexttile imshow(imgReSz2); axis on; title('Resized peppers.png')
变换多个数据存储
创建多个数据存储对象,并对所有数据存储应用相同的变换。例如,将多个图像组合成一个矩形分块图像。
创建一个包含一个图像的 ImageDatastore
。
imds1 = imageDatastore({'ngc6543a.jpg'})
imds1 = ImageDatastore with properties: Files: { ' .../devel/bat/Bdoc22b/build/matlab/toolbox/matlab/demos/ngc6543a.jpg' } Folders: { '/mathworks/devel/bat/Bdoc22b/build/matlab/toolbox/matlab/demos' } AlternateFileSystemRoots: {} ReadSize: 1 Labels: {} SupportedOutputFormats: ["png" "jpg" "jpeg" "tif" "tiff"] DefaultOutputFormat: "png" ReadFcn: @readDatastoreImage
将该图像读入工作区中,以基于原始图像的每个颜色通道创建一个图像文件。
rgbImage = imread('ngc6543a.jpg'); imwrite(rgbImage(:,:,1),'nebula_red.jpg'); imwrite(rgbImage(:,:,2),'nebula_green.jpg'); imwrite(rgbImage(:,:,3),'nebula_blue.jpg');
为每个单通道图像创建一个 ImageDatastore
对象。
imdsR = imageDatastore({'nebula_red.jpg'}); imdsG = imageDatastore({'nebula_green.jpg'}); imdsB = imageDatastore({'nebula_blue.jpg'});
读取存储在每个数据存储中的图像,并显示其大小。
imOriginal = read(imds1); img_red = read(imdsR); img_green = read(imdsG); img_blue = read(imdsB); whos img1 img_red img_green img_blue
Name Size Bytes Class Attributes img_blue 650x600 390000 uint8 img_green 650x600 390000 uint8 img_red 650x600 390000 uint8
通过将所有图像合并为一个矩形分块图像来变换所有数据存储。将 imds1
中的彩色图像转换为灰度图像,使其维度与其他图像的维度相匹配。
tds1 = transform(imds1,imdsR,imdsG,imdsB, @(x1,x2,x3,x4) [rgb2gray(x1),x2;x3,x4]); tile = read(tds1);
显示该分块图。
imshow(tile)
版本历史记录
在 R2019a 中推出
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)