python scipy卷积运算的实现方法


Posted in Python onSeptember 16, 2019

scipy的signal模块经常用于信号处理,卷积、傅里叶变换、各种滤波、差值算法等。

*两个一维信号卷积

>>> import numpy as np
>>> x=np.array([1,2,3])
>>> h=np.array([4,5,6])
>>> import scipy.signal
>>> scipy.signal.convolve(x,h) #卷积运算
array([ 4, 13, 28, 27, 18])

卷积运算大致可以分成3步,首先先翻转,让两个信号列反过来,如上面就是1,2,3和6,5,4。然后作平移,6,5,4最开始在1,2,3的左边,没有重叠,现在向右移动,4和1就重叠了。对于重叠的部分,作乘积求和。也就是1x4得到第一个结果1,然后再移动后5x1+4x2得到第二个结果13以此类推。

卷积运算可以用来做大整数的乘法(数组表示数的乘法),比如在上面的例子中,要求123乘以456,可以先得到它的卷积序列,然后从后往前,18将8保留,进位1给27;然后27变成28,把8保留进位2给28;然后28变成30,把0保留进位3给13;然后13变成16,把6保留进位1给4;4变成5即是最高位。也就是乘法的结果是56088。

*对白噪声卷积

>>> import numpy as np
>>> from scipy import signal
>>> import matplotlib.pyplot as plt
>>> sig=np.random.randn(1000) #生成随机数
>>> autocorr=signal.fftconvolve(sig,sig[::-1],mode='full') #fft算法实现卷积
>>> fig,(ax_orig,ax_mag)=plt.subplots(2,1) #建立两行一列图形
>>> ax_orig.plot(sig) #在第一行把原始的随机数序列sig画出来
[<matplotlib.lines.Line2D object at 0x0000000006E1DC88>]
>>> ax_orig.set_title('White noise') #设置标题'白噪声'
<matplotlib.text.Text object at 0x0000000006931860>
>>> ax_mag.plot(np.arange(-len(sig)+1,len(sig)),autocorr) #卷积后的图像
[<matplotlib.lines.Line2D object at 0x0000000006E1DB00>]
>>> ax_mag.set_title('Autocorrelation') #设置标题
<matplotlib.text.Text object at 0x0000000006DFE8D0>
>>> fig.tight_layout() #此句可以防止图像重叠
>>> fig.show() #显示图像

fftconvolve只是用fft算法(快速傅立叶变换)实现的卷积,其结果应当和普通的convolve一样。

python scipy卷积运算的实现方法

*二维图像卷积运算

>>> import numpy as np
>>> from scipy import signal
>>> from scipy import misc
>>> import matplotlib.pyplot as plt
>>> face=misc.face(gray=True) #创建一个灰度图像
>>> scharr=np.array([[-3-3j,0-10j,+3-3j],
    [-10+0j,0+0j,+10+0j],
     [-3+3j,0+10j,+3+3j]]) #设置一个特殊的卷积和
>>> grad=signal.convolve2d(face,scharr,boundary='symm',mode='same') #把图像的face数组和设计好的卷积和作二维卷积运算,设计边界处理方式为symm
>>> fig,(ax1,ax2)=plt.subplots(1,2,figsize=(10,6)) #建立1行2列的图fig
>>> ax1.imshow(face,cmap='gray') #显示原始的图
<matplotlib.image.AxesImage object at 0x00000000078FC198>
>>> ax1.set_axis_off() #不显示坐标轴
>>> ax2.imshow(np.absolute(grad),cmap='gray') #显示卷积后的图
<matplotlib.image.AxesImage object at 0x00000000078FCE48>
>>> ax2.set_axis_off() #不显示坐标轴
>>> fig.show() #显示绘制好的画布

二维的卷积需要用上面的signal.convolve2d()。

之所以要对卷积后的图像数组grad作np.absolute()求绝对值运算是因为灰度图像的值都是正值,没有负的,为了防止出现负值所以才这样做。

python scipy卷积运算的实现方法 

二维的卷积运算还有一种函数,是signal.sepfir2d(),它可以传入三个参数,后两个参数指定行和列的卷积和(两个方向上的卷积是可以不同的,分别指定卷积和序列)。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的string模块中的Template类字符串模板用法
Jun 27 Python
win10环境下python3.5安装步骤图文教程
Feb 03 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
Python使用combinations实现排列组合的方法
Nov 13 Python
python提取包含关键字的整行数据方法
Dec 11 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
PyTorch 如何检查模型梯度是否可导
Jun 05 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 Python
python 三元运算符使用解析
Sep 16 #Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
Sep 16 #Python
Python循环实现n的全排列功能
Sep 16 #Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 #Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 #Python
Python 最强编辑器详细使用指南(PyCharm )
Sep 16 #Python
python 公共方法汇总解析
Sep 16 #Python
You might like
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
坏狼的PHP学习教程之第1天
2008/06/15 PHP
php 无限分类的树类代码
2009/12/03 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
php实现中文转数字
2016/02/18 PHP
php和nginx交互实例讲解
2019/09/24 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
flask入门之表单的实现
2018/07/18 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
战略合作协议书范本
2014/04/18 职场文书
机械工程师岗位职责
2014/06/16 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
结婚十年感言
2015/07/31 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
python用tkinter开发的扫雷游戏
2021/06/01 Python
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
Java中try catch处理异常示例
2021/12/06 Java/Android