easily sub dividing image into blocks

1 view (last 30 days)
this is my programme
[m n]=size(I);_(example image size is 256*256)_ c=mat2cell(I,[4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4],[4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4]); this is difficult and i want to sub divide the any image into (m/4)*(n/4) blocks.how can i do this easily?
  3 Comments
Image Analyst
Image Analyst on 12 Sep 2013
FYI: note the long arrays of 4's can be replaced by the shorter expression: 4*ones(1,m/4)

Sign in to comment.

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 10 Sep 2013
Edited: Azzi Abdelmalek on 10 Sep 2013
im=rand(256);
[n,m]=size(im);
p=4
aa=1:p:n
bb=1:p:m
[ii,jj]=ndgrid(aa,bb)
out=arrayfun(@(x,y) im(x:x+p-1,y:y+p-1),ii,jj,'un',0)
  3 Comments
mahesh chathuranga
mahesh chathuranga on 12 Sep 2013
thank you very much. but sir i want to do this with mat2cellfunction
Jan
Jan on 12 Sep 2013
There is nothing magic in MAT2CELL. You can simply use a loop directly, see [EDITED] in my answer.

Sign in to comment.

More Answers (2)

Jan
Jan on 10 Sep 2013
Edited: Jan on 12 Sep 2013
Img = rand(768, 1024);
[m, n] = size(Img);
Blocks = permute(reshape(Img, [4, m/4, 4, n/4]), [1, 3, 2, 4]);
Now the block [x,y] can be accessed as
Block(:, :, x, y)
[EDITED] And to create a cell:
Img = rand(768, 1024);
[m, n] = size(Img);
m4 = m / 4;
n4 = n / 4;
Blocks = permute(reshape(Img, [4, m4, 4, n4]), [1, 3, 2, 4]);
C = cell(m4, n4)
for in = 1:n4
for im = 1:m4
C{im, in} = Blocks(:, :, im, in);
end
end
  3 Comments
Alessandro Masullo
Alessandro Masullo on 30 May 2018

This is the smartest solution that I've ever seen.

It's just pure beauty. Fantastic, I love it!

Sign in to comment.


Tejashree Ladhake
Tejashree Ladhake on 29 Nov 2013
yes, it works! thank you

Tags

Community Treasure Hunt

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

Start Hunting!