フィルターのクリア

I have a 32 * 32 matrix .i want to take mean of each 4*4 so that the matrix is reduced to 8*8 array. Can anyone help me how to do that?

8 ビュー (過去 30 日間)
please help me how to take mean of specified dimension from a large array.

採用された回答

Andrei Bobrov
Andrei Bobrov 2017 年 10 月 20 日
編集済み: Andrei Bobrov 2017 年 10 月 20 日
Try use blockproc from Image Processing Toolbox
out = blockproc(A,[4 4],@(x)mean(x.data(:)));
variant without Image Processing Toolbox
[m,n] = size(A);
k = [4 4];
[ii, jj] = ndgrid(ceil((1:m)/k(1)),ceil((1:n)/k(2)));
out1 = accumarray([ii(:),jj(:)],A(:),[],@mean);
other variant
[m,n] = size(A);
k = [4 4];
C = mat2cell(A,k(1)*ones(m/k(1),1),k(2)*ones(n/k(2),1));
out = cellfun(@(x)mean(x(:)),C);
  2 件のコメント
bidlee devi
bidlee devi 2020 年 2 月 12 日
out = blockproc(A,[4 4],@(x)mean(x.data(:)));
I got the desired results. Reduction of 32by32 to 8by8.
How can I subtract each elements of 4by4 of A from its respective means? Thanks.

サインインしてコメントする。

その他の回答 (1 件)

KSSV
KSSV 2017 年 10 月 20 日
A = rand(32,32) ;
m = 4 ; n = 4 ;
l = size (A) ./ [m n];
T = mat2cell (A, repmat (m, l(1), 1), repmat (n, l (2), 1));
M = cellfun(@mean,T,'un',0) ;
M = cellfun(@mean,M,'un',0) ;
M = cell2mat(M)

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by