Main Content

splitEachLabel

按比例拆分 ImageDatastore 标签

说明

示例

[imds1,imds2] = splitEachLabel(imds,p) 可将 imds 中的图像文件拆分为两个新的数据存储,imds1imds2。新的数据存储 imds1 包含每个标签的前 p 的文件,imds2 包含每个标签的其余文件。p 可以是 0 到 1 之间的数字,指明每个标签分配给 imds1 的文件百分比;也可以是一个整数,指明每个标签分配给 imds1 的绝对文件数。

示例

[imds1,...,imdsM] = splitEachLabel(imds,p1,...,pN) 将数据存储拆分为 N+1 个新的数据存储。第一个新的数据存储 imds1 包含每个标签的前 p1 的文件,下一个新的数据存储 imds2 包含接下来的 p2 的文件,以此类推。如果 p1,...,pN 代表文件数量,则它们的总和不能超过原始数据存储 imds 中最小标签的文件数量。

示例

___ = splitEachLabel(___,'randomized') 将每个标签的指定比例的文件随机分配给新的数据存储。

示例

___ = splitEachLabel(___,Name,Value) 使用一个或多个名称-值对组参数指定新数据存储的属性。例如,您可以通过 'Include','labelname' 指定要拆分的标签。

示例

全部折叠

创建一个 ImageDatastore 对象,并根据每个图像所在文件夹的名称为其添加标签。生成的标签名称为 demosimagesci

imds = imageDatastore(fullfile(matlabroot, 'toolbox', 'matlab', {'demos','imagesci'}),...
'LabelSource', 'foldernames', 'FileExtensions', {'.jpg', '.png', '.tif'});

imds.Labels
ans = 

     demos 
     demos 
     demos 
     demos 
     demos 
     demos 
     imagesci 
     imagesci 

imds 中的文件创建两个新的数据存储。第一个数据存储 imds60 包含前 60% 的带有 demos 标签的文件以及前 60% 的带有 imagesci 标签的文件。第二个数据存储 imds40 包含每个标签上其余 40% 的文件。如果对标签应用百分比后得出的文件数不是整数,splitEachLabel 会向下舍入到最接近的整数。

[imds60,imds40] = splitEachLabel(imds,0.6)
imds60 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\cloudCombined.jpg';
             ' ...\matlab\toolbox\matlab\demos\example.tif';
             ' ...\matlab\toolbox\matlab\demos\landOcean.jpg'
              ... and 2 more
             }
     Labels: [demos; demos; demos ... and 2 more categorical]
    ReadFcn: @readDatastoreImage


imds40 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\street1.jpg';
             ' ...\matlab\toolbox\matlab\demos\street2.jpg';
             ' ...\matlab\toolbox\matlab\imagesci\peppers.png'
             }
     Labels: [demos; demos; imagesci]
    ReadFcn: @readDatastoreImage

创建一个 ImageDatastore 对象,并根据每个图像所在文件夹的名称为其添加标签。生成的标签名称为 demosimagesci

imds = imageDatastore(fullfile(matlabroot, 'toolbox', 'matlab', {'demos','imagesci'}),...
'LabelSource', 'foldernames', 'FileExtensions', {'.jpg', '.png', '.tif'});

imds.Labels
ans = 

     demos 
     demos 
     demos 
     demos 
     demos 
     demos 
     imagesci 
     imagesci 

imds 中的文件创建两个新的数据存储。第一个数据存储 imds1 包含第一个带有 demos 标签的文件以及第一个带有 imagesci 标签的文件。第二个数据存储 imds2 包含每个标签上剩余的文件。

[imds1,imds2] = splitEachLabel(imds,1)
imds1 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\cloudCombined.jpg';
             ' ...\matlab\toolbox\matlab\imagesci\corn.tif'
             }
     Labels: [demos; imagesci]
    ReadFcn: @readDatastoreImage


imds2 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\example.tif';
             ' ...\matlab\toolbox\matlab\demos\landOcean.jpg';
             ' ...\matlab\toolbox\matlab\demos\ngc6543a.jpg'
              ... and 3 more
             }
     Labels: [demos; demos; demos ... and 3 more categorical]
    ReadFcn: @readDatastoreImage

创建一个 ImageDatastore 对象,并根据每个图像所在文件夹的名称为其添加标签。生成的标签名称为 demosimagesci

imds = imageDatastore(fullfile(matlabroot, 'toolbox', 'matlab', {'demos','imagesci'}),...
'LabelSource', 'foldernames', 'FileExtensions', {'.jpg', '.png', '.tif'});

imds.Labels
ans = 

     demos 
     demos 
     demos 
     demos 
     demos 
     demos 
     imagesci 
     imagesci 

imds 中的文件创建三个新的数据存储。第一个数据存储 imds60 包含前 60% 的带有 demos 标签的文件以及前 60% 的带有 imagesci 标签的文件。第二个数据存储 imds10 包含每个标签上接下来的 10% 的文件。第三个数据存储 imds30 包含每个标签上其余 30% 的文件。如果对标签应用百分比后得出的文件数不是整数,splitEachLabel 会向下舍入到最接近的整数。

[imds60, imds10, imds30] = splitEachLabel(imds,0.6,0.1)
imds60 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\cloudCombined.jpg';
             ' ...\matlab\toolbox\matlab\demos\example.tif';
             ' ...\matlab\toolbox\matlab\demos\landOcean.jpg'
              ... and 2 more
             }
     Labels: [demos; demos; demos ... and 2 more categorical]
    ReadFcn: @readDatastoreImage


imds10 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\street1.jpg'
             }
     Labels: demos
    ReadFcn: @readDatastoreImage


imds30 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\street2.jpg';
             ' ...\matlab\toolbox\matlab\imagesci\peppers.png'
             }
     Labels: [demos; imagesci]
    ReadFcn: @readDatastoreImage

创建一个 ImageDatastore 对象,并根据每个图像所在文件夹的名称为其添加标签。生成的标签名称为 demosimagesci

imds = imageDatastore(fullfile(matlabroot, 'toolbox', 'matlab', {'demos','imagesci'}),...
'LabelSource', 'foldernames', 'FileExtensions', {'.jpg', '.png', '.tif'});

imds.Labels
ans = 

     demos 
     demos 
     demos 
     demos 
     demos 
     demos 
     imagesci 
     imagesci 

imds 中的文件创建三个新的数据存储。第一个数据存储 imds1 包含第一个带有 demos 标签的文件以及第一个带有 imagesci 标签的文件。第二个数据存储 imds2 包含每个标签的下一个文件。第三个数据存储 imds3 包含每个标签上剩余的文件。

[imds1, imds2, imds3] = splitEachLabel(imds,1,1)
imds1 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\cloudCombined.jpg';
             ' ...\matlab\toolbox\matlab\imagesci\corn.tif'
             }
     Labels: [demos; imagesci]
    ReadFcn: @readDatastoreImage


imds2 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\example.tif';
             ' ...\matlab\toolbox\matlab\imagesci\peppers.png'
             }
     Labels: [demos; imagesci]
    ReadFcn: @readDatastoreImage


imds3 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\landOcean.jpg';
             ' ...\matlab\toolbox\matlab\demos\ngc6543a.jpg';
             ' ...\matlab\toolbox\matlab\demos\street1.jpg'
              ... and 1 more
             }
     Labels: [demos; demos; demos ... and 1 more categorical]
    ReadFcn: @readDatastoreImage

创建一个 ImageDatastore 对象,并根据每个图像所在文件夹的名称为其添加标签。生成的标签名称为 demosimagesci

imds = imageDatastore(fullfile(matlabroot, 'toolbox', 'matlab', {'demos','imagesci'}),...
'LabelSource', 'foldernames', 'FileExtensions', {'.jpg', '.png', '.tif'});

imds.Labels
ans = 

     demos 
     demos 
     demos 
     demos 
     demos 
     demos 
     imagesci 
     imagesci 

通过从每个标签上随机抽取,用 imds 中的文件创建两个新的数据存储。第一个数据存储 imds1 包含一个带有 demos 标签的随机文件以及一个带有 imagesci 标签的随机文件。第二个数据存储 imds2 包含每个标签上剩余的文件。

[imds1, imds2] = splitEachLabel(imds,1,'randomized')
imds1 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\street2.jpg';
             ' ...\matlab\toolbox\matlab\imagesci\corn.tif'
             }
     Labels: [demos; imagesci]
    ReadFcn: @readDatastoreImage


imds2 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\cloudCombined.jpg';
             ' ...\matlab\toolbox\matlab\demos\example.tif';
             ' ...\matlab\toolbox\matlab\demos\landOcean.jpg'
              ... and 3 more
             }
     Labels: [demos; demos; demos ... and 3 more categorical]
    ReadFcn: @readDatastoreImage

创建一个 ImageDatastore 对象,并根据每个图像所在文件夹的名称为其添加标签。生成的标签名称为 demosimagesci

imds = imageDatastore(fullfile(matlabroot, 'toolbox', 'matlab', {'demos','imagesci'}),...
'LabelSource', 'foldernames', 'FileExtensions', {'.jpg', '.png', '.tif'});

imds.Labels
ans = 

     demos 
     demos 
     demos 
     demos 
     demos 
     demos 
     imagesci 
     imagesci 

imds 中的文件创建两个新的数据存储,其中只包括带有 demos 标签的文件。第一个数据存储 imds60 包含前 60% 的带有 demos 标签的文件,第二个数据存储 imds40 包含带有 demos 标签的其余 40% 的文件。

[imds60, imds40] = splitEachLabel(imds,0.6,'Include','demos')
imds60 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\cloudCombined.jpg';
             ' ...\matlab\toolbox\matlab\demos\example.tif';
             ' ...\matlab\toolbox\matlab\demos\landOcean.jpg'
              ... and 1 more
             }
     Labels: [demos; demos; demos ... and 1 more categorical]
    ReadFcn: @readDatastoreImage


imds40 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\street1.jpg';
             ' ...\matlab\toolbox\matlab\demos\street2.jpg'
             }
     Labels: [demos; demos]
    ReadFcn: @readDatastoreImage

同样,可以通过排除 imagesci 标签,只拆分 demos 标签。

[imds60, imds40] = splitEachLabel(imds,0.6,'Exclude','imagesci')
imds60 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\cloudCombined.jpg';
             ' ...\matlab\toolbox\matlab\demos\example.tif';
             ' ...\matlab\toolbox\matlab\demos\landOcean.jpg'
              ... and 1 more
             }
     Labels: [demos; demos; demos ... and 1 more categorical]
    ReadFcn: @readDatastoreImage


imds40 = 

  ImageDatastore with properties:

      Files: {
             ' ...\matlab\toolbox\matlab\demos\street1.jpg';
             ' ...\matlab\toolbox\matlab\demos\street2.jpg'
             }
     Labels: [demos; demos]
    ReadFcn: @readDatastoreImage

输入参数

全部折叠

输入数据存储,指定为 ImageDatastore 对象。要根据图像数据创建 ImageDatstore,请使用 imageDatastore 函数。

要拆分的文件的比例,指定为区间 (0,1) 中的标量或正整数标量。

  • 如果 p 在区间 (0,1) 内,则它表示每个标签上要分配给 imds1 的文件百分比。如果 p 得出的文件数不是整数,则 splitEachLabel 会向下舍入到最接近的整数。

  • 如果 p 是一个整数,则它表示每个标签上要分配给 imds1 的绝对文件数。必须至少有 p 个文件与每个标签关联。

数据类型: double

比例列表,指定为区间 (0,1) 中的标量或正整数标量。如果比例在区间 (0,1) 内,则这些比例表示每个标签上要分配给输出数据存储的文件百分比。如果比例是整数,则这些比例表示每个标签上要分配给输出数据存储的绝对文件数。当比例表示百分比时,它们的总和不能超过 1。当比例表示文件数时,必须有足够的文件与每个标签关联,以满足每个比例。

数据类型: double

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: [imds1 imds2] = splitEachLabel(imds,0.5,'Exclude','demos')

要包括的标签,指定为以逗号分隔的对组,其中包含 'Include' 和一个标签名称向量、元胞数组或字符串,标签名称的类型与 Labels 属性相同。每个名称必须与数据存储的 Labels 属性中的一个标签相匹配。

数据类型: char | cell | string

要排除的标签,指定为以逗号分隔的对组,其中包含 'Exclude' 和一个标签名称向量、元胞数组或字符串,标签名称的类型与 Labels 属性相同。每个名称定义一个与数据存储关联的标签,而且必须与 Labels 中的名称相匹配。此选项不能与 'Include' 选项一起使用。

数据类型: char | cell | string

输出参数

全部折叠

输出数据存储,以 ImageDatastore 对象形式返回。imds1 包含 imds 中每个标签的指定比例的文件,imds2 包含其余文件。

输出数据存储的列表,以 ImageDatastore 对象形式返回。列表中的元素数比列出的比例数多一。每个新的数据存储包含 imds 中每个标签上由 p1,...,pN 定义的比例。剩下的所有文件都分配给 Mth 数据存储。

扩展功能

版本历史记录

在 R2016a 中推出