easily sub dividing image into blocks
Show older comments
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
Jan
on 10 Sep 2013
This does not look like a valid Matlab program. Please format the code properly and post valid Matlab syntax.
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)
mahesh chathuranga
on 13 Sep 2013
Accepted Answer
More Answers (2)
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
Andrei Bobrov
on 12 Sep 2013
Edited: Andrei Bobrov
on 12 Sep 2013
Hi Jan! Or:
C = reshape(num2cell(Blocks,[1 2]),m4,n4);
mahesh chathuranga
on 13 Sep 2013
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!
Tejashree Ladhake
on 29 Nov 2013
0 votes
yes, it works! thank you
Categories
Find more on Data Type Conversion in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!