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

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Conversion of a binary matrix(256*256) into another matrix which is decimal(85*85)?

Asked by Raj Gopal on 6 Dec 2012

We have a 256*256 binary matrix , from this we take 3*3 matrix which keeps on increasing firstly row wise upto the end point and then 3 units column wise and then upto the end point , this process continues upto the last pixel . now in the 3*3 matrix we start from (1,1) and move clockwise untill we reach (2,1) storing all the values in an array and converting this binary string into decimal value and storing it into a different matrix.

3 Comments

Matt J on 6 Dec 2012

This can't end up being 85x85 unless the 3x3 blocks are supposed to be non-overlapping tiles, and in that case, a 256x256 matrix can't be split evenly into tiles of size 3x3. How do you want to resolve the fact that 256 is not an even multiple of 3?

Raj Gopal on 8 Dec 2012

they are non overlapping tiles,and index is from 1 to 256 so there are 255 blocks which is divisible by 3.

Walter Roberson on 8 Dec 2012

1-3, 4-6, 7-9, 10-12, 13-15, 16-18, 19-21, 22-24, 25-27, 28-30, 31-33, 34-36, 37-39, 40-42, 43-45, 46-48, 49-51, 52-54, 55-57, 58-60, 61-63, 64-66, 67-69, 70-72, 73-75, 76-78, 79-81, 82-84, 85-87, 88-90, 91-93, 94-96, 97-99, [....] 238-240, 241-243, 244-246, 247-249, 250-252, 253-255, 256 - ????

Raj Gopal

Tags

No tags are associated with this question.

Products

No products are associated with this question.

1 Answer

Answer by Matt J on 6 Dec 2012
Edited by Matt J on 6 Dec 2012

Assuming the binary matrix is 255x255, you could do it the following way, where I use MAT2TILES from the File Exchange.

    A=rand(255)>.5; %fake binary input image
    C=mat2tiles(char(A+'0'),[3,3]);
    idx=[1 4 7 8 9 6 3 2];
    B=cellfun(@(c)c(idx),C,'uni',0);
    B=bin2dec(vertcat(B{:}));
    result=reshape(B,size(C));

2 Comments

Raj Gopal on 8 Dec 2012

first of all i am using 2 for loops to select the 3*3 matrix and then i'm not getting any idea how to save the converted decimal value into another matrix.

Matt J on 8 Dec 2012

I'm not sure how that's relevant to the solution I gave you, or why it's even an issue. The solution I gave you performs all steps, including saving the result to another matrix.

Also, since you know how to create matrices, (e.g. the 256x256 matrix you have now) and to pull data out of them (e.g. 3x3 blocks), it's not clear what difficulty you're having putting data back into one.

Matt J

Contact us