Main Content


Combine data from multiple datastores



dsnew = combine(ds1,ds2,...,dsN) combines multiple datastores to create a CombinedDatastore object using the data returned by the read function on the input datastores.


dsnew = combine(ds1,ds2,...,dsN,ReadOrder=order) combines multiple datastores based on the specified read order. The read order determines the creation of either a CombinedDatastore or SequentialDatastore object.


collapse all

Create a datastore that maintains parity between the pair of images of the underlying datastores. For instance, create two separate image datastores, and then create a combined datastore that reads corresponding images from the two image datastores.

Create a datastore imds1 representing a collection of three images.

imds1 = imageDatastore({'street1.jpg','street2.jpg','peppers.png'}); 

Create a second datastore imds2 by transforming the images of imds1 to grayscale images.

imds2 = transform(imds1,@(x) im2gray(x));

Create a combined datastore from imds1 and imds2.

imdsCombined = combine(imds1,imds2);

Read the first pair of images from the combined datastore. Each read operation on this combined datastore returns a pair of images represented by a 1-by-2 cell array.

dataOut = read(imdsCombined)
dataOut=1×2 cell array
    {480x640x3 uint8}    {480x640 uint8}

Display the output of the first read from the combined datastore.


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

Create a datastore that reads from two image datastores one after the other.

Create an ImageDatastore ds1 representing a collection of two images. Then, create a second ImageDatastore ds2 by transforming the images of ds1 to grayscale images. Combine ds1 and ds2 to create a SequentialDatastore object.

ds1 = imageDatastore(["peppers.png","street2.jpg"]); 
ds2 = transform(ds1,@(x) im2gray(x));
dsseq = combine(ds1,ds2,ReadOrder="sequential");

Read the first three images from the SequentialDatastore object. Each read operation on this SequentialDatastore object returns a single image represented by a 1-by-1 cell array.

img1 = read(dsseq);
img2 = read(dsseq);
img3 = read(dsseq);

Input Arguments

collapse all

Datastores to combine, specified as two or more comma-separated datastore objects. For a complete list of built-in datastores, see Select Datastore for File Format or Application. You also can specify custom datastores.

Order in which data is read, specified as "associated" or "sequential".

  • "associated" creates a CombinedDatastore object that is the horizontally concatenated result of the read operation from each of the underlying datastores.

  • "sequential" creates a SequentialDatastore object that sequentially reads from the underlying datastores without concatenation.

Extended Capabilities

Version History

Introduced in R2019a

expand all