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.
[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
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')
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.
Input Arguments
@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
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 usetransform
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