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环境下安装使用异步任务队列包Celery的基础教程
May 07 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
Jun 11 Python
python组合无重复三位数的实例
Nov 13 Python
解决python有时候import不了当前的包问题
Aug 28 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
在python里使用await关键字来等另外一个协程的实例
May 04 Python
Django中使用Json返回数据的实现方法
Jun 03 Python
Python urllib库如何添加headers过程解析
Oct 05 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
Python爬虫爬取ts碎片视频+验证码登录功能
Feb 22 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 采集心得技巧
2009/05/15 PHP
discuz的php防止sql注入函数
2011/01/17 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
jQuery 获取对象 定位子对象
2010/05/31 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
jquery实现动态画圆
2014/12/04 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
详解vue组件基础
2018/05/04 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
python字符串循环左移
2019/03/08 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
一个入门级python爬虫教程详解
2021/01/27 Python
辞旧迎新演讲稿
2014/09/15 职场文书
2014年度工作总结报告
2014/12/15 职场文书
公司捐书倡议书
2015/04/27 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书