transform
变换数据存储
语法
说明
使用变换函数 dsnew = transform(ds1,ds2,...,dsN,@fcn)fcn 变换一个或多个输入数据存储,并返回变换后的数据存储 dsnew。在调用 transform 函数时,可以将 fcn 放在所有输入数据存储之前或之后。
使用变换函数 dsnew = transform(ds1,ds2,...,dsN,@fcn,'IncludeInfo',IncludeInfo)fcn 的替代定义。您可以通过替代定义使用数据存储的 read 函数返回的附加信息。
示例
为图像集合创建一个数据存储,并对数据存储中的所有图像应用相同的变换。例如,将集合中的所有图像调整到指定的目标大小。
创建一个包含两个图像的 ImageDatastore。
imds = imageDatastore({'street1.jpg','peppers.png'})imds =
ImageDatastore with properties:
Files: {
' .../build/runnable/matlab/toolbox/matlab/demos/street1.jpg';
' .../build/runnable/matlab/toolbox/matlab/matlab_images/png/peppers.png'
}
Folders: {
' .../Bdoc25a.2974004/build/runnable/matlab/toolbox/matlab/demos';
' .../build/runnable/matlab/toolbox/matlab/matlab_images/png'
}
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: {
' .../build/runnable/matlab/toolbox/matlab/demos/ngc6543a.jpg'
}
Folders: {
' .../Bdoc25a.2974004/build/runnable/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)

输入参数
输入数据存储。有关内置数据存储的完整列表,请参阅Select Datastore for File Format or Application。您还可以指定自定义数据存储。
用于变换数据的函数,指定为函数句柄。该函数将数据作为输入,并根据 fcn 中定义的转换返回变换后的数据。
变换函数必须具有以下签名,并且 ds1_data,ds2_data,...dsN_data 必须与使用 read 函数返回的数据具有相同的形式。
function dataOut = transformFcn(ds1_data,ds2_data,...dsN_data) .. end
您也可以将您的变换函数 fcn定义为使用有关 read 函数返回的数据的附加信息。要使用此替代定义,您必须将 IncludeInfo 的值指定为 true。在本例中,变换函数必须有以下签名。
function [dataOut,infoOut] = transformFcn(ds1_data,ds2_data,...dsN_data,ds1_info,ds2_info...dsN_info) .. end
示例: @transformFcn
数据类型: function_handle
包含来自 read 函数的信息,指定为 true 或 false。read 函数以 info 结构体形式返回有关所提取数据的信息。有关详细信息,请参阅 read 函数页。
当您将 IncludeInfo 的值设置为 true 时,您必须为变换函数 fcn 使用替代签名。
输出参量
包含变换后数据的新数据存储,以 TransformedDatastore 对象形式返回。
扩展功能
用法说明和限制:
在基于线程的环境中,您只能对以下数据存储使用
transform:ImageDatastore对象使用
combine或transform从ImageDatastore对象创建的CombinedDatastore、SequentialDatastore或TransformedDatastore对象
如果您有 Parallel Computing Toolbox™,则可以对其他数据存储使用
transform。为此,请使用基于进程的并行池运行该函数,而不是使用backgroundPool或ThreadPool(使用ProcessPool或ClusterPool)。
有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2019a 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)