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使用os模块的os.walk遍历文件夹示例
Jan 27 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
python常用知识梳理(必看篇)
Mar 23 Python
Python HTTP客户端自定义Cookie实现实例
Apr 28 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
Python3.5集合及其常见运算实例详解
May 01 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 Python
django 实现celery动态设置周期任务执行时间
Nov 19 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
哪些是python中web开发框架
Jun 17 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 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进程之间实现共享内存的方法
2014/06/13 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
jQuery三级下拉列表导航菜单代码分享
2020/04/15 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python使用arp欺骗伪造网关的方法
2015/04/24 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
Python异常处理操作实例详解
2018/08/28 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Django模板Templates使用方法详解
2019/07/19 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
宠物店的创业计划书范文
2014/01/11 职场文书
工作经验交流材料
2014/12/30 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
社区志愿服务活动感想
2015/08/07 职场文书