Divide Image into Overlapping blocks and save it
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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:
for i=1:1
img=double(imread(strcat(folder,num2str(i),'.jpg')));
aa=blockproc(img, [2084 1042], cropSaveBlock,'BorderSize', [2084 521])
end
function cropSaveBlock()
end
0 comentarios
Respuestas (2)
Ashish Uthama
el 8 de Sept. de 2022
Editada: Ashish Uthama
el 8 de Sept. de 2022
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,...
'BlockSize', blockSize,...
'BlockOffSets', blockOffsets,...
'ExcludeIncompleteBlocks', true);
% Create a datastore from this set of blocks
bimds = blockedImageDatastore(bim, 'BlockLocationSet', bls);
%{
% Visualize the block locations to confirm logic
bigimageshow(bim)
% 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);
end
%}
% You can use this datastore (bimds) directly depending on your workflow.
% Read each block and write it out
while hasdata(bimds)
[data, info] = read(bimds);
imwrite(data{1}, "blockStart_"+num2str(info.Start)+".jpg")
end
It looks like you may have multiple images, you can extend this workflow by making an array of blockedImages (see here)
0 comentarios
Benjamin Thompson
el 13 de Jun. de 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');
0 comentarios
Ver también
Categorías
Más información sobre Image Processing and Computer Vision en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!