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实现二叉堆
Feb 03 Python
OpenCV实现人脸识别
Apr 07 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
详解python配置虚拟环境
Apr 08 Python
python游戏开发之视频转彩色字符动画
Apr 26 Python
python Django的web开发实例(入门)
Jul 31 Python
Python实现微信机器人的方法
Sep 06 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
python sorted函数原理解析及练习
Feb 10 Python
jupyter notebook清除输出方式
Apr 10 Python
python+playwright微软自动化工具的使用
Feb 02 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/11/19 PHP
php 常用字符串函数总结
2008/03/15 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
php 删除cookie方法详解
2014/12/01 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
eval与window.eval的差别分析
2011/03/17 Javascript
js取得url地址参数实例
2013/02/22 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
基于JavaScript实现简单的音频播放功能
2018/01/07 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
Python设计模式之代理模式实例
2014/04/26 Python
详解Python中的多线程编程
2015/04/09 Python
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
Python做简单的字符串匹配详解
2017/03/21 Python
对python中的argv和argc使用详解
2018/12/15 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
应届生自我鉴定
2013/12/11 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python