transform - Transform datastore - MATLAB (original) (raw)

Syntax

Description

[dsnew](#mw%5F7d5f27d9-0a28-4a45-8448-7e159f05fddf) = transform([ds1,ds2,...,dsN](#mw%5F4d7cc190-0900-45d4-b6e7-eda7c62a8217),[@fcn](#mw%5F299e7ffc-311a-4c9d-ae67-768f942999d0)) transforms one or more input datastores using the transformation functionfcn 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](#mw%5F7d5f27d9-0a28-4a45-8448-7e159f05fddf) = transform([ds1,ds2,...,dsN](#mw%5F4d7cc190-0900-45d4-b6e7-eda7c62a8217),[@fcn](#mw%5F299e7ffc-311a-4c9d-ae67-768f942999d0),'IncludeInfo',[IncludeInfo](#mw%5F3e264259-5589-45c4-98a9-dfb71d747ff1)) uses an alternative definition of the transform function fcn. The alternative definition enables you to use the additional information returned by theread function of the datastore.

Examples

collapse all

Apply Transformation to Collection of Images

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.2855429/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.

Transform Multiple Datastores

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.2855429/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.

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

Input Arguments

collapse all

@fcn — Function that transforms data

function handle

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 andds1_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

IncludeInfo — Include information from read function

true | false

Include information from read function, specified as eithertrue 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 functionfcn.

Output Arguments

collapse all

dsnew — New datastore with transformed data

TransformedDatastore object

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

Extended Capabilities

Thread-Based Environment

Run code in the background using MATLAB® backgroundPool or accelerate code with Parallel Computing Toolbox™ ThreadPool.

Usage notes and limitations:

For more information, see Run MATLAB Functions in Thread-Based Environment.

Version History

Introduced in R2019a