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中列表(list)操作方法汇总
Aug 18 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
解决Python 使用h5py加载文件,看不到keys()的问题
Feb 08 Python
对Python3 序列解包详解
Feb 16 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
Python selenium根据class定位页面元素的方法
Feb 26 Python
关于tensorflow的几种参数初始化方法小结
Jan 04 Python
Python多线程正确用法实例解析
May 30 Python
分享3个非常实用的 Python 模块
Mar 03 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生成带有雪花背景的验证码
2006/10/09 PHP
PHP数据缓存技术
2007/02/14 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
node.js实现端口转发
2016/04/14 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
Python实现的检测网站挂马程序
2014/11/30 Python
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
增大python字体的方法步骤
2020/07/05 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
矫正人员思想汇报
2014/01/08 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
标准发言稿结尾
2019/07/18 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python