Divide Image into Overlapping blocks and save it
14 views (last 30 days)
Hi, I want to divide an image into 3 overlapping block.
input image size=2084 by 2084, output image sizes should be 2084 by 1042 with 50% overlapping. I tried using blockproc but encountering an error, "Too many output arguments.".
How to divide this image into blocks and save each by different name?.
I followed the demo, but these demos are for non-overlapping. I want overlapping blocks. Thank you.
Demo followed: https://www.mathworks.com/matlabcentral/answers/58125-how-to-divide-image-to-overlapping-blocks?s_tid=answers_rc1-3_p3_Topic
This is my code:
aa=blockproc(img, [2084 1042], cropSaveBlock,'BorderSize', [2084 521])
Benjamin Thompson on 13 Jun 2022
An image is just a matrix. If you want to save a part, then
imwrite(img(1:2084,1:1042), 'file1.jpg', 'jpg');
imwrite(img(1042:2084,524:1042), 'file2.jpg', 'jpg');
Ashish Uthama on 8 Sep 2022 at 15:18
Edited: Ashish Uthama on 8 Sep 2022 at 15:20
input image size=2084 by 2084, output image sizes should be 2084 by 1042% with 50% overlapping
Here is some sample code:
im = ones(2084);
% blockedImage can directly load an image too.
bim = blockedImage(im);
% See help selectBlockLocations for more examples.
blockSize = [2084 1042];
overlapPct = 0.5;
blockOffsets = round(blockSize.*overlapPct);
bls = selectBlockLocations(bim,...
% Create a datastore from this set of blocks
bimds = blockedImageDatastore(bim, 'BlockLocationSet', bls);
% Visualize the block locations to confirm logic
% Block size is in row-col (height-width) order
blockWH = fliplr(bls.BlockSize(1,1:2));
colors = prism(size(bls.BlockOrigin,1));
for ind = 1:size(bls.BlockOrigin,1)
blockColor = colors(ind,:);
% BlockOrigin is already in x-y order
drawrectangle('Position', [bls.BlockOrigin(ind,1:2), blockWH],'Color', blockColor);
% You can use this datastore (bimds) directly depending on your workflow.
% Read each block and write it out
[data, info] = read(bimds);
It looks like you may have multiple images, you can extend this workflow by making an array of blockedImages (see here)