• 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 npimg = 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 npimg = 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 npimg = 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 npimg = 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 npimg = 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 npimg = 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 npimg = 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 npimg = 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 npimg = cv2.imread('./image/lena.jpg')# canny
dst = cv2.Canny(img, 100, 200)cv2.imshow('img',img)
cv2.imshow('dst',dst)cv2.waitKey(0)

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

OpenCV(图像处理)-基于python-滤波器(低通、高通滤波器的使用方法)相关推荐

  1. 《OpenCv视觉之眼》Python图像处理七 :Opencv图像处理之高通滤波和低通滤波原理及构造

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  2. 数字图像处理频域滤波实现低通与高通滤波(包含matlab代码)

    低通滤波器 理想低通滤波 作用:保留频谱图中圆内低频分量,截断频谱图中圆外高频分量 函数表示: 假设频谱中心在 (M/2,N/2)处,则任意频谱成分(u,v) 到中心(原点)的距离D(u,v) 定义为 ...

  3. 低通采样定理 matlab,基于matlab的低通抽样定理仿真

    基于matlab的低通抽样定理仿真 DSP 课 程 设 计 专业: 电子信息技术工程 年级: 2011 级 不 姓名: 陈兰兰 学号: 20113015 指导教师: 刘 德 春 阿坝师专电子信息工程系 ...

  4. UAF42滤波器/低通/高通/带通 滤波器 原理图/PCB设计 调试注意事项

    UAF42滤波器/低通/高通/带通 滤波器 原理图/PCB设计 调试注意事项 目录 UAF42滤波器/低通/高通/带通 滤波器 原理图/PCB设计 调试注意事项 1.特性参数 1.1 基本特性 2.使 ...

  5. 低通采样定理 matlab,基于Matlab的低通抽样定理仿真.docx

    DSP课程设计专业: 电子信息技术工程 年级: 2011级 不姓名: 陈兰兰学号: 指导教师: 刘 德 春 阿坝师专电子信息工程系DSP课程设计专业: 电子信息技术工程 年级: 2011级 不姓名: ...

  6. python装饰器实例-基于Python 装饰器装饰类中的方法实例

    title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...

  7. (图像处理之滤波)OpenCV实现频率域的低通高斯滤波(C++)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接: https://blog.csdn.net/weixin_40647819/art ...

  8. python高通滤波_图像处理之高通滤波及低通滤波

    本文需要用到傅里叶变换的知识,如果还不了解,请点击这里 频域滤波的基本过程 如果想对图像进行滤波的话,基本的步骤如下: 使用(−1)x+y(−1)x+y(-1)^{x+y}(−1)x+y乘以原来的图像 ...

  9. OpenCV-高斯低通高通滤波器(C++)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 场景需求 做图像处理,滤波是家常便饭,今天给大家分享高斯滤波器实现. 众所周知,在频谱中,低频主 ...

最新文章

  1. iMeta期刊12名编委入选科睿唯安2021年度高被引学者
  2. 计算机主机的作用和性能指标,Cpu是什么 cpu性能指标主要有哪几个方面【详细介绍】...
  3. Numpy中的通用函数和聚合
  4. 1200兆路由器网速_如何选购路由器才能发挥宽带的网速?
  5. MATLAB产生线性等分量函数 linspace
  6. java_eclipse中添加外部动态链接库(dll文件)的三种方式
  7. mysql show命令用不了_MySQL show命令的用法
  8. 564. 寻找最近的回文数
  9. CAD填充技巧:填充图案
  10. mac端锐捷无法验证服务器,还在为mac无法用锐捷认证校园网登陆而郁闷吗?
  11. 解决microsoft store需要联网 你似乎没有联网
  12. php电子病历毕业设计,基于区块链的电子病历系统设计与实现(自制毕设)
  13. 分享一些自己的学习经验和技巧
  14. 2012第35周国内Android应用下载动态
  15. Vue中使用marked
  16. java版 我的世界 win10_我的世界win10版
  17. MySQL Win7 64位 下载、安装与配置图文教程
  18. 遭红杉资本沈南鹏​抛售650万股后,美团仍面临重大风险
  19. 对于来说服务器租用和托管哪个更划算?
  20. JavaScript——水仙花数

热门文章

  1. Java 递归 跳出死循环
  2. C# 设置label(标签)控件的背景颜色为透明
  3. WindowsMac剪贴板如何存储多条复制记录
  4. cors跨域+php配置,CORS跨域详解
  5. C/C++中算法运行时间的三种计算方式(By 虚怀若谷)
  6. Centos Stream 9 换DNF源
  7. 8月英语总结--细水长流
  8. Parcelable的用法及记录一个Parcelable遇到的坑
  9. 【一文学会文件上传】SpringBoot+form表单实现文件上传
  10. Python-基于Flask表格创建管理