matlab – 滑动最大窗口及其平均多维数组

我有一个60 x 21 x 700的矩阵,其中60 x 21表示压力输出x个帧数.我想找到生成每帧最大平均压力的2 x 2窗口,并将其存储在一个新变量中,以便绘制.例如,如果矩阵看起来像这样:

01 02 02 01 01
02 01 01 02 02
02 03 04 04 03
01 02 06 10 05
02 02 08 09 05

最大窗口及其2×2窗口的平均值将为 –

06 10
08 09

= 8.25

到目前为止,在我寻找解决方案的时候,我只能找到一个方法来获得最大值(例如,从上面的矩阵中可以看到10个),但是真的无法解决如何从一个小区域获取最大平均值它没有固定索引来引用.我对MATLAB来说相当新鲜,所以如果我错过了一些东西,或者我根本就不能正确理解东西,我很抱歉.
任何帮助或指导将不胜感激.

2D数组:对于给定的2D数组输入,可以使用2D convolution

%// Perform 2D convolution with a kernel of `2 x 2` size with all ones
conv2_out = conv2(A,ones(2,2),'same')

%// Find starting row-col indices of the window that has the maximum conv value
[~,idx] = max(conv2_out(:))
[R,C] = ind2sub(size(A),idx)

%// Get the window with max convolution value
max_window = A(R:R+1,C:C+1)

%// Get the average of the max window
out =  mean2(max_window)

示例一步一步运行的代码 –

A =
     1     2     2     1     1
     2     1     1     2     2
     2     3     4     4     3
     1     2     6    10     5
     2     2     8     9     5
conv2_out =
     6     6     6     6     3
     8     9    11    11     5
     8    15    24    22     8
     7    18    33    29    10
     4    10    17    14     5
idx =
    14
R =
     4
C =
     3
max_window =
     6    10
     8     9
out =
         8.25

多维数组:对于多维数组,您需要执行ND convolution

%// Perform ND convolution with a kernel of 2 x 2 size with all ONES
conv_out = convn(A,ones(2,2),'same')

%// Get the average for all max windows in all frames/slices  
[~,idx] = max(reshape(conv_out,[],size(conv_out,3)),[],1)
max_avg_vals = conv_out([0:size(A,3)-1]*numel(A(:,:,1)) + idx)/4

%// If needed, get the max windows across all dim3 slices/frames
nrows = size(A,1)
start_idx = [0:size(A,3)-1]*numel(A(:,:,1)) + idx
all_idx = bsxfun(@plus,permute(start_idx(:),[3 2 1]),[0 nrows;1 nrows+1])
max_window = A(all_idx)

样品输入,输出 –

>> A
A(:,:,1) =
     4     1     9     9
     3     7     5     5
     9     6     1     6
     7     1     1     5
     4     2     2     1
A(:,:,2) =
     9     4     2     2
     3     6     4     5
     3     9     1     1
     6     6     8     8
     5     3     6     4
A(:,:,3) =
     5     5     7     7
     6     1     9     9
     7     7     5     4
     4     1     3     7
     1     9     3     1
>> max_window
max_window(:,:,1) =
     9     9
     5     5
max_window(:,:,2) =
     8     8
     6     4
max_window(:,:,3) =
     7     7
     9     9
>> max_avg_vals
max_avg_vals =
            7          6.5            8
翻译自:https://stackoverflow.com/questions/30072284/sliding-max-window-and-its-average-for-multi-dimensional-arrays

转载注明原文:matlab – 滑动最大窗口及其平均多维数组