is there a way so that we extract a particular block from an 8x8 image?

i've an image of size 8x8 blocks i.e total of 64 blocks.
i want to extract or show only few blocks...
how can i do so?
for row = 1 : blockSizeR : rows
for col = 1 : blockSizeC : columns
row1 = row;
row2 = row1 + blockSizeR - 1;
row2 = min(rows, row2);
% Determine starting and ending columns.
col1 = col;
col2 = col1 + blockSizeC - 1;
col2 = min(columns, col2);
% Extract out the block into a single subimage.
oneBlock = grayImage(row1:row2, col1:col2);
% Specify the location for display of the image.
subplot(6,8, blockNumber);
imshow(oneBlock);
end
end
the above code shows all the 64 blocks..
what should i do, so that only block 10 and block 34 is show rather than all the blocks..
if there is a way tell me how to do it..

5 Comments

Do you want the blocks numbered going down the rows or across the columns? e.g., is block 34 the 2nd one across on the 5th row, or the 2nd one down in the 5th column ?
Ambiguous. Down the rows first (in a single column), before advancing to the next column? Or across the columns first (in a single row) before advancing to the next row. Why can't you just do a little math to figure out row1, row2, col1, and col2? Alternatively put in a counter and don't extract the block until the counter is what you want.
how can can i do so? can u help me sir by writing few lines of code plz..
reply plz

Sign in to comment.

 Accepted Answer

blockrows =8; blockcols = 8;
[blockcol, blockcol] = ind2sub( [blockcols, blockrows], BlockNumber]
colstart = (blockcol-1) * blockSizeC + 1;
rowstart = (blockrow - 1) * blockSizeR + 1;
oneBlock = grayImage(rowstart : rowstart + blockSizeR - 1, colstart : colstart + blockSizeC - 1);

3 Comments

for row = 1 : blockSizeR : rows
for col = 1 : blockSizeC : columns
blockrows =8; blockcols = 8;
[blockrow, blockcol] = idx2subs( [blockcols, blockrows], BlockNumber]
colstart = (blockcol-1) * blockSizeC + 1;
rowstart = (blockrow - 1) * blockSizeR + 1;
oneBlock = grayImage(rowstart : rowstart + blockSizeR - 1, colstart : colstart + blockSizeC - 1);
subplot(6,8, blockNumber);
imshow(Block);
end
end
Undefined function 'idx2subs' for input arguments of type 'double'.
i got this as error when i modified the above code sir.
is the code that i modified is correct or having mistakes?
Sorry, should have been ind2sub() rather than idx2subs()
Do not enclose this in a "for" loop. The above is the complete code to extract by block number. For example to extract block #34, use those lines of code with BlockNumber = 34
thank you so much it works....
:)

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!