MATLAB Answers

How to divide 256X256 matrix into sixteen 16X16 blocks?

492 views (last 30 days)
Malarvizhi
Malarvizhi on 10 Oct 2013
Answered: Namwon Kim on 26 Aug 2019
I am having pixel value of an image as 256X256 matrix. I want to divide it into sixteen 16X16 matrix (ie)an image into sub blocks. It is needed to compare each 16X16 with other. Can anyone help?

  1 Comment

Roger Stafford
Roger Stafford on 10 Oct 2013
By my arithmetic, if you divide a 256x256 matrix into separate 16x16 blocks, there should be 256 of these blocks, not 16.

Sign in to comment.

Accepted Answer

David Sanchez
David Sanchez on 10 Oct 2013
You need to use mat2cell:
X = reshape(1:20,5,4)'
C = mat2cell(X, [2 2], [3 2])
celldisp(C)
This code returns
X =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
C =
[2x3 double] [2x2 double]
[2x3 double] [2x2 double]
C{1,1} =
1 2 3
6 7 8
C{2,1} =
11 12 13
16 17 18
C{1,2} =
4 5
9 10
C{2,2} =
14 15
19 2
In your case:
A = rand(256); % your matrix here
N = 16*ones(1,16);
B = mat2cell(A,N,N);

  0 Comments

Sign in to comment.

More Answers (2)

Malarvizhi
Malarvizhi on 13 Feb 2014
Can you help me to find the Sum of absolute difference for two matrices?

  1 Comment

MAMATHA YADAVALLI
MAMATHA YADAVALLI on 7 Dec 2017
can anyone tell me how to divide 90*90 matrix into 729 3*3 sub matrices?

Sign in to comment.


Namwon Kim
Namwon Kim on 26 Aug 2019
x = zeros(256,256) % Input is (256,256).
a = size(x, 1);
b = size(x, 2);
numParts = 16
c = floor(a/numParts);
d = rem(a, numParts);
partition_a = ones(1, numParts)*c;
partition_a(1:d) = partition_a(1:d)+1;
e = floor(b/numParts);
f = rem(b, numParts);
partition_b = ones(1, numParts)*e;
partition_b(1:f) = partition_b(1:f)+1;
% Split matrix rows into partition, storing result in a cell array
% 256X256 matrix into sixteen 16X16 blocks
output = mat2cell(x, partition_a, partition_b);

  0 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!