question about command 'mat2cell'

1 view (last 30 days)
qing li
qing li on 30 Jul 2022
Commented: qing li on 30 Jul 2022
dear all, I have an problem in terms of mat2cell command...
What i already know is how to deal with specific numbers, say for instance, the code for dividing image I (size 128*128 ) into non-overlapping blocks (size 8*8) is as the following:
c = mat2cell( I, [8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8], ...
[8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8]);
But I really struggled with how to write the code when there is no specific numbers, for example, divide an image I (size 128*128) into non-overlapping blocks (size n*n) , and the total amount of blocks is 128*128/n*n...
Could anyone help..? thx a lot !

Accepted Answer

Bruno Luong
Bruno Luong on 30 Jul 2022
Edited: Bruno Luong on 30 Jul 2022
I = rand(128,256);
n = 16;
mat2cell(I, n*ones(1,size(I,1)/n), n*ones(1,size(I,2)/n))
ans = 8×16 cell array
{16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double}
  1 Comment
qing li
qing li on 30 Jul 2022
thank you so much sir, that is really helpful !

Sign in to comment.

More Answers (1)

Steven Lord
Steven Lord on 30 Jul 2022
Use repmat to build your vector of tile heights or widths.
A = ones(8);
n = 2;
v = repmat(n, 1, 4) % You could compute the 4 for this line
v = 1×4
2 2 2 2
C = mat2cell(A, v, v)
C = 4×4 cell array
{2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double} {2×2 double}
  1 Comment
qing li
qing li on 30 Jul 2022
thank you so much sir, that is really helpful .

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!