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 commentaires

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 ?
across the rows....
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.
Raman
Raman le 11 Mar 2013
Modifié(e) : Raman le 11 Mar 2013
how can can i do so? can u help me sir by writing few lines of code plz..
reply plz
can anyone help me plz....

Connectez-vous pour commenter.

 Réponse acceptée

Walter Roberson
Walter Roberson le 12 Mar 2013
Modifié(e) : Walter Roberson le 12 Mar 2013
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 commentaires

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....
:)

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by