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: { ' .../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)
输入参数
ds1,ds2,...,dsN
— 输入数据存储
数据存储对象
输入数据存储。有关内置数据存储的完整列表,请参阅Select Datastore for File Format or Application。您还可以指定自定义数据存储。
@fcn
— 用于变换数据的函数
函数句柄
用于变换数据的函数,指定为函数句柄。该函数将数据作为输入,并根据 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
IncludeInfo
— 包含来自 read
函数的信息
true
| false
包含来自 read
函数的信息,指定为 true
或 false
。read
函数以 info
结构体形式返回有关所提取数据的信息。有关详细信息,请参阅 read
函数页。
当您将 IncludeInfo
的值设置为 true
时,您必须为变换函数 fcn
使用替代签名。
输出参数
dsnew
— 包含变换后数据的新数据存储
TransformedDatastore
对象
包含变换后数据的新数据存储,以 TransformedDatastore
对象形式返回。
扩展功能
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
用法说明和限制:
在基于线程的环境中,您只能对以下数据存储使用
transform
:ImageDatastore
对象使用
combine
或transform
从ImageDatastore
对象创建的CombinedDatastore
、SequentialDatastore
或TransformedDatastore
对象
如果您有 Parallel Computing Toolbox™,则可以对其他数据存储使用
transform
。为此,请使用基于进程的并行池运行该函数,而不是使用backgroundPool
或ThreadPool
(使用ProcessPool
或ClusterPool
)。
版本历史记录
在 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)