卷积核使得当前像素跟它邻域内的像素取平均,实现图像的模糊与平滑,示例如下:
# img = Image.open('tiger.jpg').convert('L')
img = Image.open('tiger.jpg')
# img = Image.open('car.jpg')
img = np.array(img)
im0 = img[:, :, 0]
im1 = img[:, :, 1]
im2 = img[:, :, 2]
def train(im):
with fluid.dygraph.guard(fluid.CUDAPlace(0)):
w = np.ones([1, 1, 9, 9], dtype='float32') / 81
# w = np.repeat(w, 3, axis=1)
# w = np.repeat(w, 3, axis=0)
conv = Conv2D(num_channels=1, num_filters=1, filter_size=(9, 9), param_attr=fluid.ParamAttr(initializer=NumpyArrayInitializer(value=w)))
x = im.astype('float32')
x = x.reshape(1, 1, img.shape[0], img.shape[1])
x = fluid.dygraph.to_variable(x)
y = conv(x)
out = y.numpy()
return out
plt.figure(figsize=(20, 12))
f = plt.subplot(1, 2, 1)
f.set_title('input image')
# plt.imshow(img, cmap='gray')
plt.imshow(img)
f = plt.subplot(1, 2, 2)
f.set_title('output feature map')
out0 = train(im0).squeeze()
out1 = train(im1).squeeze()
out2 = train(im2).squeeze()
out = np.ones((out0.shape[0], out0.shape[1], 3))
out[:, :, 0] = out0
out[:, :, 1] = out1
out[:, :, 2] = out2
plt.imshow(out.astype('int64'))
原图为:
tiger.jpg
模糊处理后的图为:
blur_tiger.jpg
网友评论