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 相关文章推荐
matplotlib简介,安装和简单实例代码
Dec 26 Python
python机器学习之贝叶斯分类
Mar 26 Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 Python
基于python生成器封装的协程类
Mar 20 Python
Python实现的微信支付方式总结【三种方式】
Apr 13 Python
python pygame实现五子棋小游戏
Oct 26 Python
使用python实现滑动验证码功能
Aug 05 Python
python检测服务器端口代码实例
Aug 31 Python
Numpy与Pytorch 矩阵操作方式
Dec 27 Python
Django与pyecharts结合的实例代码
May 13 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 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判断字符以及字符串的包含方法属性
2008/08/30 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
python实现保存网页到本地示例
2014/03/16 Python
Python中的jquery PyQuery库使用小结
2014/05/13 Python
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
替换python字典中的key值方法
2018/07/06 Python
wxpython绘制音频效果
2019/11/18 Python
单身旅行者的单身假期:Just You
2018/04/08 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
致标枪运动员广播稿
2014/02/06 职场文书
离婚协议书范本
2015/01/26 职场文书