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实现网站文件的全备份和差异备份
Nov 30 Python
python使用mailbox打印电子邮件的方法
Apr 30 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
python获取中文字符串长度的方法
Nov 14 Python
对Python 检查文件名是否规范的实例详解
Jun 10 Python
python读出当前时间精度到秒的代码
Jul 05 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
关于Tensorflow 模型持久化详解
Feb 12 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
python爬虫中的url下载器用法详解
Nov 30 Python
python中常用的数据结构介绍
Jan 12 Python
对Pytorch 中的contiguous理解说明
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 各种应用乱码问题的解决方法
2010/05/09 PHP
深入理解PHP原理之异常机制
2010/08/21 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
jQuery代码实现表格中点击相应行变色功能
2016/05/09 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
打开电脑上的QQ的python代码
2013/02/10 Python
Python安装第三方库的3种方法
2015/06/21 Python
python的re正则表达式实例代码
2018/01/24 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
使用python3构建文件传输的方法
2019/02/13 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
2015年教师党员公开承诺书
2015/01/22 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android