变换
变换数据存储
语法
描述
使用转换函数转换一个或多个输入数据存储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中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。