# Cut around the center of a matrix

16 views (last 30 days)
I.G on 29 Apr 2015
Commented: Image Analyst on 1 Apr 2021
Hi everyone,
I have a quick question which may be simple to answer. I have a matrix,
A = [ 5 5 5 5 5 ; 5 4 4 4 5 ; 5 4 4 4 5 ; 5 4 4 4 5 ; 5 5 5 5 5 ]
'A' is always an odd number of lines and columns, and may be 100s of them. I want to cut at my own convenience a portion around the center, like
B = [ 4 4 4 ; 4 4 4 ; 4 4 4 ]
How can I do it?
Thanks

Image Analyst on 29 Apr 2015
Try this:
margin = 1; % Whatever you want.
B = A(margin+1:margin+1, end-margin:end-margin);
maubars on 1 Apr 2021
Results
B=4
Image Analyst on 1 Apr 2021
Thanks. Fix:
A = [ 5 5 5 5 5 ; 5 4 4 4 5 ; 5 4 4 4 5 ; 5 4 4 4 5 ; 5 5 5 5 5 ]
margin = 1; % Whatever you want.
B = A(margin + 1 : (end - margin), margin + 1 : (end - margin))
A =
5 5 5 5 5
5 4 4 4 5
5 4 4 4 5
5 4 4 4 5
5 5 5 5 5
B =
4 4 4
4 4 4
4 4 4

Thorsten on 29 Apr 2015
Edited: Thorsten on 29 Apr 2015
szcut = 3;
i1 = (size(A, 1) - szcut)/2;
ind1 = i1+1:i1+szcut;
B = A(ind1, ind2);
If A is not square or if you want to cut out non-square parts, define ind2 analogously.

Michael Haderlein on 29 Apr 2015
If c indicates the range you want to remove and would be 3 in your example, just use
B=A((end-c)/2+1:(end+c)/2,(end-c)/2+1:(end+c)/2);
Image Analyst on 29 Apr 2015
In general it's B = A(row1:row2, column1:column2). You can decide on the rows and columns in any way that you want. If you want to get only a particular value (like 4) automatically (even if it's not a rectangle) then let me know. It's possible.
I.G on 29 Apr 2015
cx=ceil(size(A,1)/2); % cx is the center line cy=ceil(size(A,2)/2); % cy is the center row x= ... % the steps in x axis from center x y= ... % the steps in y axis from center y B=A((cx-y):(cx+y),(cy-x):(cy+x));
Thanks for the help!