变换
变换数据存储
语法
描述
使用转换函数转换一个或多个输入数据存储dsnew
=变换(ds1, ds2,…,dsN
,@fcn
)fcn
并返回转换后的数据存储dsnew
.fcn
可以放在所有输入数据存储之前或之后,在调用变换
函数。
使用转换函数的替代定义dsnew
=变换(ds1, ds2,…,dsN
,@fcn
“IncludeInfo”,IncludeInfo
)fcn
.方法返回的附加信息可以使用替代定义读
数据存储的功能。
例子
将转换应用到图像集合
为图像集合创建一个数据存储,并对该数据存储中的所有图像应用相同的转换。例如,将集合中的所有图像调整为指定的目标大小。
创建一个ImageDatastore
有两个图像。
imds = imageDatastore({“street1.jpg”,“peppers.png”})
imds = ImageDatastore属性:Files:{'…/devel/bat/Bdoc22b/build/matlab/toolbox/matlab/demos/street1.jpg';文件夹:{'/mathworks/devel/bat/Bdoc22b/build/matlab/toolbox/matlab/ imagesci/椒椒水.png';'/mathworks/devel/bat/Bdoc22b/build/matlab/toolbox/matlab/imagesci'} AlternateFileSystemRoots: {} ReadSize: 1 Labels: {} S万博1manbetxupportedOutputFormats: ["png" "jpg" "jpeg" "tif" "tiff"] DefaultOutputFormat: "png" ReadFcn: @readDatastoreImage
阅读所有图片。注意,数据存储包含不同大小的映像。
Img1 = read(imds);%读取第一个图像Img2 = read(imds);%读取下一个图像谁img1img2
名称大小字节类型属性img1 480x640x3 921600 uint8 img2 384x512x3 589824 uint8
将数据存储中的所有图像转换为指定的目标大小。
targetSize = [224,224];imdsReSz = transform(imds,@(x) imresize(x,targetSize));
读取图像并显示其大小。
imgReSz1 = read(imdsReSz);imgReSz2 = read(imdsReSz);谁imgReSz1imgReSz2
名称大小字节类属性imgReSz1 224x224x3 150528 uint8 imgReSz2 224x224x3 150528 uint8
显示调整大小的图像。
tiledlayout(1、2);nexttile imshow (imgReSz1);轴在;标题(“调整大小Street1.jpg”nexttile imshow(imgReSz2);轴在;标题(“调整大小peppers.png”)
转换多个数据存储
创建多个数据存储对象,并对所有数据存储应用相同的转换。例如,将多个图像组合成一个矩形平铺图像。
创建一个ImageDatastore
只用一张图片。
imds1 = imageDatastore({“ngc6543a.jpg”})
imds1 = ImageDatastore与属性:文件:{'…/devel/bat/ build/matlab/toolbox/matlab/demos/ngc6543a.jpg'}文件夹:{'/mathworks/devel/bat/Bdoc22b/build/matlab/toolbox/matlab/demos'} AlternateFileSystemRoots: {} ReadSize: 1标签:{}SupportedOutputFormats: ["png" "jpg" "jpeg" "万博1manbetxtif" "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);谁img1img_redimg_greenimg_blue
名称大小字节分类属性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(瓷砖)
输入参数
ds1, ds2,…,dsN
- - - - - -输入数据存储
数据存储对象
输入数据存储。有关内置数据存储的完整列表,请参见选择“文件格式”或“应用程序”的数据存储.还可以指定自定义数据存储。
@fcn
- - - - - -转换数据的函数
函数处理
转换数据的函数,指定为函数句柄。中定义的转换,函数将数据作为输入并返回转换后的数据fcn
.
变换函数必须有这个签名和ds1_data、ds2_data…dsN_data
必须与使用?方法返回的数据的形式相同读
函数。
函数dataOut = transformFcn(ds1_data,ds2_data, ds2_data,...dsN_data)..结束
或者,您可以定义您的转换函数fcn
方法返回的数据的附加信息读
函数。要使用此替代定义,必须指定值IncludeInfo
是真正的
.在这种情况下,变换函数必须有这个签名。
函数[dataOut,infoOut] = transformFcn(ds1_data,ds2_data, ds2_data,...dsN_data、ds1_info ds2_info…dsN_info)..结束
例子:@transformFcn
数据类型:function_handle
IncludeInfo
- - - - - -包括来自读
函数
真正的
|假
包括来自读
函数,指定为任意一种真正的
或假
.的读
函数中提取的数据的信息信息
结构体。有关更多信息,请参见读
功能页面。
的值时IncludeInfo
来真正的
,则必须为转换函数使用替代签名fcn
.
输出参数
dsnew
-新的数据存储转换的数据
TransformedDatastore
对象
具有转换后的数据的新数据存储,返回为TransformedDatastore
对象。
扩展功能
线程环境
使用MATLAB®在后台运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.
使用注意事项和限制:
在基于线程的环境中,可以使用
变换
仅适用于以下数据存储:ImageDatastore
对象CombinedDatastore
,SequentialDatastore
,或TransformedDatastore
从中创建的对象ImageDatastore
通过使用结合
或变换
你可以使用
变换
与其他数据存储,如果您有并行计算工具箱™。为此,请使用进程支持的并行池而不是使用backgroundPool
或ThreadPool
(使用ProcessPool
或ClusterPool
).
有关更多信息,请参见在线程环境中运行MATLAB函数.
版本历史
在R2019a中引入
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。