Datastore for image data
Use an ImageDatastore
object to manage a collection of
image files, where each individual image fits in memory, but the entire collection of
images does not necessarily fit. You can create an ImageDatastore
object using the imageDatastore
function, specify its properties, and
then import and process the data using object functions.
creates a datastore imds
= imageDatastore(location
)imds
from the collection of image data
specified by location
.
specifies additional parameters and properties for imds
= imageDatastore(location
,Name,Value
)imds
using one or more name-value
pair arguments.
location
— Files or folders to include in datastoreDsFileSet
objectFiles or folders included in the datastore, specified as a path
or a DsFileSet
object.
path — Specify the path as a character vector, cell array of character vectors, string scalar, or a string array, containing the location of files or folders that are local or remote.
Local files or folders — Specify location
as a
local path to files or folders. If the files are not in the current
folder, then local path must specify full or relative paths. Files
within subfolders of the specified folder are not automatically included
in the datastore. You can use the wildcard character (*) when specifying
the local path. This character specifies that the datastore include all
matching files or all files in the matching folders.
Remote files or folders — Specify location
to be
the full paths of the files or folders as a uniform resource locator
(URL) of the form hdfs:///path_to_file
. For more
information, see Work with Remote Data.
DsFileSet
object — You also can specify
location
as a DsFileSet
object. For more
information, see matlab.io.datastore.DsFileSet
.
When location
represents a folder, the datastore includes only
supported file formats and ignores any other format. To specify a custom list of file extensions
to include in your datastore, see the FileExtensions
property.
The imageDatastore
function supports files that
have an imformats
format.
Example: 'file1.jpg'
Example: '../dir/data/file1.png'
Example: {'C:\dir\data\file1.tif','C:\dir\data\file2.tif'}
Example: 'C:\dir\data\*.jpg'
Specify optional
comma-separated pairs of Name,Value
arguments. Name
is
the argument name and Value
is the corresponding value.
Name
must appear inside quotes. You can specify several name and value
pair arguments in any order as
Name1,Value1,...,NameN,ValueN
.
imds =
imageDatastore('C:\dir\imagedata','FileExtensions',{'.jpg','.tif'})
'IncludeSubfolders'
— Subfolder inclusion flagfalse
(default) | true
Subfolder inclusion flag, specified as the comma-separated pair consisting of 'IncludeSubfolders'
and true
or false
. Specify true
to include all files and subfolders within each folder or false
to include only the files within each folder.
If you do not specify 'IncludeSubfolders'
, then the default value is false
.
Example: 'IncludeSubfolders',true
Data Types: logical
| double
'FileExtensions'
— Image file extensionsImage file extensions, specified as the comma-separated pair
consisting of 'FileExtensions'
and a character
vector, cell array of character vectors, string scalar, or string
array. The specified extensions do not require an
imformats
format, and you can use the empty
quotes ''
to represent files without extensions.
If you do not specify 'FileExtensions'
, then
imageDatastore
automatically includes all
images with imformats
extensions in the specified
path. If you want to include extensions that
imformats
does not recognize, then specify
all extensions.
Example: 'FileExtensions','.jpg'
Example: 'FileExtensions',{'.jpg','.png'}
Data Types: char
| cell
| string
'AlternateFileSystemRoots'
— Alternate file system root pathsAlternate file system root paths, specified as the comma-separated pair consisting of
'AlternateFileSystemRoots'
and a string vector or a cell array. Use
'AlternateFileSystemRoots'
when you create a datastore on a local
machine, but need to access and process the data on another machine (possibly of a different
operating system). Also, when processing data using the Parallel Computing Toolbox™ and the MATLAB®
Parallel Server™, and the data is stored on your local machines with a copy of the data available
on different platform cloud or cluster machines, you must use
'AlternateFileSystemRoots'
to associate the root paths.
To associate a set of root paths that are equivalent to one another, specify
'AlternateFileSystemRoots'
as a string vector. For
example,
["Z:\datasets","/mynetwork/datasets"]
To associate multiple sets of root paths that are equivalent for the datastore,
specify 'AlternateFileSystemRoots'
as a cell array containing
multiple rows where each row represents a set of equivalent root paths. Specify each row
in the cell array as either a string vector or a cell array of character vectors. For example:
Specify 'AlternateFileSystemRoots'
as a cell array of
string
vectors.
{["Z:\datasets", "/mynetwork/datasets"];... ["Y:\datasets", "/mynetwork2/datasets","S:\datasets"]}
Alternatively, specify 'AlternateFileSystemRoots'
as a cell
array of cell array of character
vectors.
{{'Z:\datasets','/mynetwork/datasets'};... {'Y:\datasets', '/mynetwork2/datasets','S:\datasets'}}
The value of 'AlternateFileSystemRoots'
must satisfy these conditions:
Contains one or more rows, where each row specifies a set of equivalent root paths.
Each row specifies multiple root paths and each root path must contain at least two characters.
Root paths are unique and are not subfolders of one another.
Contains at least one root path entry that points to the location of the files.
For more information, see Set Up Datastore for Processing on Different Machines or Clusters.
Example: ["Z:\datasets","/mynetwork/datasets"]
Data Types: string
| cell
'LabelSource'
— Source providing label data'none'
(default) | 'foldernames'
Source providing label data, specified as the comma-separated pair
consisting of 'LabelSource'
and
'none'
or 'foldernames'
.
If 'none'
is specified, then the
Labels
property is empty. If
'foldernames'
is specified, then labels are
assigned according to the folder names and stored in the
Labels
property. You can later modify the
labels by accessing the Labels
property
directly.
Data Types: char
| string
In addition to these name-value pairs, you also can specify any of the
properties on this page as name-value pairs, except for the
Files
property.
ImageDatastore
properties describe the data
and specify how to read the data from the datastore. You can specify the value of
ImageDatastore
properties using name-value pair arguments
when you create the datastore object. To view or modify a property after creating
the object, use the dot notation.
For example, you can create an ImageDatastore
object and
specify the 'ReadFcn'
parameter:
imds = imageDatastore('peppers.png','ReadFcn',@customreader);
'ReadFcn'
to @customreader
after you create the ImageDatastore
:
imds = imageDatastore('peppers.png');
imds.ReadFcn = @customreader;
Files
— Files included in datastoreFiles included in the datastore, resolved as a character vector, cell
array of character vectors, string scalar, or string array. Each character
vector or string is a full path to a file. The location
argument in the imageDatastore
and
datastore
functions defines Files
when the datastore is created.
Example: {'C:\dir\data\file1.jpg';'C:\dir\data\file2.jpg'}
Data Types: char
| cell
| string
Folders
— Folders used to construct datastoreThis property is read-only.
Folders used to construct datastore, returned as a cell array of character
vectors. The cell array is oriented as a column vector. Each character
vector is a path to a folder that contains data files. The
location
argument in the
imageDatastore
and datastore
functions defines Folders
when the datastore is
created.
Data Types: cell
ReadSize
— Number of image files to readNumber of image files to read in a call to the read
function, specified as a positive integer scalar. Each call to the
read
function reads at most
ReadSize
images.
Labels
— File labelsFile labels for the files in the datastore, specified as a vector, a cell
array, or a string array. The order of the labels in the array corresponds
to the order of the associated files in the datastore. If you specify
'LabelSource','foldernames'
when creating the
ImageDatastore
object, then the label name for a file
is the name of the folder containing it. If you do not specify
'LabelSource','foldernames'
, then
Labels
is an empty cell array or string array. If you
change the Files
property after the datastore is created,
then the Labels
property is not automatically updated to
incorporate the added files.
Data Types: categorical
| cell
| logical
| double
| single
| string
ReadFcn
— Function that reads image data@readDatastoreImage
(default) | function handleFunction that reads image data, specified as a function handle. The
function must take an image file name as input, and then it outputs the
corresponding image data. For example, if customreader
is
the specified function to read the image data, then it must have a signature
similar to
this:
function data = customreader(filename) ... end
imageDatastore
uses only the first argument and
ignores the rest.
Note
Using ReadFcn
to transform or pre-process 2-D
images is not recommended. For file formats recognized by imformats
, specifying
ReadFcn
slows down the performance of
imageDatastore
. For more efficient ways to
transform and pre-process images, see Preprocess Images for Deep Learning (Deep Learning Toolbox).
Example: @customreader
Data Types: function_handle
SupportedOutputFormats
— List of formats supported for writingThis property is read-only.
List of formats supported for writing, returned as a row vector of strings. This property
specifies the possible output formats when using writeall
to write output files from the datastore.
Data Types: string
DefaultOutputFormat
— Default output formatThis property is read-only.
Default output format, returned as a string scalar. This property specifies the default format
when using writeall
to write output files from the datastore.
Data Types: string
countEachLabel | Count files in ImageDatastore labels |
hasdata | Determine if data is available to read |
numpartitions | Number of datastore partitions |
partition | Partition a datastore |
preview | Preview subset of data in datastore |
read | Read data in datastore |
readall | Read all data in datastore |
readimage | Read specified image from datastore |
writeall | Write datastore to files |
reset | Reset datastore to initial state |
shuffle | Shuffle all data in datastore |
splitEachLabel | Split ImageDatastore labels by proportions |
subset | Create subset of datastore or file-set |
transform | Transform datastore |
combine | Combine data from multiple datastores |
isPartitionable | Determine whether datastore is partitionable |
isShuffleable | Determine whether datastore is shuffleable |
Create an ImageDatastore
object associated with all .tif
files in the MATLAB® path and its subfolders. Use the folder names as label names.
imds = imageDatastore(fullfile(matlabroot,'toolbox','matlab'),... 'IncludeSubfolders',true,'FileExtensions','.tif','LabelSource','foldernames')
imds = ImageDatastore with properties: Files: { ' ...\matlab\toolbox\matlab\demos\example.tif'; ' ...\matlab\toolbox\matlab\imagesci\corn.tif' } Labels: [demos; imagesci] ReadSize: 1 ReadFcn: @readDatastoreImage
Create an ImageDatastore
object containing four images, and preview the first image.
imds = imageDatastore({'street1.jpg','street2.jpg','peppers.png','corn.tif'})
imds = ImageDatastore with properties: Files: { ' ...\matlab\toolbox\matlab\demos\street1.jpg'; ' ...\matlab\toolbox\matlab\demos\street2.jpg'; ' ...\matlab\toolbox\matlab\imagesci\peppers.png' ... and 1 more } ReadSize: 1 Labels: {} ReadFcn: @readDatastoreImage
imshow(preview(imds));
Read only the second and third images, one at a time.
for i = 2:3 img = readimage(imds,i); end
Read all four images and view the third image.
imgs = readall(imds); imshow(imgs{3})
Using ReadFcn to transform or
pre-process 2-D images is not recommended. For file formats recognized by
imformats
, specifying
ReadFcn
slows down the performance of
imageDatastore
. For more efficient ways to transform and
pre-process images, see Preprocess Images for Deep Learning (Deep Learning Toolbox).
You have a modified version of this example. Do you want to open this example with your edits?