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 字典(Dictionary)操作详解
Mar 11 Python
Python下线程之间的共享和释放示例
May 04 Python
Python3中的2to3转换工具使用示例
Jun 12 Python
Python如何快速实现分布式任务
Jul 06 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
Python和Sublime整合过程图示
Dec 25 Python
django为Form生成的label标签添加class方式
May 20 Python
使用pytorch实现论文中的unet网络
Jun 24 Python
详解python对象之间的交互
Sep 29 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
js 函数性能比较方法
2020/08/24 Javascript
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
Linux中如何用命令创建目录
2016/12/02 面试题
大专毕业生自我评价分享
2013/11/10 职场文书
遥感技术与仪器求职信
2014/02/22 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
首都博物馆观后感
2015/06/05 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
Python中第三方库Faker的使用详解
2022/04/02 Python