transform

Преобразуйте datastore

Описание

пример

dsnew = transform(ds1,ds2,...,dsN,@fcn) преобразовывает одно или несколько входных хранилищ данных с помощью функции преобразования fcn и возвращает преобразованный datastore dsnew@fcn может быть помещен прежде или после всех входных хранилищ данных в вызове transform функция.

dsnew = transform(ds1,ds2,...,dsN,@fcn,'IncludeInfo',IncludeInfo) использует альтернативное определение функции преобразования fcn. Альтернативное определение позволяет вам использовать дополнительную информацию, возвращенную read функция datastore.

Примеры

свернуть все

Создайте 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.

Входные параметры

свернуть все

Введите хранилища данных. Для полного списка встроенных хранилищ данных смотрите, Выбирают Datastore for File Format или Application. Также можно задать пользовательский datastore.

Функция, которая преобразовывает данные в виде указателя на функцию. Функция берет данные в качестве входа и возвращает преобразованные данные, на основе преобразований, заданных в 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

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

Когда вы устанавливаете значение IncludeInfo к true, необходимо использовать альтернативную подпись для функции преобразования fcn.

Выходные аргументы

свернуть все

Новый datastore с преобразованными данными, возвращенными как TransformedDatastore объект.

Введенный в R2019a