question about command 'mat2cell'

조회 수: 2 (최근 30일)
qing li
qing li 2022년 7월 30일
댓글: qing li 2022년 7월 30일
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 !

채택된 답변

Bruno Luong
Bruno Luong 2022년 7월 30일
편집: Bruno Luong 2022년 7월 30일
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
qing li
qing li 2022년 7월 30일
thank you so much sir, that is really helpful !

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Steven Lord
Steven Lord 2022년 7월 30일
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
qing li
qing li 2022년 7월 30일
thank you so much sir, that is really helpful .

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by