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 相关文章推荐
以一段代码为实例快速入门Python2.7
Mar 31 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
python线程中同步锁详解
Apr 27 Python
python正向最大匹配分词和逆向最大匹配分词的实例
Nov 14 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
python中for循环把字符串或者字典添加到列表的方法
Jul 20 Python
对python3中的RE(正则表达式)-详细总结
Jul 23 Python
Python3实现二叉树的最大深度
Sep 30 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
Python批量安装卸载1000个apk的方法
Apr 10 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
Python图像处理之图像拼接
Apr 28 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中的流(streams)浅析
2015/07/02 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
Javascript实现的分页函数
2006/12/22 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
让你相见恨晚的十个Python骚操作
2020/11/18 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
瑞典度假品牌:OAS
2019/05/28 全球购物
酒店中秋节促销方案
2014/01/30 职场文书
高级销售求职信
2014/02/21 职场文书
文案策划专业自荐信
2014/07/07 职场文书
小学班级特色活动方案
2014/08/31 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
《正比例》教学反思
2016/02/23 职场文书
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
python基础之//、/与%的区别详解
2022/06/10 Python