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

相关文章
|
3月前
|
运维 安全 网络安全
Windows Server 2019拨号“找不到设备”?Error 1058解决指南
Windows Server 2019拨号报错1058?别急!这不是硬件故障,而是关键服务被禁用。通过“服务依存关系”排查,依次启动“安全套接字隧道协议”“远程接入连接管理”和“路由与远程访问”服务,仅需4步即可恢复PPPoE或VPN拨号功能,轻松解决网络中断问题。
323 1
|
1月前
|
弹性计算 运维 安全
ECS还是轻量应用服务器,有什么区别?看完评测你就知道了!
阿里云ECS与轻量应用服务器有何区别?ECS适合企业级高负载场景,功能全面、灵活扩展;轻量服务器基于ECS优化,门槛低、易运维,适合个人开发者搭建博客、测试环境等轻量应用。从镜像、网络、计费到使用限制,本文全面对比二者差异,助你按需选择。
|
7月前
|
网络协议 网络安全 网络虚拟化
路由器详细讲解
路由器是连接不同网络并转发数据包的关键设备,工作在OSI模型第三层(网络层)。它通过路由表选择最佳路径,支持数据转发、NAT转换、防火墙保护等功能。路由器分为家用、商用和工业级,各有针对性的性能与功能。其配置包括硬件连接、登录管理界面及网络、无线、安全等设置,选购时需关注处理能力、无线速率、端口速率和功能需求等关键指标。
1040 22
|
3月前
|
机器学习/深度学习 人工智能 资源调度
Phi-4 技术报告深度解读——论文阅读
微软Phi-4技术报告揭示了140亿参数小模型如何通过高质量合成数据与创新训练方法,在数学推理、代码生成等任务上超越千亿参数大模型。核心突破在于数据质量优于规模扩张,结合关键Token搜索(PTS)算法优化DPO训练,显著提升推理能力并降低幻觉。
478 1
|
3月前
|
机器学习/深度学习 监控 安全
基于YOLOv8的跨越围栏/翻墙行为识别项目|开箱即用全流程源码
本项目基于YOLOv8目标检测模型和PyQt5图形界面工具,成功实现了翻越攀爬围栏和翻墙行为的智能检测系统。通过集成YOLOv8的高效目标检测能力和PyQt5的易用界面,本系统能够准确识别不同场景中的翻越行为,并提供多种输入方式(图片、视频、文件夹、摄像头)进行实时检测,满足多种应用需求。
|
2月前
|
人工智能 搜索推荐 Cloud Native
拔俗AI助教系统:教师的"超级教学秘书",让每堂课都精准高效
备课到深夜、批改作业如山?阿里云原生AI助教系统,化身“超级教学秘书”,智能备课、实时学情分析、自动批改、精准辅导,为教师减负增效。让课堂从经验驱动转向数据驱动,每位学生都被看见,教育更有温度。
|
3月前
|
传感器 运维 监控
企业微信iPad协议”凌晨回声:一条被@的消息如何阻止了 P0 故障
凌晨告警,运维失联,仅凭一台旧iPad和企业微信测试号,通过私有协议实时捕获@消息,抢先3分钟触发回滚,恢复订单接口。边缘通道成应急“传感器”,9分钟抢回系统稳定,守住绩效。技术有时在主线之外。
306 0
|
4月前
|
C++
什么是单项式
单项式是代数式中的一种
|
5月前
|
JSON Shell Linux
抖音ip地址怎么换成外省的?
抖音IP地址跨省修改的技术实现方案 1. 基本原理与前置知识
|
9月前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
485 6

热门文章

最新文章