Python卷积详解

news2024/9/29 13:29:39

文章目录

    • 卷积函数
    • 对比测试
    • 卷积应用

卷积函数

python提供了多种卷积方案,相比之下,定义在ndimage中的卷积函数,在功能上比numpysignal中的卷积要稍微复杂一些,这点仅从输入参数的多少就可略窥一二

numpy.convolve(a, v, mode='full')
scipy.ndimage.convolve1d(input, weights, axis=-1, output=None, mode='reflect', cval=0.0, origin=0)

scipy.signal.convolve(in1, in2, mode='full', method='auto')
scipy.ndimage.convolve(input, weights, output=None, mode='reflect', cval=0.0, origin=0)

前两者为1维卷积函数,且ndimage可对多维数组沿着单个坐标轴进行卷积操作,后两者为多维卷积。

numpysignal中的卷积函数,其mode都有三种,用以调节卷积后的边缘特性,如果输入的两个卷积对象的维度分别是 N N N M M M,则这三种模式的输出结果为

  • full: 输出维度 N + M − 1 N+M-1 N+M1,其最后一点的信号完全不交叠,故而边缘效应明显。
  • same:输出维度 max ⁡ ( M , N ) \max(M,N) max(M,N),边缘效应仍然可见
  • valid:输出维度 ∣ M − N ∣ |M-N| MN,只返回完全交叠的区域,相当于把存在边缘效应的点都率除掉了

ndimage中的convolve针对边缘效应,对图像进行扩展,而其mode决定的就是扩展之后的填充格式,设待滤波数组为a b c d,则在不同的模式下,对边缘进行如下填充

左侧填充数据右侧填充
reflectd c b aa b c dd c b a
constantk k k ka b c dk k k k
nearesta a a aa b c dd d d d
mirrord c ba b c dc b a
wrapa b c da b c da b c d

其中,k通过参数cval设定。

这五种修改边界的方法,在scipy.ndimage的函数中十分普遍,尤其是涉及到卷积的滤波函数,堪称标配。

对比测试

接下来针对这些不同的卷积函数,做一下性能测试,用 5 × 5 5\times5 5×5的卷积模板,对 1000 × 1000 1000\times1000 1000×1000的矩阵进行卷积计算,来看一下不同实现方案的卷积,其速度如何

import numpy as np
import scipy.signal as ss
import scipy.ndimage as sn
from timeit import timeit


A = np.random.rand(1000,1000)
B = np.random.rand(5,5)

timeit(lambda : ss.convolve(A, B), number=10)
# 0.418
timeit(lambda : sn.convolve(A, B), number=10)
# 0.126

相比之下,ndimage中的卷积显然是更高效的。

接下来测试一下一维卷积的表现

A = np.random.rand(10000)
B = np.random.rand(15)

timeit(lambda : np.convolve(A, B), number=1000)
# 0.15256029999727616
timeit(lambda : ss.convolve(A, B), number=1000)
# 0.1231262000001152
timeit(lambda : sn.convolve(A, B), number=1000)
# 0.09218210000108229
timeit(lambda : sn.convolve1d(A, B), number=1000)
# 0.03915820000111125

相比之下,convolve1d不愧是写明了1d的卷积函数,速度最快,而numpy中提供的函数速度最慢。

卷积应用

卷积操作经常被作用在图像滤波以及边缘提取上,例如,通过类似下面这样的矩阵,可以将图像的纵向的边缘提取出来。

[ − 1 0 1 − 1 0 1 − 1 0 1 ] \begin{bmatrix} -1&0&1\\-1&0&1\\-1&0&1 \end{bmatrix} 111000111

下面做一个简单的测试

from scipy.misc import ascent
import matplotlib.pyplot as plt
img = ascent()
temp = np.zeros([3,3])
temp[:,0] = -1
temp[:,2] = 1

edge = sn.convolve(img, temp)

fig = plt.figure()
ax = fig.add_subplot(121)
ax.imshow(img)
ax = fig.add_subplot(122)
ax.imshow(edge)
plt.show()

效果如下,非常明显

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拥抱汽车行业新时代,移远通信着力打造“七大产品技术生态”

汽车市场和消费者的需求正在发生日新月异的变化。以往中国新能源汽车的推广,大多倚重政策补贴,而如今新能源汽车已经走过了这个阶段,开始变成消费者自愿选择。除了汽车的电动化,“智能化”是不少车型拨动消费者心弦的另一主要因素…

光学仿真小作品集

光学仿真小作品集 传播方向与 z 轴平行的二维平面波自由空间中的传输传播方向与 z 轴有一定夹角的二维平面波自由空间中的传输 本文将展示一些作者本人平时自制的光学仿真小作品。 传播方向与 z 轴平行的二维平面波自由空间中的传输 传播方向与 z 轴有一定夹角的二维平面波自由…

(九)【软件设计师】计算机系统-浮点数习题

文章目录 一、2009年下半年第3、4题二、2011年上半年第5题三、2012年下半年第3题四、2015年上半年第1题五、2015年下半年第3题六、2016年下半年第3题七、2018年上半年第1题八、2020年下半年第3题 知识点回顾 (八)【软件设计师】计算机系统—浮点数 一、…

怎么使用AS推送项目到Github上,一文解决!

废话不多说,直接发车了!在android studio上推送项目到GitHub上有个基本可以解决所有推送失败问题的步骤,如下图: 路径:File —— Setting —— Version Control —— GitHub —— 加号,添加用户 上述步骤是…

河道船舶识别检测系统 python

河道船舶识别检测系统通过ppythonYOLOv5网络模型算法技术,河道船舶识别检测系统对画面中的船只进行7*24小时实时监测,若发现存在进行违规采砂或者捕鱼立即自动抓拍触发告警。与C / C等语言相比,Python速度较慢。也就是说,Python可…

mui.ajax

mui.ajax(http:xxxxxxxxxx/login,//请求的地址{data:{},//传给服务器的数据,一般在post请求中dataType:json,//服务器返回数据的格式;type:post,//HTTP请求类型;目前仅支持post/gettimeout:5000,//设置超时时间async:true,//是否异步&#xf…

应急照明和疏散指示系统在化工厂房中的设计与产品选型

【摘 要】《消防应急照明和疏散指示系统技术标准》(GB 51309-2018)的颁布,使应急照明和疏散指示的设计理念及设计方案发生了颠覆性的改变。化工企业在进行系统设计时也有其自身的特点及问题,现根据实际案例,解析化工企业应急照明和疏散指示系…

echrts 工程项目可视化

Echarts 常用各类图表模板配置 注意: 这里主要就是基于各类图表,更多的使用 Echarts 的各类配置项; 以下代码都可以复制到 Echarts 官网,直接预览; 图标模板目录 Echarts 常用各类图表模板配置一、工程项目可视化二、…

记录-new Date() 我忍你很久了!

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 大家平时在开发的时候有没被new Date()折磨过?就是它的诸多怪异的设定让你每每用的时候,都可能不小心踩坑。造成程序意外出错,却一下子找不到问题出处,那…

受安全威胁困扰的时代的可见性和人工智能

安全漏洞和事件以惊人的规律性发生,媒体报道的大人物,只是发生的实际数量的一小部分。 就在上周,横跨澳大利亚和新西兰的主要金融服务提供商 Latitude Financial 公布了影响其 1400 万客户的网络攻击和数据泄露的详细信息。 如果我们要确保…

一致性框架设计方案

补充组件依赖 前言 对于供应链业务,一般对数据一致性要求高。且由于业务复杂,可能会存在一个业务功能触发几个异步操作的场景,且要保证相关操作同时触发或不触发。 为了降低技术设计难度、代码编写难度,特意设计最终一致性框架&a…

Vue - 实现垂直菜单分类栏目,鼠标移入后右侧出现悬浮二级菜单容器效果(完整示例源码,详细代码注释,一键复制开箱即用)

前言 网上的教程都太乱了,各种杂乱无注释代码、图片资源丢失、一堆样式代码,根本无法改造后应用到自己的项目中。 本文实现了 在 Vue / Nuxt 项目中,垂直分类菜单项,当用户鼠标移入菜单后,右侧自动出现二级分类悬浮容器盒子效果, 您可以直接复制源码,然后按照您的需求再…

pyecharts从入门到精通-地图专题BMap-世界地图和中国城市地图

文章目录 参考安装与查看pyecharts地图实现-BMap案例演示案例演示-杭州热门旅行线路图拓展-pyecharts中BMap源码 参考 官方文档:https://pyecharts.org/#/zh-cn/quickstart Bmap - Hiking_trail_in_hangzhou 安装与查看pyecharts 安装pyecharts pip install pyecharts2.0.3…

傅里叶级数FS,连续时间傅里叶变换CTFT,离散时间傅里叶变换DTFT,离散傅里叶变换DFT,推导与联系(二)

由于本文公式所占用的字符比较多,无法在一篇博客中完整发布,所以将其分为两篇博客。本篇主要介绍了离散傅里叶变换 DFT 的内容,以及相关的总结。对于前置内容,包括傅里叶级数 FS,连续时间傅里叶变换 CTFT,以…

【小程序】手动实现switch开关中带文字效果(开关左右文字相同/不同都可以)

最终效果&#xff1a; 左右文字宽度相同 左右文字宽度不同 左右长度相同 效果&#xff1a;配合wx:show切换 注意&#xff1a;左右长度相同的话可以设置合适的相同的宽度。 html&#xff1a; <view class"switch"><viewclass"switchNums {{ swi…

什么是Web1.0时代、Web2.0时代、Web3.0时代?

什么是Web1.0时代、Web2.0时代、Web3.0时代&#xff1f; 互联网的起源。1969年美国的阿帕网的出现标志着互联网的诞生&#xff0c;而1973年第一台个人电脑The Xerox Alto的出现就预示了互联网将蓬勃生长&#xff0c;随之而来的就是我们迈入了信息时代。短短几十年的发展&#x…

【服务器数据恢复】Storwize存储上的Oracle数据库数据恢复案例

服务器数据恢复环境&#xff1a; IBM Storwize某型号存储&#xff0c;共10块磁盘&#xff0c;组建了2组Mdisk加入到一个存储池中&#xff0c;创建了一个通用卷存放数据&#xff0c;存放的数据包含oracle数据库。 服务器故障&#xff1a; 存储中其中一组Mdisk有两块磁盘出现故障…

三百左右蓝牙耳机选哪个?300元左右半入耳式耳机推荐

目前TWS耳机十分火热&#xff0c;成为许多人出行、娱乐的必要工具&#xff0c;但同时许多厂商也看到了这块的市场&#xff0c;大小品牌、各种形态的耳机产品应有尽有&#xff0c;某宝随便一搜就是几万个链接&#xff0c;下面整理了几款300左右价位的耳机品牌分享给大家。 一、南…

【GPT4】微软 GPT-4 测试报告(2)多模态与跨学科的组合

欢迎关注【youcans的AGI学习笔记】原创作品&#xff0c;火热更新中 微软 GPT-4 测试报告&#xff08;1&#xff09;总体介绍 微软 GPT-4 测试报告&#xff08;2&#xff09;多模态与跨学科能力 微软 GPT-4 测试报告&#xff08;3&#xff09;编程能力 微软 GPT-4 测试报告&…

【服务器】XShell报错:应用程序无法正常启动(0xc000007b)

XShell报错&#xff1a;应用程序无法正常启动(0xc000007b) 某一天&#xff0c;Win上XShell启动时突然报错如下&#xff1a; 报错信息&#xff1a;应用程序无法正常启动(0x000007b)。请单击“确定”关闭应用程序。 卸载XShell重装后该问题仍然存在。 解决方法&#xff1a; 下…