exponenta event banner

преобразовать

Преобразовать хранилище данных

Описание

пример

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

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

Примеры

свернуть все

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

Создание 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

Прочитайте все изображения. Обратите внимание, что хранилище данных содержит изображения различных размеров.

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              

Преобразование всех изображений в хранилище данных в заданный целевой размер.

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.

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

Создание 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'});

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

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.

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

свернуть все

Входные хранилища данных. Полный список встроенных хранилищ данных см. в разделе Выбор хранилища данных для формата файла или приложения. Можно также указать пользовательское хранилище данных.

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

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

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

свернуть все

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

Представлен в R2019a