transform
Transform datastore
Syntax
Description
transforms one or more input datastores using the transformation function
dsnew
= transform(ds1,ds2,...,dsN
,@fcn
)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.
uses an alternative definition of the transform function dsnew
= transform(ds1,ds2,...,dsN
,@fcn
,'IncludeInfo',IncludeInfo
)fcn
. The
alternative definition enables you to use the additional information returned by the
read
function of the datastore.
Examples
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.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')
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.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)
Input Arguments
ds1,ds2,...,dsN
— Input datastores
datastore objects
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.
@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 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
IncludeInfo
— Include information from read
function
true
| false
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
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:
In a thread-based environment, you can use
transform
only with the following datastores:ImageDatastore
objectsCombinedDatastore
,SequentialDatastore
, orTransformedDatastore
objects you create fromImageDatastore
objects by usingcombine
ortransform
You can use
transform
with other datastores if you have Parallel Computing Toolbox™. To do so, run the function using a process-backed parallel pool instead of usingbackgroundPool
orThreadPool
(use eitherProcessPool
orClusterPool
).
For more information, see Run MATLAB Functions in Thread-Based Environment.
Version History
Introduced in R2019a
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)