Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

IMAGE SEPARATION INTO BLOCKS

Asked by krithika P on 16 Dec 2011

HI , i have an 256*256 image .. i want to separate it into blocks of 4*4 of that original image .. for that i tried with this code .

[img_x,img_y]=size(img); block_size=4; slide_len=1; n=1; for ix=block_size/2:slide_len:img_x-block_size/2 for jy=block_size/2:slide_len:img_y-block_size/2 current_block=img((ix-block_size/2+1):(ix+block_size/2),(jy-block_size/2+1):(jy+block_size/2));

        end
  end
but i could not get the full blocks also when i cheked with original image pixel values differs .. can i use this codes or any in built command can be used .. thanks to all in advance for reading this patiently

2 Comments

Muthuraj V on 16 Dec 2011

Hi you can use this command

c=mat2cell(a,[x y...],[x y...])

where in that x y .. should match with the no. of rows and columns,,,

chek for help in matlab, u wil get more detail

Regards,
Muthu.

krithika P on 16 Dec 2011

i get like this when i use this command

Columns 1 through 9

[4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8]
[4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8]
[4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8]
[4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8]
[4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8]
[4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8]
[4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8]
[4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8] [4x4 uint8]

krithika P

Products

No products are associated with this question.

1 Answer

Answer by Junaid on 16 Dec 2011
Accepted answer

Dear as in obove code division is n't correct .. follow this code

let say your image is I of 256 x 256. Make your your grid which is 4 x 4 this time should divide image dimensions.

if size(I,3)>1, I = rgb2gray(I); end % to make sure image is grayscale
I = imresize(I, [256 256]); % you can keep it the size you want but should be divisible by 4 x 4.
img_blocks = mat2cell(I,size(I,1)/4*ones(1,4), size(I,2)/4*ones(1,4));

Then you get img_blocks of size 4x4. For first block you can get

part1 = img_blocks{1,1};

6 Comments

Junaid on 16 Dec 2011

:- ) yes dear you got 4x 4 blocks in img_blocks. Let say you want to excess first block then

img_blocks{1, 1} and if you want to get the last one it should be img_blocks{4,4}.

Take your time to understand the output. This is exactly what you are required :-)

krithika P on 16 Dec 2011

thank you ..

Andrei Bobrov on 16 Dec 2011

s = [64 64];
S = size(I);
out = permute(reshape(I,s(1),S(1)/s(1),s(2),[]),[1 3 2 4]);

Junaid

Contact us