图像处理之池化

平均池化与最大池化


问题描述:将彩色图像进行平均池化与最大池化

代码如下(示例):

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <math.h>

// average pooling
cv::Mat average_pooling(cv::Mat img) {
    int width = img.cols;
    int height = img.cols;
    int channel = img.channels();
    int win_size = 8;
    int val = 0;

    cv::Mat new_image = cv::Mat::zeros(height, width, CV_8UC3);

    for (int i = 0; i < height; i += win_size)
    {
        for (int j = 0; j < width; j += win_size)
        {
            for (int c = 0; c < channel; c++)
            {
                val = 0;
                for (int di = 0; di < win_size; di++)
                {
                    for (int dj = 0; dj < win_size; dj++)
                    {
//                        val += (double)img.at<cv::Vec3b>(i + di, j + dj)[c];  // 平均池化
                        val = fmax(img.at<cv::Vec3b>(i + di, j + dj)[c], val);  // 最大池化
                    }
                }
//                val /= (win_size * win_size);    // 平均池化
                for (int di = 0; di < win_size; di++)
                {
                    for (int dj = 0; dj < win_size; dj++)
                    {
                        new_image.at<cv::Vec3b>(i + di, j + dj)[c] = (uchar)val;
                    }
                }
            }
        }
    }

    return new_image;
}

int main(){
    // read image
    cv::Mat img = cv::imread("../imori.jpg", cv::IMREAD_COLOR);

    // average pooling
    cv::Mat new_image = average_pooling(img);

//    cv::imwrite("../1-10/imori1.jpg", new_image); // 平均池化
//    cv::imshow("imori1", new_image);              // 平均池化
    cv::imwrite("../1-10/imori2.jpg", new_image);
    cv::imshow("imori2", new_image);
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}
 

输入图像 (imori.jpg)平均池化图像 (imori1.jpg)最大池化图像 (imori2.jpg)
在这里插入图片描述在这里插入图片描述在这里插入图片描述

平均池化与最大池化

将图片使用均等大小网格分割,并求网格内代表值的操作称为池化(Pooling)
平均池化是将图片按照固定大小网格分割,网格内的像素值取网格内所有像素的平均值的池化操作。

池化操作是**卷积神经网络(Convolutional Neural Network)**中重要的图像处理方式。平均池化按照下式定义:
v = 1 ∣ R ∣   ∑ i = 1 R   v i v=\frac{1}{|R|}\ \sum\limits_{i=1}^R\ v_i v=R1 i=1R vi

最大池化是将图片按照固定大小网格分割,网格内的像素值取网格内所有像素的最大值的池化操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CNN全称为卷积神经网络,是一种深度学习中常用的神经网络模型,广泛应用于图像处理任务中。冈萨雷斯则是数字图像处理领域的知名学者。数字图像处理是指利用计算机对数字图像进行分析、处理和改进的一门学科。 CNN在数字图像处理中具有重要作用。它通过建立多个卷积层和池化层的堆叠,能够自动从图像中提取出不同层次的特征。卷积层可以通过滑动窗口和卷积核的运算,提取图像中的局部特征,而池化层可以对特征图进行降维和抽样,有助于减少参数个数和计算量。通过多个卷积层和池化层的组合,CNN能够更有效地学习到图像的抽象特征,实现图像的分类、识别、分割等任务。 冈萨雷斯在数字图像处理领域做出了很多重要的贡献。他与伍兹合著了《数字图像处理》一书,该书成为数字图像处理领域的经典教材,被广泛使用于高校教学和科研工作。该书系统地介绍了数字图像处理的基本概念、原理和方法,包括图像增强、滤波、变换、复原等内容。冈萨雷斯和伍兹提出了许多经典、实用和高效的数字图像处理算法,为数字图像处理的发展做出了重要贡献。他的研究成果在学术界和工业界都有着广泛的影响。 总之,CNN和冈萨雷斯数字图像处理都对图像处理领域有着重要的意义。CNN作为一种核心的神经网络模型,在图像处理任务中具有强大的特征学习和表达能力。而冈萨雷斯通过他的研究工作和经典教材,在数字图像处理方面做出了突出的贡献,为数字图像处理的发展和应用提供了宝贵的理论与实践基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值