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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
详解python 注释、变量、类型
Aug 10 Python
Python 移动光标位置的方法
Jan 20 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
Jul 01 Python
Django如何将URL映射到视图
Jul 29 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
Python爬虫使用代理IP的实现
Oct 27 Python
python matplotlib实现将图例放在图外
Apr 17 Python
Django获取model中的字段名和字段的verbose_name方式
May 19 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
Python3的进程和线程你了解吗
Mar 16 Python
LeetCode189轮转数组python示例
Aug 05 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
AM/FM收音机的安装与调试
2021/03/02 无线电
解析wamp5下虚拟机配置文档
2013/06/27 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
Js获取事件对象代码
2010/08/05 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
Python中的一些陷阱与技巧小结
2015/07/10 Python
Python对文件操作知识汇总
2016/05/15 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
对pyqt5之menu和action的使用详解
2019/06/20 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
python manage.py runserver流程解析
2019/11/08 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
临床医师专业个人自我评价
2014/01/08 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL