手写代码实现池化操作(Python)

本文介绍图像处理中的降采样技术——池化,包括均值池化和最大池化,通过实例展示了不同池化方法对图像分辨率和特征提取的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在图片降采样的过程中,常采用pooling(池化)方法来降采样。

计算图像一个区域上的某个特定特征的平均值或最大值,这种聚合操作叫做池化。

池化后的这些统计特征不仅具有低得多的维度,同时训练结果不容易过拟合。

常用的池化方法:

       1.均值池化:对池化区域内的像素点取均值,这种方法得到的特征数据对背景信息更敏感

        2.最大池化:对池化区域的所有像素值取最大值,这种方法得到的特征数据对纹理信息更加敏感

 

一:导入需要使用到的库

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

二:读取图片,并可视化

img = Image.open('小镇.jpg')
plt.imshow(img)
plt.axis('off')

 三:RGB三通道数据分离

r, g, b = img.split()
plt.imshow(r)
plt.axis('off')

 

四:定义池化函数

#均值池化
def pooling(data, m, n):
    a,b = data.shape
    img_new = []
    for i in range(0,a,m):
        line = []#记录每一行
        for j in range(0,b,n):
            x = data[i:i+m,j:j+n]#选取池化区域
            line.append(np.sum(x)/(n*m))
        img_new.append(line)
    return np.array(img_new)

 原图片的分辨率为:

np.array(r).shape
(576, 1024)

是一张576*1024的图片,我们使用2*2的池化区域,对图片进行池化:

img_new = pooling(np.array(r), 2, 2)
plt.imshow(img_new)
plt.axis('off')

 它的分辨率降到了:288*512

使用5*5的池化区域,其分辨率的降低可以更显著:

这是均值池化的效果,我们试一下最大值池化:

#最大池化
def pooling(data, m, n):
    a,b = data.shape
    img_new = []
    for i in range(0,a,m):
        line = []
        for j in range(0,b,n):
            x = data[i:i+m,j:j+n]
            line.append(np.max(x))
        img_new.append(line)
    return np.array(img_new)

 分别使用2*2,和5*5的池化来看一下效果:

 可以明显看出,均值池化和最大池化的区别。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫虫(——)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值