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 Kommentare

Jan
Jan am 10 Sep. 2013
This does not look like a valid Matlab program. Please format the code properly and post valid Matlab syntax.
Image Analyst
Image Analyst am 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
mahesh chathuranga am 13 Sep. 2013
thank you

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 10 Sep. 2013
Bearbeitet: Azzi Abdelmalek am 10 Sep. 2013

1 Stimme

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 Kommentare

mahesh chathuranga
mahesh chathuranga am 10 Sep. 2013
thank you very much
mahesh chathuranga
mahesh chathuranga am 12 Sep. 2013
thank you very much. but sir i want to do this with mat2cellfunction
Jan
Jan am 12 Sep. 2013
There is nothing magic in MAT2CELL. You can simply use a loop directly, see [EDITED] in my answer.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Jan
Jan am 10 Sep. 2013
Bearbeitet: Jan am 12 Sep. 2013

3 Stimmen

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 Kommentare

Andrei Bobrov
Andrei Bobrov am 12 Sep. 2013
Bearbeitet: Andrei Bobrov am 12 Sep. 2013
Hi Jan! Or:
C = reshape(num2cell(Blocks,[1 2]),m4,n4);
mahesh chathuranga
mahesh chathuranga am 13 Sep. 2013
thanks
Alessandro Masullo
Alessandro Masullo am 30 Mai 2018

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

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

Melden Sie sich an, um zu kommentieren.

Kategorien

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by