平均池化(Average Pooling)
将图片按照固定大小网格分割,网格内的像素值取网格内所有像素的平均值。
我们将这种把图片使用均等大小网格分割,并求网格内代表值的操作称为池化(Pooling)。
池化操作是**卷积神经网络(Convolutional Neural Network)**中重要的图像处理方式。平均池化按照下式定义:
v
=
1
∣
R
∣
∑
i
=
1
R
v
i
v=\frac{1}{|R|}\ \sum\limits_{i=1}^R\ v_i
v=∣R∣1 i=1∑R vi
请把大小为
128
×
128
128\times128
128×128的imori.jpg
使用
8
×
8
8\times8
8×8的网格做平均池化。
import imageio
import numpy as np
import matplotlib.pylab as plt
img = imageio.imread("imori.jpg")
s = 8
rows,cols,C = img.shape
nrows = int(rows/s)
ncols = int(cols/s)
img1 = np.zeros((nrows,ncols,C),np.uint8)
for row in range(nrows):
for col in range(ncols):
for c in range(C):
img1[row,col,c] = np.mean(img[row*s:(row+1)*s-1,col*s:(col+1)*s-1,c])
# imageio.imsave("output.jpg",img1)
plt.figure(figsize=(8,6))
plt.subplot(121)
plt.imshow(img)
plt.axis('off')
plt.subplot(122)
plt.imshow(img1)
plt.axis('off')
plt.show()
结果: