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访问纯真IP数据库的代码
May 19 Python
Python使用Socket(Https)Post登录百度的实现代码
May 18 Python
python的keyword模块用法实例分析
Jun 30 Python
Python2随机数列生成器简单实例
Sep 04 Python
Python连接phoenix的方法示例
Sep 29 Python
python logging日志模块的详解
Oct 29 Python
python http接口自动化脚本详解
Jan 02 Python
基于Python socket的端口扫描程序实例代码
Feb 09 Python
Python实现CNN的多通道输入实例
Jan 17 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
May 17 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 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
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
python IDLE 背景以及字体大小的修改方法
2019/07/12 Python
python tornado修改log输出方式
2019/11/18 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Python运行异常管理解决方案
2020/03/09 Python
pymysql模块使用简介与示例
2020/11/17 Python
Python修改DBF文件指定列
2020/12/19 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
女性时尚在线:IVRose
2019/02/23 全球购物
大学学习生活感言
2014/01/18 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
Python竟然能剪辑视频
2021/05/25 Python
Python 实现Mac 屏幕截图详解
2021/10/05 Python