MATLAB Answers

How to Split Large Images in to parts Using MATLAB..? ? ?

310 views (last 30 days)
raviraja
raviraja on 11 Dec 2013
Commented: juveria fatima on 12 Mar 2018
I got a satellite image of size [17935 10968] pixels,I want to cut image equally and process my required algorithm on individual parts (eg: I need to cut above pixel range into 4 equal parts).. How can I split image without loosing intermediate pixels.. My requirement is like (1 to 5600 and 5601 to the end pixel)
And anybody got any idea of handling such a huge data in Matlab..!!! (Image Size is around 600 Mb)

  1 Comment

manideep vemula
manideep vemula on 25 Apr 2016
after implementing the algorithm, i want to know how to recombine all those to a original image of actual size.. please answer this.. i need it.? thank you.

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 11 Dec 2013
upperLeft = theImage(1:5600, 1:5600);
upperRight = theImage(1:5600, 5601:end);
lowerLeft = theImage(5601:end, 1:5600);
lowerLeft = theImage(5601:end, 1:5601:end);

  10 Comments

Show 7 older comments
juveria fatima
juveria fatima on 9 Mar 2018
it works great thank you
can you please tell how to save that blocks individually
% clc; % Clear the command window.
% close all; % Close all figures (except those of imtool.)
% Read the image from disk.
rgbImage = imread('lena1.jpg');
% Test code if you want to try it with a gray scale image.
% Uncomment line below if you want to see how it works with a gray scale image.
% rgbImage = rgb2gray(rgbImage);
% Display image full screen.
imshow(rgbImage);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
drawnow;
% Get the dimensions of the image. numberOfColorBands should be = 3.
[rows columns numberOfColorBands] = size(rgbImage)
%==========================================================================
% The first way to divide an image up into blocks is by using mat2cell().
blockSizeR = 128; % Rows in block.
blockSizeC = 128; % Columns in block.
% Figure out the size of each block in rows.
% Most will be blockSizeR but there may be a remainder amount of less than that.
wholeBlockRows = floor(rows / blockSizeR);
blockVectorR = [blockSizeR * ones(1, wholeBlockRows), rem(rows, blockSizeR)];
% Figure out the size of each block in columns.
wholeBlockCols = floor(columns / blockSizeC);
blockVectorC = [blockSizeC * ones(1, wholeBlockCols), rem(columns, blockSizeC)];
% Create the cell array, ca.
% Each cell (except for the remainder cells at the end of the image)
% in the array contains a blockSizeR by blockSizeC by 3 color array.
% This line is where the image is actually divided up into blocks.
if numberOfColorBands > 1
% It's a color image.
ca = mat2cell(rgbImage, blockVectorR, blockVectorC, numberOfColorBands);
else
ca = mat2cell(rgbImage, blockVectorR, blockVectorC);
end
% Now display all the blocks.
plotIndex = 1;
numPlotsR = size(ca, 1);
numPlotsC = size(ca, 2);
for r = 1 : numPlotsR
for c = 1 : numPlotsC
fprintf('plotindex = %d, c=%d, r=%d\n', plotIndex, c, r);
% Specify the location for display of the image.
subplot(numPlotsR, numPlotsC, plotIndex);
% Extract the numerical array out of the cell
% just for tutorial purposes.
rgbBlock = ca{r,c};
imshow(rgbBlock); % Could call imshow(ca{r,c}) if you wanted to.
[rowsB columnsB numberOfColorBandsB] = size(rgbBlock);
% Make the caption the block number.
caption = sprintf('Block #%d of %d\n%d rows by %d columns', ...
plotIndex, numPlotsR*numPlotsC, rowsB, columnsB);
title(caption);
drawnow;
% Increment the subplot to the next location.
plotIndex = plotIndex + 1;
end
end
% Display the original image in the upper left.
subplot(4, 6, 1);
imshow(rgbImage);
title('Original Image');
% Inform user of next stage where we process a gray scale image.
promptMessage = sprintf('Now I will do the same for a gray scale image.');
titleBarCaption = 'Continue?';
button = questdlg(promptMessage, titleBarCaption, 'OK', 'Cancel', 'OK');
if strcmpi(button, 'Cancel')
return;
end
Walter Roberson
Walter Roberson on 9 Mar 2018
"can you please tell how to save that blocks individually"
The variable ca is the cell array that holds all of the blocks. You can extract any one block from it using {} indexing, such as
ca{3,11}
for the third block down and 11th to the right.
You can save those in whatever way is convenient.
juveria fatima
juveria fatima on 12 Mar 2018
it's working thank you very much
ca{1,1} am storing in c11 as c11=ca{1,1}
and if am trying to use imshow(c11) am getting the result that is .m file
instead i want to take that as jpg file which is input for my other code
can any one help how to get in .jpg fomat

Sign in to comment.

More Answers (1)

JEBA CHRISTILDA
JEBA CHRISTILDA on 9 Aug 2016
I got an mammogram image with large size of 1025*750 how can i divide this into 100*100 can anybody has an idea.

  1 Comment

Image Analyst
Image Analyst on 9 Aug 2016
Depends on what you want to do once you have the 10,000 sub-images. Use either blockproc() or mat2cell().

Sign in to comment.

Sign in to answer this question.