OpenCV(图像处理)-基于Oython-滤波器(低通、高通滤波器的使用方法)

news2024/11/24 12:09:31

在这里插入图片描述

  • 1.概念介绍
  • 2. 图像卷积
    • filter2D()
  • 3. 低通滤波器
    • 3.1 方盒滤波和均值滤波
      • boxFilter()
      • blur()
    • 3.2 高斯滤波(高斯噪音)
    • 3.3 中值滤波(胡椒噪音)
    • 3.4 双边滤波
  • 4. 高通滤波器
    • 4.1Sobel(索贝尔)(高斯)
  • 4.2 Scharr(沙尔)
  • 4.3 Laplacian(拉普拉斯)
  • 4.4 Canny

1.概念介绍

低通滤波:低通滤波可以去除图像的噪音或平滑图像。
高通滤波:可以帮助查找图像的边缘。
噪音:即对一幅图像的产生负面效果,过暗或过亮的部分,一幅图像中,低于或高于某个像素点的值,都可以认为是噪音。


卷积核:即用来滤波的矩阵,卷积核一般为奇数,如3×3、5×5、7×7等;
锚点:卷积核最中间的坐标点。
卷积核越大,卷积的效果越好,但是计算量随之也会增大。
边界扩充:当卷积核大于1,并且不进行边界扩充,输出尺寸相应缩小、当卷积核一标准方式进行边界扩充,则输出的空间尺寸与输入相等。
在这里插入图片描述
下面的为原图像,上面为输出图像,灰色为卷积核,虚线为图像扩充

2. 图像卷积

filter2D()

dst = cv2.filter2D(src, ddepth, kernel, anchor, delta, borderType)
src:原图像
ddepth:输出图像的尺寸,默认为-1
kernel:卷积核(是一个矩阵)
anchor:锚点,默认随卷积核变化
delta:卷积后加一个值,默认为0
borderType:有映射类型,加一个黑边,默认不设置

kernel:是一个矩阵
在这里插入图片描述

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')

# 创建一个5*5的卷积核
kernel = np.ones((5, 5), np.float32) / 25
img2 = cv2.filter2D(img, -1, kernel)

# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)

cv2.waitKey(0)

经过图像处理后,看着变模糊了,更平滑了
在这里插入图片描述

3. 低通滤波器

filter2D接口需要我们自己定义卷积核,如何设置一个适合的卷积核,也成为了一个难题,为此OpenCV提供了一系列的滤波器,每个滤波器都有自己的专用卷积核,这样d大大减轻了使用人员的负担。

3.1 方盒滤波和均值滤波

boxFilter()

dst = cv2.boxFilter(src, ddepth, ksize , anchor, normalize, borderType)
src:输入图像
ddepth:输出图像的尺寸,默认为-1
kernel:卷积核大小(x, y)
anchor:锚点,默认随卷积核变化
normalize:布尔类型默认为True;True:a为1/W*H(均值滤波),false:a=1
borderType:有映射类型,加一个黑边,默认不设置在这里插入图片描述

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')

# 方盒滤波(当为True时)变成均值滤波,当为False时,就只加和不变化,超过255的结果设置为255
img2 = cv2.boxFilter(img, -1, (5, 5), normalize=True)
img3 = cv2.boxFilter(img, -1, (5, 5), normalize=False)
# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)

cv2.waitKey(0)

在这里插入图片描述

blur()

方盒滤波的参数为True时,就是均值滤波,所以这个API用的不多。
dst = cv2.blur(scr, ksize, anchor, borderType)
scr:源图像
kernel:卷积核大小(x,y)
anchor:锚点
borderType:有映射类型,加一个黑边,默认不设置

3.2 高斯滤波(高斯噪音)

适用于有高斯噪点的图片
dst = cv2.GaussianBlur(img, ksize, sigmaX, sigmaY, …)
img:输入的图像
ksize:卷积核大小
sigmaX:表示高斯核函数在X方向的的标准偏差。
sigmaY:表示高斯核函数在Y方向的的标准偏差。
一般只需要看前三个参数

在这里插入图片描述

import cv2
import numpy as np

img = cv2.imread('./image/Gaussian.png')

# 高斯去噪
img2 = cv2.GaussianBlur(img, (3, 3), 0)

# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)

cv2.waitKey(0)

在这里插入图片描述

3.3 中值滤波(胡椒噪音)

对胡椒噪音去噪明显,取中间的值作为卷积结果
dst = cv2.medianBlur(img, ksize)
img:输入图像
ksize:卷积核大小一个数字

import cv2
import numpy as np

img = cv2.imread('./image/median.png')

# 胡椒噪声
img2 = cv2.medianBlur(img, 5)

# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)

cv2.waitKey(0)

3.4 双边滤波

双边滤波的主要应用场景是视频美颜
cv2.bilateralFilter(img, d, sigmaColor, sigmaSpace, …)
img:输入图像
d:直径,与卷积核中心点的距离,一般取5
sigmaColor:颜色空间滤波器的sigma值。这个参数的值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
sigmaSpace:sigmaSpace坐标空间中滤波器的sigma值,坐标空间的标注方差。他的数值越大,意味着越远的像素会相互影响,从而使更大的区域足够相似的颜色获取相同的颜色。当d>0,d指定了邻域大小且与sigmaSpace无关。否则,d正比于sigmaSpace。

双边滤波的作用::图像去噪保边,对相关分析的结果有较大的影响,对于裂缝比较强,噪声比较少的图像来说,可以将去噪的程度放大,对以后的相关分析的结果就会有更少的噪声。对于噪声不是很集中的图像,并有较多细节的图像,增加保边的效果,让相关分析及后续进行进一步的结构处理,去噪。

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')


# 双边滤波
img2 = cv2.bilateralFilter(img, 5, 20, 50)

# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)

cv2.waitKey(0)

在这里插入图片描述

4. 高通滤波器

允许高于某个值的通过而阻断低于该值的滤波器。主要是有保留边缘的功能。常见的高通滤波器有Sobel(索贝尔)、Scharr(沙尔)、Laplacian(拉普拉斯)。

4.1Sobel(索贝尔)(高斯)

只能一次在x方向上或者y方向上求导,然后把结果相加。
dst1 = cv2.Sobel(src, ddepth, dx, dy, ksize = 3, scale = 1, delta = 0, borderType = BORDER_DEFAULT )
src:输入原图像
ddepth:位深,默认为-1
dx,dy:只能选择一个方向上要么0、1,要么1、0
ksize:卷积核大小,默认为3,当-1时为沙尔
scale:缩放大小,一般就用默认值
delta:偏移量,一般就用默认值
borderType:边界扩充类型,一般就用默认值

可以改变卷积核大小

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')


# 索贝尔
dx = cv2.Sobel(img, -1, 1, 0, ksize=3)
dy = cv2.Sobel(img, -1, 0, 1, ksize=3)

# dst = dx+dy
dst = cv2.add(dx,dy)
# 展示图像
cv2.imshow('img', img)
cv2.imshow('dx', dx)
cv2.imshow('dy', dy)
cv2.imshow('dst', dst)

cv2.waitKey(0)

在这里插入图片描述
一幅图的边缘被很好的分割出来。

4.2 Scharr(沙尔)

与Sobel类似,只不过使用的ksize值不同,Scharr不能改变卷积核的大小,只能是3*3的。同样只能求一个方向上的边缘。

cv2.Scharr(src, ddepth, dx, dy, scale = 1, delta = 0, borderType = BORDER_DEFAULT).
src:输入原图像
ddepth:位深,默认为-1
dx,dy:只能选择一个方向上要么0、1,要么1、0
scale:缩放大小,一般就用默认值
delta:偏移量,一般就用默认值
borderType:边界扩充类型,一般就用默认值

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')


# # 索贝尔,当ksize=-1时,就是沙尔
# dx = cv2.Sobel(img, -1, 1, 0, ksize=-1)
# dy = cv2.Sobel(img, -1, 0, 1, ksize=-1)

dx = cv2.Scharr(img, -1, 1, 0)
dy = cv2.Scharr(img, -1, 0, 1)

# dst = dx+dy
dst = cv2.add(dx,dy)
# 展示图像
cv2.imshow('img', img)
cv2.imshow('dx', dx)
cv2.imshow('dy', dy)
cv2.imshow('dst', dst)

cv2.waitKey(0)

在这里插入图片描述

4.3 Laplacian(拉普拉斯)

Laplacian可以同时求两个方向上的边缘,但是对噪音比较敏感,一般需要先进行去噪再调用Laplacian。

dst = cv2.Laplacian(src, ddepth, ksize = 1 ,scale = 1, borderType = BORDER_DEFAULT)
src:输入原图像
ddepth:位深,默认为-1
ksize:卷积核大小,默认为1
scale:缩放大小,一般就用默认值
delta:偏移量,一般就用默认值
borderType:边界扩充类型,一般就用默认值

在这里插入图片描述
卷积核大小为5*5的结果

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')


# # 索贝尔,当ksize=-1时,就是沙尔
# dx = cv2.Sobel(img, -1, 1, 0, ksize=-1)
# dy = cv2.Sobel(img, -1, 0, 1, ksize=-1)

# dx = cv2.Scharr(img, -1, 1, 0)
# dy = cv2.Scharr(img, -1, 0, 1)

dst = cv2.Laplacian(img, -1, ksize = 5)

# dst = dx+dy
# dst = cv2.add(dx,dy)
# 展示图像
cv2.imshow('img', img)
# cv2.imshow('dx', dx)
# cv2.imshow('dy', dy)
cv2.imshow('dst', dst)

cv2.waitKey(0)

4.4 Canny

使用5*5高斯滤波消除噪声,可以计算图像的四个方向上的边缘(0,45,90,135),取局部的最大值,多了一个阈值计算。高于阈值我们认为是边缘,低于阈值就不是边缘,显然A为边缘,如果,但是B和C介于最大值最小值之间,BC既不是边缘也是边缘,但是C与A在一条直线上,所以C也是边缘。

在这里插入图片描述

dst = cv2.Canny(img, minVal, maxVal)
img:原图像
minVal:最小阈值
maxVal:最大阈值
低于最小阈值就不是边缘,高于最大阈值是边缘。

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')


# canny
dst = cv2.Canny(img, 100, 200)

cv2.imshow('img',img)
cv2.imshow('dst',dst)

cv2.waitKey(0)

在这里插入图片描述

以上就是关于滤波器的基本介绍,详细信息还需读者去自己学习,大家有问题欢迎在评论区讨论。

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

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

相关文章

软考A计划-系统架构师-知识点汇总-下篇

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

​Agile与Scrum的比较

作者| Deepali chadokar Agile和Scrum是软件开发中经常使用的两个相关概念。Agile是一个概括性的术语,包含了一组软件开发的价值观和原则,而Scrum是Agile方法中的一个特定框架。 Agile强调协作、灵活性和适应性,以及应对变化的能力。此外&…

Vue中 echarts响应式页面变化resize()

前言 Vue项目中开发数据大屏,使用echarts图表根据不同尺寸的屏幕进行适配 BUG:当页面进行缩放时图表大小没有变化 使用到的方法: resize() 调用echarts中内置的resize函数进行自适应缩放,然后添加监控,页面销毁时删掉…

Zabbix“专家坐诊”第195期问答汇总

问题一 Q:麻烦请教一下zabbix服务器总是上报这几个告警,需要处理嘛?怎么处理? A:同步历史数据进程负载过高的话会影响到server的性能,建议增加服务器硬件配置。 Q:是需要增加哪方面的配置&…

ISO21434 威胁分析和风险评估方法(十二)

目录 一、概述 二、目标 三、资产识别 3.1 输入 3.1.1 先决条件 3.1.2 进一步支持信息 3.2 要求和建议 3.3 输出 四、威胁场景识别 4.1 输入 4.1.1 先决条件 4.1.2 进一步支持信息 4.2 要求和建议 4.3 输出 五、影响等级 5.1 输入 5.1.1 先决条件 5.1.2 进一…

制造业如何进行数字化转型?这个解决方案能帮你!

制造业如何有效实现数字化?制造业企业数字化的趋势已成必然,那么,如何进行制造业企业的数字建设成为各传统制造业企业的探索方向。 于是,我们团队在调研了数百家企业之后,形成了这套制造业数字化从0到1,从…

一文让你用上Xxl-Job 顺带了解cron表达式

文章目录 1.定时任务框架-xxljob1.1 Xxljob介绍1)xxljob概述2)XXL-JOB特性3) 整体架构4)入门资料准备 1.2 xxljob快速入门1)导入xxljob工程2)配置数据库1.初始化SQL脚本2.配置数据库环境3.业务处配置任务注册中心 3&am…

【色度学】光学基础

1. 光的本质 (1)波长不同的可见光,引起人眼的颜色感觉不同。 (2)人们观察到的颜色是物体和特有色光相结合的结果,而不是物体产生颜色的结果。 2. 光度量 【ISP】光的能量与颜色(1&#xff0…

【学术探讨】万能密码原理剖析

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 【万能密码】,顾名思义,就是…

ArcGIS提取水系并进行生态敏感性分析

1、前言 ,这篇是用ArcGIS进行水系提取,与前者的区别是上篇一般是对遥感影像进行处理,准确性较高;这篇是讲在没有遥感影像的情况下,用DEM进行水系的提取,一般与实际水系有差别,准确性较低。但是…

rm 命令的使用以及指定不删除某些文件

目录 1、删除单个文件 2、强制删除文件,无需确认 3、删除文件夹 4、删除目录下全部文件,包括文件夹 5、删除全部文件,但保留readme.txt 6、删除全部文件,保留1.txt和2.txt 7、使用find grep xargs命令来删除 8、删除全部…

把手伸向大数据平台的云原生,是如何将大数据平台迁移至K8s上的?

我们正身处数据大爆炸的时代,据IDC数据显示,仅在2022年,人类就将创造超过97ZB的数据;要知道截至2012年,人类生产的所有印刷材料的数据量为200PB,仅为2022年一年所创造数据量的50万分之一。据预测&#xff0…

目标检测数据集---工业铝片表面缺陷数据集

✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的数据集会在该…

Echarts—根据地理坐标被标注的中国地图(标记可以自定义为图片)

中国地图 实现效果图创建echartChina.vue组件使用echartChina.vue组件修改标记图标为图片 实现效果图 这是一个有阴影的,并且根据坐标点被标记的地图展示,下面我们就把实现的代码贴出来,老样子,还是开袋即食! 创建echartChina.vu…

matlab求解方程和多元函数方程组

核心函数solve 一般形式 Ssolve(eqns,vars,Name,Value) ,其中: eqns是需要求解的方程组; vars是需要求解的变量; Name-Value对用于指定求解的属性(一般用不到); S是结果,对应于v…

【MySQL高级篇笔记-主从复制(下) 】

此笔记为尚硅谷MySQL高级篇部分内容 目录 一、主从复制概述 1、如何提升数据库并发能力 2、主从复制的作用 二、主从复制的原理 1、原理剖析 2、复制的基本原则 三、一主一从架构搭建 1、准备工作 2、主机配置文件 3、从机配置文件 4、主机:建立账户并…

如何通过CRM系统进行群发邮件?

CRM客户管理软件不仅可以记录客户的信息,还可以集成电子邮箱,实现在CRM中即可管理客户邮件的功能。那么,CRM系统可以群发邮件吗?当然可以!使用Zoho CRM即可轻松实现邮件群发。 1、通过Zoho CRM群发邮件的好处 1&…

对话钉钉音视频专家冯津伟:大模型不是万能的

策划:LiveVideoStack 在音视频技术领域,ICASSP 大会是行业的风向标会议,也是语音学界从业者研究下一代技术发展的盛宴。近期,国内外各大企业陆陆续续放出论文入顶会的消息,钉钉蜂鸣鸟音频实验室 2 篇论文也登上了 ICAS…

「2024」预备研究生mem-从不同备选池选元素从相同备选池选元素-仅分推

一、从不同备选池选元素 至少错误的解体: 其他方法: 二、从相同备选池选元素-仅分推 三、练习题 至少问题

【工具篇】Maven加密Nexus用户密码

背景说明 按照DevOps三级要求,Maven工具发布Nexus帐号不能使用明文密码,需要对settings.xml文件中的password密码进行加密存储。下面就说一下具体的加密过程及配置方法。 环境说明 Maven:Apache Maven 3.6.3 Nexus:OSS 3.29.2-…