在np.array上实现无重叠的2D滑动窗口

问题描述 投票:0回答:1

我正在尝试实现立方形状 (k,k) 的 2D 滑动窗口,以便我可以迭代帧 (n,m,3) 并计算每个窗口中像素值的平均值。 我希望每次迭代时,窗口都会显示下一张幻灯片,而没有任何重叠的值; 即给定这个矩阵:

[
  [1, 2, 3, 4],
  [5, 6, 7 ,8],
  [9, 10, 11, 12],
  [13, 14, 15, 16]
 ]

对于 k = 2 我会得到如下的东西:

 [
  [1, 2],
  [5, 6]
 ]

第二个窗口的值如下:

 [
  [3, 4],
  [7, 8]
 ]

等等。

我尝试过使用 numpy.lib.stride_tricks.as_strided。 但没有任何成功。

使用 numpy 或任何其他高效的库也很重要,因为使用 python for 循环实现此代码对于该操作来说太昂贵了。

python numpy multidimensional-array computer-vision
1个回答
0
投票

忽略第三个维度,既然它似乎没有进入问题,那么怎么样:

# Generate array of size (m*k, n*k)
# my m, n are your m, n divided by k
m, n = 2, 4
k = 3
x = np.arange(m*n*k*k).reshape((m*k, n*k))

# Calculate means of k x k blocks
y = x.reshape((m, k, n, k))
z = np.moveaxis(y, 2, 1)
np.mean(z, axis=(-2, -1))
© www.soinside.com 2019 - 2024. All rights reserved.