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列表append和+的区别浅析
Feb 02 Python
Python while 循环使用的简单实例
Jun 08 Python
Python数据结构之翻转链表
Feb 25 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 Python
解决python文件字符串转列表时遇到空行的问题
Jul 09 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
Jan 29 Python
Ranorex通过Python将报告发送到邮箱的方法
Jan 12 Python
使用python无账号无限制获取企查查信息的实例代码
Apr 17 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
一些让Python代码简洁的实用技巧总结
Aug 23 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
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
PHP session有效期session.gc_maxlifetime
2011/04/20 PHP
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
js图片自动切换效果处理代码
2013/05/07 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
Python使用pymysql小技巧
2017/06/04 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
2017/10/15 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
Python之列表实现栈的工作功能
2019/01/28 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
上班迟到检讨书
2014/01/10 职场文书
成本会计实训报告
2014/11/05 职场文书
大学学生会辞职信
2015/05/13 职场文书
酒店宣传语大全
2015/07/13 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python