question about command 'mat2cell'

2 次查看(过去 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 个)

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}

Community Treasure Hunt

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

Start Hunting!

Translated by