卷积用于图像处理:

卷积在函数方面的表现是一种连续的,可以用积分来表示,其实在初识积分的时候,我们就知道积分是通过离散数据求和得来的,这也决定了图像处理也可以运用到卷积的原理。在电脑中,图像其实是一个m*n的矩阵(这里不讨论颜色通道),那么针对于像素点,我们可以使用卷积的原理,使用另一个矩阵,将图像的低阶特征去除掉,保留和突出图像的高阶特征,再根据后续操作,对图像进行分类或者识别。

在连续函数的卷积中,使用的是可移动的与f(x)进行积分,在离散的图像矩阵中,将采取一种“卷积核”的特殊矩阵,它的作用就是代替,在平移的过程中与图像矩阵相乘累加,从而达到卷积中积分的效果。

卷积在图像处理中经常被用于平滑、模糊、锐化、去噪、边缘取等工作中。图像处理中的卷积操作,其实就是利用卷积核(模板)在目标图像上滑动,将图像上的像素点依次对应到卷积核的中间像素处,每个像素点对齐后将图像上的像素灰度值与卷积核对应位置上的数值相乘,然后将相乘后的所有值相加,相加的结果作为当前像素的灰度值,并最终滑动完所有图像像素点的过程。

一、24位彩色图像的卷积

1.导包

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

2.符号说明:

输入参数:
im : 单通道图像    mfilter:滤波器 fm:滤波器行数  fn:滤波器列数  hfm:滤波器行数半径  hfn:滤波器列数半径  输出参数 :convIm:单通道卷积结果

3.定义卷积运算的函数:

def convolution( im, mfilter, fm, fn, hfm, hfn ):mI, nI = im.shapeimp = np.pad( im, (hfm, hfn ), 'constant' )padmI, padnI = imp.shapeconvHeight = padmI - fm + 1convWidth  = padnI - fn + 1convIm = np.zeros( (mI, nI), dtype=np.float )for i in range( convHeight ):for j in range( convWidth ):locIm =  imp[ i:i+fm, j:j+fn ]convIm[i][j] = np.sum( locIm * mfilter )convIm = convIm.clip( 0, 255 )convIm = np.rint(convIm).astype('uint8')     return convIm

4.对rgb三通道图片的每一个通道调用卷积运算函数进行卷积操作,输出卷积之后的图片。

def ImageConvolution( image, mfilter ):mI, nI, cI = np.shape( image )print( 'Image size:', mI, nI, cI )[fm, fn] = np.shape( mfilter )print( 'fileter size:', fm, fn )hfm = int( fm / 2 )hfn = int( fn / 2 )#根据滤波器长度奇偶性的不同调整扩充图像的范围if fn % 2 == 0:hfn -= 1imR = image[ :, :, 0 ]imG = image[ :, :, 1 ]    imB = image[ :, :, 2 ]#依次截取与滤波器大小相同的图像块进行内积运算  convImageR = convolution( imR, mfilter, fm, fn, hfm, hfn  )convImageG = convolution( imG, mfilter, fm, fn, hfm, hfn  )convImageB = convolution( imB, mfilter, fm, fn, hfm, hfn  )convImage = np.stack( ( convImageR, convImageG, convImageB ), 2  )return convImage

5.主函数就是输入需要处理的图片,然后调用刚刚第二个函数对图片进行卷积操作,最后可视化卷积之后的图片

def main():img = np.array( Image.open("C:/Users/bwy/Desktop/暑假/ImageConvolution_py/1.jpg", 'r') )plt.figure( 'Image' )plt.imshow( img )#plt.axis( 'off' )#根据滤波器对图像进行卷积filter1 = [ [-1, -2, -1], [0, 0, 0], [1, 2, 1] ]imageConv = ImageConvolution( img, filter1 )plt.figure( 'filter1' )plt.imshow( imageConv )plt.axis( 'off' )filter2 = np.ones( (2, 2) )filter2 /= filter2.sum()imageConv = ImageConvolution( img, filter2 )plt.figure( 'filter2x2' )plt.imshow( imageConv )plt.axis( 'off' )filter2 = np.ones( (3, 3) )filter2 /= filter2.sum()imageConv = ImageConvolution( img, filter2 )plt.figure( 'filter3x3' )plt.imshow( imageConv )plt.axis( 'off' )filter2 = np.ones( (4, 4) )filter2 /= filter2.sum()imageConv = ImageConvolution( img, filter2 )plt.figure( 'filter4x4' )plt.imshow( imageConv )plt.axis( 'off' )if __name__ == '__main__':main()

结果:左图(原图像):

完整全部代码如下: 

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
#卷积
#输入参数:
#   im : 单通道图像
#   mfilter:滤波器
#   fm:滤波器行数
#   fn:滤波器列数
#   hfm:滤波器行数半径
#   hfn:滤波器列数半径
#输出参数:
#   convIm:单通道卷积结果
def convolution( im, mfilter, fm, fn, hfm, hfn ):mI, nI = im.shapeimp = np.pad( im, (hfm, hfn ), 'constant' )padmI, padnI = imp.shapeconvHeight = padmI - fm + 1convWidth  = padnI - fn + 1convIm = np.zeros( (mI, nI), dtype=np.float )for i in range( convHeight ):for j in range( convWidth ):locIm =  imp[ i:i+fm, j:j+fn ]convIm[i][j] = np.sum( locIm * mfilter )convIm = convIm.clip( 0, 255 )convIm = np.rint(convIm).astype('uint8')     return convIm#图像的卷积运算
#输入参数
#       image:原图像
#       mfilter:滤波器
#输出参数
#       convImage:卷积后的图像
def ImageConvolution( image, mfilter ):mI, nI, cI = np.shape( image )print( 'Image size:', mI, nI, cI )[fm, fn] = np.shape( mfilter )print( 'fileter size:', fm, fn )hfm = int( fm / 2 )hfn = int( fn / 2 )#根据滤波器长度奇偶性的不同调整扩充图像的范围if fn % 2 == 0:hfn -= 1imR = image[ :, :, 0 ]imG = image[ :, :, 1 ]    imB = image[ :, :, 2 ]#依次截取与滤波器大小相同的图像块进行内积运算  convImageR = convolution( imR, mfilter, fm, fn, hfm, hfn  )convImageG = convolution( imG, mfilter, fm, fn, hfm, hfn  )convImageB = convolution( imB, mfilter, fm, fn, hfm, hfn  )convImage = np.stack( ( convImageR, convImageG, convImageB ), 2  )return convImagedef main():img = np.array( Image.open("C:/Users/bwy/Desktop/暑假/ImageConvolution_py/1.jpg", 'r') )plt.figure( 'Image' )plt.imshow( img )#plt.axis( 'off' )#根据滤波器对图像进行卷积filter1 = [ [-1, -2, -1], [0, 0, 0], [1, 2, 1] ]imageConv = ImageConvolution( img, filter1 )plt.figure( 'filter1' )plt.imshow( imageConv )plt.axis( 'off' )filter2 = np.ones( (2, 2) )filter2 /= filter2.sum()imageConv = ImageConvolution( img, filter2 )plt.figure( 'filter2x2' )plt.imshow( imageConv )plt.axis( 'off' )filter2 = np.ones( (3, 3) )filter2 /= filter2.sum()imageConv = ImageConvolution( img, filter2 )plt.figure( 'filter3x3' )plt.imshow( imageConv )plt.axis( 'off' )filter2 = np.ones( (4, 4) )filter2 /= filter2.sum()imageConv = ImageConvolution( img, filter2 )plt.figure( 'filter4x4' )plt.imshow( imageConv )plt.axis( 'off' )if __name__ == '__main__':main()

博主收到的一树“杏运”,每位读到这篇文章的人也都会超级幸运,运气爆好!!!

卷积神经网络——24位彩色图像的卷积的详细介绍相关推荐

  1. 卷积神经网络的python实现,python卷积神经网络图像

    怎样用python构建一个卷积神经网络模型 上周末利用python简单实现了一个卷积神经网络,只包含一个卷积层和一个maxpooling层,pooling层后面的多层神经网络采用了softmax形式的 ...

  2. 卷积神经网络(4)-- 实现卷积神经网络的简例

    一.卷积神经网络的一般框架 卷积神经网络主要包含5个结构:输入层.卷积层.池化层.全连层.softmax层 输入层:整个神经网络的输入,在图像分类问题中,一般是一张图片的像素矩阵.一般按照batch进 ...

  3. 卷积神经网络的Python实现,python卷积神经网络训练

    如何才能自学好python? 对于想要自学Python的小伙伴,这里整理了一份系统全面的学习路线,按照这份大纲来安排学习可以少走弯路,事半功倍. 第一阶段:专业核心基础阶段目标:1.熟练掌握Pytho ...

  4. 【数据挖掘】卷积神经网络 ( 视觉原理 | CNN 模仿视觉 | 卷积神经网络简介 | 卷积神经网络组成 | 整体工作流程 | 卷积计算图示 | 卷积计算简介 | 卷积计算示例 | 卷积计算参数 )

    文章目录 I . 人类的视觉原理 II . 卷积神经网络 模仿 视觉原理 III . 卷积神经网络简介 IV . 卷积神经网络 组成 V . 卷积神经网络 工作流程 VI . 降低样本参数数量级 VI ...

  5. 卷积神经网络(三):卷积神经网络CNN的简单实现(部分Python源码)

    转载自: 卷积神经网络(三):卷积神经网络CNN的简单实现(部分Python源码) - xuanyuansen的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/xu ...

  6. 图神经网络(一)图信号处理与图卷积神经网络(5)图卷积神经网络

    图神经网络(一)图信号处理与图卷积神经网络(5)图卷积神经网络 0. 概述 1. 对频率响应矩阵进行参数化 2. 对多项式系数进行参数化 3. 设计固定的图滤波器 0. 概述 在学习了图滤波器定义的基 ...

  7. 机器学习——深度学习之卷积神经网络(CNN)——AlexNet卷积神经网络结构

    目录 一.AlexNet卷积神经网络结构模型 1.数据库ImageNet 2.AlexNet第一层卷积层 二.AlexNet卷积神经网络的改进 1.非线性变化函数的改变--ReLU 2.最大池化(Ma ...

  8. 转:卷积神经网络_(1)卷积层和池化层学习

    博主总结的很好,学习中.转载:http://www.cnblogs.com/zf-blog/p/6075286.htm 卷积神经网络_(1)卷积层和池化层学习 卷积神经网络(CNN)由输入层.卷积层. ...

  9. 卷积神经网络学习——第二部分:卷积神经网络训练的基本流程

    卷积神经网络学习--第二部分:卷积神经网络训练的基本流程 一.序言 二.训练流程 1.数据集引入 2.构建网络 (1)四层卷积神经网络 (2)两层全连接层网络 3.模型训练 4.模型评估 三.总结 一 ...

最新文章

  1. 自己一路经历的实习面试总结(希望能给看到这篇博客的小伙伴提供一些帮助)
  2. ntfs for Mac无法填写序列号怎么解决
  3. 大学生能从计算机游戏中受益,2017年6月英语四级作文练习:大学生玩游戏
  4. 遇到上亿(MySQL)大表的优化....
  5. MySQL from后面的子查询使用
  6. [国家集训队] tree Ⅱ
  7. python网页表格读取_是否可以读取网页html表格数据?
  8. [MySQL优化案例]系列 -- DISABLE/ENABLE KEYS的作用
  9. 5.15 vs2019 静态编译_xmake v2.3.8 发布, 新增 Intel C++/Fortran 编译器支持
  10. 使用 matlab 数字图像处理(五)—— 双线性插值(Bilinear Interpolation)
  11. Visual C# 2005 编译器选项
  12. sonar报java.io.StreamCorruptedException: invalid internal transport message format, got (48,54,54,50)
  13. 20021年还需要学C语言吗?C语言成为专家的路径、方法、书籍推荐
  14. Redis的数据变成backup
  15. python爬虫是数据挖掘吗_爬虫属于数据挖掘 python为什么叫爬虫
  16. DBA 职业迷茫何去何从
  17. mysql关系图查看
  18. 倍福Twincat NC PTP使用介绍
  19. python模拟行星运动_Java课程设计——模拟行星运动
  20. QtEmbeded移植到达芬奇6441平台

热门文章

  1. 2022上海市安全员C证培训试题及模拟考试
  2. 单边公差能计算Pp和Ppk吗
  3. 钉钉、企微、飞书学会赚钱了吗?
  4. 浅科普一下计算机发展史阶段及那些不为人知的重要里程碑
  5. 嵌入式linux .net core,嵌入式Linux+NetCore 笔记一
  6. 西邮Linux小组22-20纳新面试题目及题解
  7. 萤石春季发布会:4+N产品体系再升级EZVIZ Connect连接智能生活
  8. tp6 中间件的常用操作
  9. webp格式转换成png的方法
  10. 编程语言中 按位取反操作怎么计算