對輸入圖像進行池化操作來降採樣,不採用resize。
常用的池化方法:
1.均值池化:對池化區域內的像素點取均值,這種方法得到的特徵數據對背景信息更敏感
2.最大池化:對池化區域的所有像素值取最大值,這種方法得到的特徵數據對紋理信息更加敏感
代碼
import numpy as np
import cv2
#池化操作,縮放圖像
def pooling(data, m, n, key='mean'):
h,w,c = data.shape
img_new = []
for i in range(0,h,m):
line = []
for j in range(0,w,n):
x = data[i:i+m,j:j+n]#選取池化區域
if key == 'mean': #平均池化
line.append([np.sum(x[:,:,0]/(n*m)),np.sum(x[:,:,1]/(n*m)),np.sum(x[:,:,2]/(n*m))])
elif key == 'max': #均值池化
line.append([np.max(x[:,:,0]),np.max(x[:,:,1]),np.max(x[:,:,2])])
else:
return data
img_new.append(line)
return np.array(img_new,dtype='uint8')
if __name__ == '__main__':
img = cv2.imread('1.jpg')
img_new = pooling(img,2,2,'mean')
cv2.imshow('aaa',img)
cv2.imshow('bbb',img_new)
cv2.waitKey(0)
原始圖像:
均值池化後:
最大池化後:
綜上:爲基於池化的圖像縮放操作。