CV9 2D卷积与图像滤波

简介: 终于有一天,老板忍无可忍了,以0.5秒的间隔开始不间断的扇你的过程,这样问题就来了,第一次扇你鼓起来的包还没消肿,第二个巴掌就来了,你脸上的包就可能鼓起来两倍高,老板不断扇你,脉冲不断作用在你脸上,包鼓起的程度就在不断叠加了,这样这些效果就可以求和了,如果老板扇你的频率越来越高以至于你感受不到了时间的流逝,那么求和就可以变成积分了。这个积分(实际上是一条函数),就是卷积。

一 卷积简介


假设你的老板命令你干活,你却偷偷上班划水摸鱼,后来被老板发现,他非常气愤,扇了你一巴掌(注意,这就是输入信号,脉冲),于是你的脸上会渐渐地鼓起来一个包,你的脸就是一个系统,而鼓起来的包就是你的脸对巴掌的响应,好,这样就和信号系统建立起来意义对应的联系。下面还需要一些假设来保证论证的严谨:假定你的脸是线性时不变系统,也就是说,无论什么时候老板打你一巴掌,由于老板的力度掌控的不那么好,脸上的包一开始肿的程度也不一样(输入信号不恒定),并且假定以鼓起来的包的大小作为系统输出。好了,那么,下面可以进入核心内容——卷积了


如果你每天在摸鱼,那么老板每天都要扇你一巴掌,不过当老板打你一巴掌后,你5分钟就消肿了(包消肿程度的速度曲线假设相同),所以时间长了,你甚至就适应这种生活了……


终于有一天,老板忍无可忍了,以0.5秒的间隔开始不间断的扇你的过程,这样问题就来了,第一次扇你鼓起来的包还没消肿,第二个巴掌就来了,你脸上的包就可能鼓起来两倍高,老板不断扇你,脉冲不断作用在你脸上,包鼓起的程度就在不断叠加了,这样这些效果就可以求和了,如果老板扇你的频率越来越高以至于你感受不到了时间的流逝,那么求和就可以变成积分了。这个积分(实际上是一条函数),就是卷积。


总之,要想有卷积,每一时刻的输入信号在接下来的一段时间都要对系统有持续地影响。


765af16d015b646f.jpg


参考资料


关于卷积的简单介绍


二 2D卷积


  • 单通道卷积


1.首先定义一个滤波器(卷积核),如下图

2.然后依次从左往右,从上往下,在矩阵中移动卷积核(默认步长为1,可自定义步长

3.将滤波器中的元素与对应的矩阵上的元素相乘,最后再相加,每次滑动一个步长,就会得到一个元素

4.注意:在CV中传统的卷积操作是提前定义好的,可用来去噪,或平滑图像。在神经网络中,卷积核的参数是需要网络自己学到的


image.png


0f544a876ac8751b51dc4bdd00b81a9c.jpg


注意事项


1.卷积核的大小一般是奇数,这样的话它是按照中间的像素点中心对称的,所以卷积核一般都是33、55、7*7。有中心了,也有了半径的称呼,例如5×5大小的核的半径就是2.

2.卷积核所有的元素之和一般要等于1,这是为了原始图像的能量(亮度)守恒。如果所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,得到的图像就会变暗。如果和为0,图像不会变暗,但也会非常暗。

3.对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们直接将它们截断到0到255之间即可。


  • 多通道卷积


与本文内容无关,可当扩展学习


3292bc0377d208299409b6cc6eebde3d.jpg


2D卷积的作用


一个噪音白点周围都是黑色,通过卷积,周围像素相加求平均,可以使得该点变黑,达到去噪作用。但卷积次数多会使得图片变模糊了,所以卷积次数需要调试。


参考资料


2D卷积:单通道卷积和多通道卷积

通俗理解2D卷积


三 卷积的程序实现


OpenCV提供了一个函数cv.filter2D来将内核与图像进行卷积。例如,我们将尝试对图像进行平均滤波。5x5平均滤波器内核如下所示


image.png


保持这个内核在一个像素上,将所有低于这个内核的25个像素(因为是1)相加,取其平均值,然后用新的平均值替换中心像素。它将对图像中的所有像素继续此操作


查看下面的示例演示,


import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('homework.jpg')
kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Blurred')
plt.xticks([]),plt.yticks([])
plt.show()


np.ones()函数


功能:返回一个矩阵


输入参数:


1.矩阵的大小

2.矩阵的数据类型(例如‘ numpy . int 8 ’、‘np.float32’。默认值是‘ num py . float 64 ’)


cv2.filter2D()函数


功能:对图像进行2D卷积


输入参数:

1.图像名

2.图像的深度(-1表示跟原图像的深度一样)

3.卷积核kernel


图像深度


指像素深度中实际用于存储图像的灰度或色彩所需要的比特位数。 假定图像的像素深度为16bit,但用于表示图像的 灰度 或色彩的位数只有15位,则图像的图像深度为15。 图像深度决定了图像的每个像素可能的颜色数,或可能的灰度级数。


效果对比


1f2117fde9024c81e6898a4fc5954aa6.png

相关文章
|
机器学习/深度学习 算法 机器人
Windows anaconda python 3.9环境安装dlib
Windows anaconda python 3.9环境安装dlib
3554 0
Windows anaconda python 3.9环境安装dlib
|
14天前
|
机器学习/深度学习 人工智能 编解码
睡岗检测数据集分享(适用于YOLO系列深度学习分类检测任务)
本数据集含2000张真实监控场景图像,专为睡岗检测设计,支持YOLO等目标检测模型。涵盖多光照、多角度、多分辨率条件,标注精准(YOLO格式),含训练/验证集及配置文件,适用于安防、交通、工业等智能监控场景。(239字)
150 1
|
1月前
|
JSON Java fastjson
java工具:《jsonObject转map》
java工具:《jsonObject转map》
208 0
|
6月前
|
缓存 运维 Ubuntu
Debian系统中的定时任务利器(systemd定时器 vs cron 完全入门指南)
本文对比Linux中两大定时任务工具:经典cron与现代systemd定时器。详解两者原理、配置方法及适用场景,帮助Debian/Ubuntu用户根据需求选择更合适的方案,实现高效自动化运维。来源:https://www.vpshk.cn/
|
3月前
|
存储 NoSQL MongoDB
别再瞎选 NoSQL 了!Redis、MongoDB、ES 场景边界、底层原理与生产选型全解
本文深度解析Redis、MongoDB、Elasticsearch三大主流NoSQL的选型误区、核心定位、架构原理、适用与禁忌场景,并提供生产级对比、决策树、代码实战及避坑指南,强调“NoSQL是补充而非替代”,倡导按需选型、组合使用、避免过度设计。
517 2
|
5月前
|
Linux 开发者 iOS开发
IntelliJ IDEA 的「闪电操作」:这些 Quick 技巧让你编码快如疾风
本文详解 IntelliJ IDEA 六大高效“Quick”技巧:Quick Fix(Alt+Enter)、Quick Doc(Ctrl+Q)、Quick Evaluate(Alt+F8)、Quick Switch Scheme(Ctrl+`)、Quick Definition(Ctrl+Shift+I)及 Live Templates。助你减少鼠标操作,提升编码流畅度与思维连贯性。(239字)
470 9
|
11月前
|
人工智能 调度 项目管理
技术评审排程工具沉浸式解析:让项目协作更精准,技术评审不再成为瓶颈
技术评审是研发过程中把控质量、识别风险的重要环节,但缺乏系统排程常导致节奏混乱、沟通低效、意见落实不到位,进而引发项目延期和风险累积。本文详解技术评审排程管理的必要性、关键角色、流程节点与协作模式,并推荐实用工具与代码嵌入方法,助力团队实现高效评审、质量前置,让评审真正为交付赋能。
|
11月前
|
Serverless 索引
matlab画三维凸包
matlab画三维凸包
|
存储 SQL 关系型数据库
MySQL 存储函数及调用
本文主要介绍了MySQL存储函数及调用的方法,介绍了存储函数的示例,如何在MySQL中创建存储函数,以及介绍了MySQL中如何创建触发器,一目了然。在MySQL中,存储函数是预定义的SQL逻辑单元,可接收参数并返回单个值。创建存储函数使用`CREATE FUNCTION`语句,如示例中的`square_number`函数,它接收一个整数并返回其平方。调用存储函数就像调用普通函数一样,例如在`SELECT`语句中。存储函数可用于简化复杂逻辑,提高效率。此外,还可以通过`DROP FUNCTION`删除不再需要的函数。示例展示了不同场景下的存储函数应用,包括数字运算、字符串处理和逻辑判断。
593 2
|
监控 测试技术
slb测试会话保持功能
slb测试会话保持功能
519 6