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 21 Python
Python 中 Meta Classes详解
Feb 13 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
python实现Windows电脑定时关机
Jun 20 Python
对Python中数组的几种使用方法总结
Jun 28 Python
python cs架构实现简单文件传输
Mar 20 Python
python的中异常处理机制
Aug 30 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
django的autoreload机制实现
Jun 03 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
Oct 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
判断脚本加载是否完成的方法
2009/05/26 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
python中的字典使用分享
2016/07/31 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
毕业生文员求职信
2013/11/03 职场文书
门诊挂号室室长岗位职责
2013/11/27 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
中层竞聘演讲稿
2014/01/09 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
教师党员自我评价2015
2015/03/04 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
python3实现常见的排序算法(示例代码)
2021/07/04 Python