Average every n*n elements in a two dimensional matrix
조회 수: 3 (최근 30일)
이전 댓글 표시
I have a two dimensional matrix, and create a second matrix with the averages of every n*n elements. So, say I have a 100*100 matrix; I would want a 10*10 matrix where each single element is the average of the 10*10 elements in the original matrix at that location.
So far I have tried splitting the matrix into n separate row vectors, averaging each of those every n elements, concatenating and re averaging ever n of the averaged vectors. Then I concatenate each of those vectors. Is there a more efficient way to do this this, without using so many loops? It is very inefficient and inelegant for such a large matrix.
Thanks
댓글 수: 0
채택된 답변
Sean de Wolski
2013년 5월 10일
편집: Sean de Wolski
2013년 5월 10일
If you have the Image Processing Toolbox, you can use blockproc
blockproc(magic(100),[10 10],@(bs)sum(bs.data(:)))
And for more info:
doc blockproc
Otherwise just use a double for-loop.
OR if you're curious to learn about vectorizing and speed is a top priority:
G = reshape(sum(reshape(sum(reshape(A,sz(1),blk(2),[]),2),blk(1),[]),1),sz./blk);
And broken into pieces:
A = magic(100);
blk = [10 10];
sz = size(A);
B = reshape(A,sz(1),blk(2),[]); %reshape so every blk column is a page
C = sum(B,2); %sum blocks across rows
D = reshape(C,blk(1),[]); %reshape so each column is a block
E = sum(D,1); %sum columns
F = reshape(E,sz./blk); %reshape to final size.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Computer Vision with Simulink에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!