Binning regions of a 2D matrix slices (and extending this into the third dimension)

조회 수: 16 (최근 30일)
Hello,
I am having an issue binning regions of a 3D matrix (but I want the binning to occur in the X-Y dimension for each Z slice). Let's say I have a matrix of 512x128x1200, each 2D slice has dimension 512x128, but say I want to bin the pixel counts such that we create a 2D sliced 32x32 matrix (each element being the sum of 16x4 regions within the original larger matrix, is this possible? Then if we can perform this binning in 2D I want to extend this to each element in the Z-direction
It also would be nice then in future to have control of the X/Y bin 'width' so that the matrix can be reshaped into other square orientations, I have just chosen 32x32 as an arbritary starting point!
Hopefully that makes sense!
Cheers

채택된 답변

Bruno Luong
Bruno Luong 2020년 8월 14일
편집: Bruno Luong 2020년 8월 14일
This assumes the first/second dimensions of your matrix are divisible by 32
% Test matrix
A=rand(512,128,1200);
binsz = 32;
[m,n,p] = size(A);
mr = m/binsz;
nr = n/binsz;
B = reshape(A,mr,binsz,nr,binsz,p);
B = sum(B,[1 3]);
B = reshape(B,binsz,binsz,p);
  댓글 수: 3
Bruno Luong
Bruno Luong 2020년 8월 14일
편집: Bruno Luong 2020년 8월 14일
See argument 'omitnan'of SUM.
Alternatively you can replace NaN by 0
B(isnan(B))=0
before the sum

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Alan Moses
Alan Moses 2020년 8월 14일
Hi Eunan,
You can use the convn function to help you achieve this. Please look at the below example where I have taken ‘X’ as the large matrix and reshaped it into a smaller matrix ‘Z’:
X = 2*ones(512,128,3);
x_width = 16;
y_width = 4;
Y = convn(X,ones(x_width,y_width),'valid');
Z = Y(1:x_width:end,1:y_width:end,:); %Z dimensions – 32x32x3
Hope this helps!
  댓글 수: 1
Eunan McShane
Eunan McShane 2020년 8월 14일
Thank you! This does work, however (I should have said) there is a portion of the data which is NaN and so I want to ignore these entries in the sum, the other answer allows me to use nansum to this end!
Cheers though this is a really useful function which I can use for other applications!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by