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中比较特别的除法运算和幂运算介绍
Apr 05 Python
Python2.x与Python3.x的区别
Jan 14 Python
Windows和Linux下Python输出彩色文字的方法教程
May 02 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
python中使用print输出中文的方法
Jul 16 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
python实现公司年会抽奖程序
Jan 22 Python
Python实现Restful API的例子
Aug 31 Python
手动安装python3.6的操作过程详解
Jan 13 Python
k-means 聚类算法与Python实现代码
Jun 01 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 12 Python
学会迭代器设计模式,帮你大幅提升python性能
Jan 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
跟老齐学Python之Python文档
2014/10/10 Python
六个窍门助你提高Python运行效率
2015/06/09 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
对python中的pop函数和append函数详解
2018/05/04 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
python 列表推导式使用详解
2019/08/29 Python
python图形用户接口实例详解
2019/12/16 Python
django修改models重建数据库的操作
2020/03/31 Python
python解包用法详解
2021/02/17 Python
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
总裁岗位职责
2013/12/04 职场文书
禁烟标语大全
2014/06/11 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
介绍信范文
2015/01/31 职场文书
社区敬老月活动总结
2015/05/07 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS