Main Content

transform

Transform datastore

Description

dsnew = transform(ds1,ds2,...,dsN,@fcn) transforms one or more input datastores using the transformation function fcn and returns the transformed datastore dsnew. fcn can be placed before or after all of the input datastores in the call to the transform function.

example

dsnew = transform(ds1,ds2,...,dsN,@fcn,'IncludeInfo',IncludeInfo) uses an alternative definition of the transform function fcn. The alternative definition enables you to use the additional information returned by the read function of the datastore.

Examples

collapse all

Create a datastore for a collection of images and apply the same transformation to all the images in the datastore. For instance, resize all the images in a collection to a specified target size.

Create an ImageDatastore with two images.

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

                       Files: {
                              ' .../build/runnable/matlab/toolbox/matlab/demos/street1.jpg';
                              ' .../build/runnable/matlab/toolbox/matlab/matlab_images/png/peppers.png'
                              }
                     Folders: {
                              ' .../Bdoc24b.2679053/build/runnable/matlab/toolbox/matlab/demos';
                              ' .../build/runnable/matlab/toolbox/matlab/matlab_images/png'
                              }
    AlternateFileSystemRoots: {}
                    ReadSize: 1
                      Labels: {}
      SupportedOutputFormats: ["png"    "jpg"    "jpeg"    "tif"    "tiff"]
         DefaultOutputFormat: "png"
                     ReadFcn: @readDatastoreImage

Read all the images. Notice that the datastore contains images of different sizes.

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              

Transform all the images in the datastore to a specified target size.

targetSize = [224,224];
imdsReSz = transform(imds,@(x) imresize(x,targetSize));

Read the images and display their sizes.

imgReSz1 = read(imdsReSz);
imgReSz2 = read(imdsReSz);
whos imgReSz1 imgReSz2
  Name            Size                Bytes  Class    Attributes

  imgReSz1      224x224x3            150528  uint8              
  imgReSz2      224x224x3            150528  uint8              

Display the resized images.

tiledlayout(1,2);
nexttile
imshow(imgReSz1); axis on; title('Resized Street1.jpg')
nexttile
imshow(imgReSz2); axis on; title('Resized peppers.png')

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

Create multiple datastore objects and apply the same transformation to all the datastores. For instance, combine multiple images into one rectangular tiled image.

Create an ImageDatastore with one image.

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

                       Files: {
                              ' .../build/runnable/matlab/toolbox/matlab/demos/ngc6543a.jpg'
                              }
                     Folders: {
                              ' .../Bdoc24b.2679053/build/runnable/matlab/toolbox/matlab/demos'
                              }
    AlternateFileSystemRoots: {}
                    ReadSize: 1
                      Labels: {}
      SupportedOutputFormats: ["png"    "jpg"    "jpeg"    "tif"    "tiff"]
         DefaultOutputFormat: "png"
                     ReadFcn: @readDatastoreImage

Read the image into the workspace to create an image file from each color channel in the original image.

rgbImage = imread('ngc6543a.jpg');
imwrite(rgbImage(:,:,1),'nebula_red.jpg');
imwrite(rgbImage(:,:,2),'nebula_green.jpg'); 
imwrite(rgbImage(:,:,3),'nebula_blue.jpg');

Create an ImageDatastore object for each single-channel image.

imdsR = imageDatastore({'nebula_red.jpg'});
imdsG = imageDatastore({'nebula_green.jpg'});
imdsB = imageDatastore({'nebula_blue.jpg'});

Read the image stored in each datastore and display their sizes.

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              

Transform all of the datastores by combining all the images into one rectangular tiled image. Convert the color image in imds1 to grayscale so that its dimensions match those of the other images.

tds1 = transform(imds1,imdsR,imdsG,imdsB, @(x1,x2,x3,x4) [rgb2gray(x1),x2;x3,x4]);
tile = read(tds1);

Display the tiled image.

imshow(tile)

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

Input Arguments

collapse all

Input datastores. For a complete list of built-in datastores, see Select Datastore for File Format or Application. You also can specify a custom datastore.

Function that transforms the data, specified as a function handle. The function takes data as an input and returns the transformed data, based on the transformations defined in fcn.

The transform function must have this signature and ds1_data,ds2_data,...dsN_data must be of the same form as the data that is returned by using the read function.

function dataOut = transformFcn(ds1_data,ds2_data,...dsN_data)
..
end

Alternatively, you can define your transform function fcn to use additional information about the data returned by the read function. To use this alternative definition, you must specify the value of IncludeInfo to be true. In this case, the transformation function must have this signature.

function [dataOut,infoOut] = transformFcn(ds1_data,ds2_data,...dsN_data,ds1_info,ds2_info...dsN_info)
..
end

Example: @transformFcn

Data Types: function_handle

Include information from read function, specified as either true or false. The read function returns information about the extracted data in an info struct. For more information, see the read function page.

When you set the value of IncludeInfo to true, you must use the alternative signature for your transform function fcn.

Output Arguments

collapse all

New datastore with transformed data, returned as a TransformedDatastore object.

Extended Capabilities

Version History

Introduced in R2019a