exponenta event banner

TransformedDatastore

Datastore, чтобы преобразовать базовый datastore

Описание

Использование TransformedDatastore объект для преобразования или обработки данных, считанных из базового datastore.

Создание

Можно создать TransformedDatastore использование объекта transform функция. Для примера, dsnew = transform(ds1_data,ds2_data,...dsN_data,@fcn) создает хранилище datastore, которое преобразует один или несколько хранилищ данных ds1_data,ds2_data,...dsN_data использование функции преобразования fcn.

Свойства

расширить все

Базовые хранилища данных, возвращенные как массив ячеек объектов datastore.

Набор функций преобразования, заданный как cell-массив указателей на функцию.

Типы данных: cell

Включите информацию из read функция, заданная как логический вектор. Для каждого значения IncludeInfo то есть true, преобразованный datastore использует альтернативную сигнатуру соответствующей функции преобразования в transformSet.

The read функция возвращает информацию об извлеченных данных в info struct. Для получения дополнительной информации смотрите read страница функции.

Типы данных: logical

Это свойство доступно только для чтения.

Список форматов, поддерживаемых для записи, возвращаемый как вектор-строка строк. Это свойство задает возможные выходные форматы при использовании writeall для записи выходных файлов из datastore.

Типы данных: string

Функции объекта

combineОбъедините данные из нескольких хранилищ данных
hasdataОпределите, доступны ли данные для чтения
previewПредварительный просмотр подмножества данных в datastore
readЧтение данных в datastore
readallЧтение всех данных в datastore
writeallЗапись datastore в файлы
resetСбросьте datastore в начальное состояние
transformПреобразуйте datastore
numpartitionsКоличество разделов datastore
partitionРаздел datastore
shuffleПеретащите все данные в datastore
isPartitionableОпределите, является ли datastore разделяемым
isShuffleableОпределите, является ли datastore shuffleable

Примеры

свернуть все

Создайте datastore для набора изображений и примените то же преобразование ко всем изображениям в datastore. Например, измените размер всех изображений в наборе на заданный целевой размер.

Создайте ImageDatastore с двумя изображениями.

imds = imageDatastore({'street1.jpg','peppers.png'})
imds = 
  ImageDatastore with properties:

                       Files: {
                              ' .../devel/bat/BR2021ad/build/matlab/toolbox/matlab/demos/street1.jpg';
                              ' .../devel/bat/BR2021ad/build/matlab/toolbox/matlab/imagesci/peppers.png'
                              }
                     Folders: {
                              '/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/matlab/demos';
                              '/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/matlab/imagesci'
                              }
    AlternateFileSystemRoots: {}
                    ReadSize: 1
                      Labels: {}
      SupportedOutputFormats: ["png"    "jpg"    "jpeg"    "tif"    "tiff"]
         DefaultOutputFormat: "png"
                     ReadFcn: @readDatastoreImage

Прочитайте все изображения. Заметьте, что datastore содержит изображения разных размеров.

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              

Преобразуйте все изображения в datastore к заданному целевому размеру.

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              

Отображение измененных размеров изображений.

subplot(121); imshow(imgReSz1); axis on; title('Resized Street1.jpg');
subplot(122); imshow(imgReSz2); axis on; title('Resized peppers.png');

Figure contains 2 axes. Axes 1 with title Resized Street1.jpg contains an object of type image. Axes 2 with title Resized peppers.png contains an object of type image.

Создайте несколько объектов datastore и примените одно и то же преобразование ко всем хранилищам данных. Например, объедините несколько изображений в одно прямоугольное мозаичное изображение.

Создайте ImageDatastore с одним изображением.

imds1 = imageDatastore({'ngc6543a.jpg'})
imds1 = 
  ImageDatastore with properties:

                       Files: {
                              ' .../devel/bat/BR2021ad/build/matlab/toolbox/matlab/demos/ngc6543a.jpg'
                              }
                     Folders: {
                              '/mathworks/devel/bat/BR2021ad/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'});

Считывайте изображение, хранящееся в каждом datastore, и отображайте их размеры.

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)

Figure contains an axes. The axes contains an object of type image.

Введенный в R2019a