split 3 dimesnsional array into equal blocks along the first 2 dimensions

1 Ansicht (letzte 30 Tage)
images is a cell array of 12 images. I want to split images into many rectangular blocks, with each of the 12 images stacked together. The following code achieves what I intend, but I hoping if someone could verify that this is the most efficient code that can be written. I am new to matlab and hence not ver confident.
xParts = 5; %divide rows into 5 parts.
yParts = 5; %divide columns into 5 parts.
mdImages = cat(3, images{:}); %convert cell array to 3 dimensional matrix
%get vector for: how to split the rows.
xSplit = repmat(floor(size(mdImages,1)/xParts), [1 xParts]);
xSplit(end) = xSplit(end) + mod(size(mdImages,1), xParts);
%get vector for: how to split the columns.
ySplit = repmat(floor(size(mdImages,2)/yParts), [1 yParts]);
ySplit(end) = ySplit(end) + mod(size(mdImages,2), yParts);
imgCells = mat2cell(mdImages, xSplit, ySplit, [size(mdImages, 3)]);
%convert each cell from 3 dimensional matrix to 2 dimensional.
sequences = cellfun(@(x) reshape(x, [], size(x, 3)), imgCells, 'UniformOutput', false);

Antworten (0)

Kategorien

Mehr zu Images finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by