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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

卷积运算大致可以分成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() #显示图像
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

fftconvolve只是用fft算法(快速傅立叶变换)实现的卷积,其结果应当和普通的convolve一样。

*二维图像卷积运算

>>> 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() #显示绘制好的画布
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

二维的卷积需要用上面的signal.convolve2d()。 
之所以要对卷积后的图像数组grad作np.absolute()求绝对值运算是因为灰度图像的值都是正值,没有负的,为了防止出现负值所以才这样做。 
 
二维的卷积运算还有一种函数,是signal.sepfir2d(),它可以传入三个参数,后两个参数指定行和列的卷积和(两个方向上的卷积是可以不同的,分别指定卷积和序列)。

python conv2d scipy卷积运算的更多相关文章

  1. python Scipy积分运算大全(integrate模块——一重、二重及三重积分)

    python中Scipy模块求取积分的方法: SciPy下实现求函数的积分的函数的基本使用,积分,高等数学里有大量的讲述,基本意思就是求曲线下面积之和. 其中rn可认为是偏差,一般可以忽略不计,wi可 ...

  2. python(5):scipy之numpy介绍

    python 的scipy 下面的三大库: numpy, matplotlib, pandas scipy 下面还有linalg 等 scipy 中的数据结构主要有三种: ndarray(n维数组), ...

  3. python中的张量运算(tensor)

    1,首先比较二者的参数部分:这就是处理0阶张量和1阶张量的区别 np.max:(a, axis=None, out=None, keepdims=False) 求序列的最值 最少接收一个参数 axis ...

  4. 卷积运算的本质,以tensorflow中VALID卷积方式为例。

    卷积运算在数学上是做矩阵点积,这样可以调整每个像素上的BGR值或HSV值来形成不同的特征.从代码上看,每次卷积核扫描完一个通道是做了一次四重循环.下面以VALID卷积方式为例进行解释. 下面是pyth ...

  5. LeNet - Python中的卷积神经网络

    本教程将  主要面向代码,  旨在帮助您 深入学习和卷积神经网络.由于这个意图,我  不会花很多时间讨论激活功能,池层或密集/完全连接的层 - 将来会有  很多教程在PyImageSearch博客上将 ...

  6. iOS中的图像处理(二)——卷积运算

    关于图像处理中的卷积运算,这里有两份简明扼要的介绍:文一,文二. 其中,可能的一种卷积运算代码如下: - (UIImage*)applyConvolution:(NSArray*)kernel { C ...

  7. Python对象类型及其运算

    Python对象类型及其运算 基本要点: 程序中储存的所有数据都是对象(可变对象:值可以修改 不可变对象:值不可修改) 每个对象都有一个身份.一个类型.一个值 例: >>> a1 = ...

  8. im2col:将卷积运算转为矩阵相乘

    目录 im2col实现 优缺点分析 参考 博客:blog.shinelee.me | 博客园 | CSDN im2col实现 如何将卷积运算转为矩阵相乘?直接看下面这张图,以下图片来自论文High P ...

  9. MATLAB卷积运算(conv、conv2、convn)解释

    1 conv(向量卷积运算) 所谓两个向量卷积,说白了就是多项式乘法.比如:p=[1 2 3],q=[1 1]是两个向量,p和q的卷积如下:把p的元素作为一个多项式的系数,多项式按升幂(或降幂)排列, ...

随机推荐

  1. 使用 DITA-OT 发布一份 CouchBase Server 手册

    最近需要学习 CouchBase Server.而 CouchBase Server 官方网站访问速度非常慢,所以尝试使用 DITA-OT 发布一份本地文档.(其实 CouchBase Server ...

  2. 关于eclipse启动报错,an error has occurred.see the log file

    网上搜索各种方法,得知为由于Eclipse卡死或强制关闭之后会出现的情况 提供解决方法一: 查看log文件,发现有这样的信息: !MESSAGE The workspace exited with u ...

  3. [mariadb]Windows Mariadb 10.2安装过程

    在学习Flask的过程中,碰到SQLAlchemy不支持Mariadb 10.2.9以前版本的问题,于是升级Mariadb到10.2.10. 升级过程中,我只能说,Mariadb及Mysql的文档结构 ...

  4. 基于AT89C51单片机烟雾传感器

    #include <reg51.h> #include <stdio.h> #define uchar unsigned char //宏定义无符号字符型 #define ui ...

  5. 最优贸易 [NOIP 2009]

    Description C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向 ...

  6. 判断浏览器的类型$_SERVER['HTTP_USER_AGENT']和语言$_SERVER['HTTP_ACCEPT_LANGUAGE']

    判断浏览器类型: $_SERVER["HTTP_USER_AGENT"] 判断浏览器类型的具体程序如下: <?php if(strpos($_SERVER["HTT ...

  7. 最长递增子序列( LIS)

    LIS LIS的优化说白了其实是贪心算法,比如说让你求一个最长上升子序列把,一起走一遍. 比如说(4, 2, 3, 1, 2,3,5)这个序列,求他的最长上升子序列,那么来看,如果求最长的上升序列,那 ...

  8. django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  9. 【jvm】windows下查看java进程下多线程的相关信息

    微软工具:Process Explorer v15.3 下载地址:http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx 参考教程: ...

  10. 最课程阶段大作业06:U度节能平台控制系统

    除了互联网项目,当今社会还有一个概念非常流行,那就是:物联网.什么是物联网?物联网是通过传感设备,按约定的协议,把任意物品与互联网相连接,进行信息交换和通信,以实现智能化识别.定位.跟踪.监控和管理的 ...