# could you fix these codes?

4 views (last 30 days)
Tia on 14 May 2013
a1=I(1:8,1:8);
a2=I(1:8,9:16);
a3=I(1:8,17:24);
a4=I(1:8,25:32);
b1=I(9:16,1:8);
b2=I(9:16,9:16);
b3=I(9:16,17:24);
b4=I(9:16,25:32);
c1=I(17:24,1:8);
c2=I(17:24,9:16);
c3=I(17:24,17:24);
c4=I(17:24,25:32);
d1=I(25:32,1:8);
d2=I(25:32,9:16);
d3=I(25:32,17:24);
d4=I(25:32,25:32);
could you tell me how to make it short? Thank you

Jan on 14 May 2013
Edited: Jan on 14 May 2013
Don't do this.
Hiding the index in the name of a variable is a bad programming pattern. It is much more efficient to use indices as indices:
img = reshape(a(1:32, 1:32), 8, 4, 8, 4);
img = permute(img, [1,3,2,4]);
Now you have img(:, :, 1, 1) instead of a1.
This is much faster, needs less memory, and allows to expand the method for millions of tiles easily.
Tia on 15 Jul 2013
i try it. but it can't be back at 1D.. how do i get it? is it possible? or any ideas how to spilt it into 8x8pixels,but i want to manipulate each 8x8pixels,then store the tiles at all? thank you for your time

Iman Ansari on 14 May 2013
Edited: Iman Ansari on 14 May 2013
Hi. Use cell array:
C=mat2cell(I(1:32,1:32),8*ones(1,4),8*ones(1,4));
imshow(C{5},'InitialMagnification','fit')
C{5} or C{1,2} is a2 in your code.
Tia on 16 May 2013
thank you

David Sanchez on 14 May 2013
You can try as well something like this
division = 8; % set according to yuor needs
L = size(I,1)/division;
subI = cell( L,L );
for row=1:L
for col=1:L
subI{row,col} = I( (row:row*division),(col:(col*division)) );
end
end
Tia on 16 May 2013
thank you