# how can i split a 400*400 matrix into smaller one

2 views (last 30 days)
alexandra khabbaz on 20 Feb 2020
i have a 400*400 matrix that i want to divid into smaller matrix 40*40.
In fact i have 1000 images that i want to do the same for all then find the corr2 between each sub matrix that is in the exact same position in each image.
any idea?

darova on 20 Feb 2020
try mat2cell
alexandra khabbaz on 3 Mar 2020
yes thats what i did, thank you!

Stijn Haenen on 20 Feb 2020
num_list=0:40:400;
data=[];
Image=zeros(400);
for a=1:numel(num_list)-1
for b=1:numel(num_list)-1
data(end+1).subimage=Image(num_list(a)+1:num_list(a+1),num_list(b)+1:num_list(b+1));
end
end
All the subimages are stored in a structure

Matt J on 20 Feb 2020
Edited: Matt J on 20 Feb 2020
You could do it as below, with the help of mat2tiles,
I assume you have your images stacked in the form of a 400x400x1000 array (single floats).
stack=rand(400,400,1000,'single'); %example data
substacks=mat2tiles(stack,[40,40,1000]) ; %divide the data into 40x40x1000 sub-stacks
correlationResults=cell(size(substacks)); %pre-allocate the result
for i=1:10
for j=1:10
columns=reshape(substacks{i,j},40^2,[]);
correlationResults{i,j}=corr(columns);
end
end
Note that I use corr instead of corr2. It makes things easier to vectorize.

alexandra khabbaz on 21 Feb 2020
i have a folder with 1000 images, i need to call tham out, resise them from 452*400 to 400*400 all of them;
then i shoud devide each one into 100, 40*40 matrix and correlate each submatrix with it's exat same in all the other images, so ishoud get 100 correlation plots. it's really difficult for me to do so since i'm so new to matlab
alexandra khabbaz on 21 Feb 2020
i started with this:
it worked for th first image but i dont know how to call all the other ones
nb=1000;
d4=zeros(1,nb);
a=size(image);
b=401;
im=image(2:b,:);
[m,n]=size(im);
C = mat2cell(im,[40 40 40 40 40 40 40 40 40 40],[40 40 40 40 40 40 40 40 40 40])