本期主要介绍用于图像平滑处理的滤波,分别是方框滤波、均值滤波、中值滤波、高斯滤波,比较不同滤波的效果;并了解自定义滤波器进行图像处理。

完成本期内容,你可以:

  • 会使用方框滤波、均值滤波、中值滤波、高斯滤波进行图像处理

  • 掌握根据不同的图像选择合适的滤波器

若要运行案例代码,你需要有:

  • 操作系统:Ubuntu 16 以上 或者 Windows10

  • 工具软件:VScode 或者其他源码编辑器

  • 硬件环境:无特殊要求

  • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39

点击下载源码


方框滤波

OpenCV将方框滤波器封装成了boxFilter()方法。

函数原型: dst = cv2. boxFilter(src, ddepth,ksize, anchor, normalize,eborderType)
dst为输出图像。

参数描述如下:

参数 描述
src 被处理的图像
ddepth 结果图像的图像深度,可以用-1表示与原始图像相同。
ksize 滤波核大小,其格式为(高度,宽度),建议使用宽高相等的奇数边长
anchor 可选参数,滤波核的锚点
normalize 在滤波时是否进行归一化。
borderType 可选参数,边界样式,建议采用默认值

均值滤波

OpenCV将均值滤波器封装成了cv2.blur() 方法。

函数原型: dst = cv2.blur(src, ksize, anchor, borderType)

image为输出图像。

参数描述如下:

参数 描述
src 被处理的图像
ksize 滤波核大小,其格式为(高度,宽度),建议使用宽高相等的奇数边长
anchor 可选参数,滤波核的锚点
borderType 可选参数,边界样式,建议采用默认值

中值滤波

OpenCV将中值滤波器封装成了cv2.medianBlur()方法。

函数原型:dst = cv2.medianBlur(src,ksize);

参数描述如下:

参数 描述
src 被处理的图像
ksize 滤波核的边长,必须是大于1的奇数,方法会根据此边长自动创建一个正方形的滤波核。

高斯滤波

OpenCV将高斯滤波器封装成了cv2.GaussianBlur()方法。

函数原型: dst = cv2.GaussianBlur( src, ksize, sigmaX[, sigmaY[, borderType]] )
dst为返回值,表示进行高斯滤波后得到的处理结果。

参数描述如下:

参数 描述
src 需要处理的图像,即源图像
ksize 滤波核大小,其格式为(高度,宽度),建议使用宽高相等的奇数边长
sigmaX 卷积核在水平方向上(X轴方向)的标准差,其控制的是权重比例。
sigmaY 卷积核在垂直方向上(Y轴方向)的标准差。
borderType 可选参数,边界样式,建议采用默认值

自定义滤波

OpenCV中提供了cv2.filter2D()函数来实现自定义滤波器。

函数原型: dst = cv2.filter2D( src, ddepth, kernel, anchor, delta, borderType )
dst为输出图像。

参数描述如下:

参数 描述
src 被处理的图像
ddepth 结果图像的图像深度,可以用-1表示与原始图像相同
kernel 卷积核,是个单通道的数组
anchor 可选参数,滤波核的锚点
delta 可选参数,修正值
borderType 可选参数,边界样式,建议采用默认值

具体步骤

1. 创建项目结构

创建项目名为使用不同的滤波进行图像降噪,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

使用不同的滤波进行图像降噪                 # 项目名称
├── code                               # 储存代码文件
├── dataset                            # 储存数据文件

注:如项目结构已存在,无需再创建。

2. 使用不同的滤波处理图像

将图像scenery.png添加了噪声的图像sp_noise.png进行降噪处理。

scenery.png

  1. code文件夹下创建sp_noise.py文件;
  2. 导入所需的库,OpenCV、datetime;
  3. 读取dataset文件夹下的sp_noise.png图片,并进行展示,标题为sp_noise ;
  4. 分别使用均值滤波、中值滤波、高斯滤波进行图像处理,并展示结果;

步骤一:创建文件并读取图像

代码实现

# 导入OpenCV、datetime
import cv2
import datetime# 读取图像
o=cv2.imread("../dataset/sp_noise.png")
cv2.imshow("sp_noise",o)


添加噪声后的图像

步骤二:使用均值滤波处理图像

代码实现

# 使用 5*5的滤波核进行均值滤波处理
strat_t = datetime.datetime.now() # 获取当前时间
blur_img=cv2.blur(o,(5,5))
end_t = datetime.datetime.now()
t = end_t - strat_t #计算均值滤波处理所用时间
print('均值滤波处理耗时:',t)
cv2.imshow("blur_img",blur_img)

均值滤波处理耗时: 0:00:00.003000

均值滤波处理后的效果

步骤三:使用中值滤波处理图像

代码实现

# 使用 3*3的滤波核进行中值滤波处理
strat_t = datetime.datetime.now()
median_img=cv2.medianBlur(o,3)
end_t = datetime.datetime.now()
t = end_t - strat_t
print('中值滤波处理耗时:',t)
cv2.imshow("median_img",median_img)

中值滤波处理耗时: 0:00:00.000999

中值滤波处理后的效果

步骤四:使用高斯滤波处理图像

代码实现

# 使用 3*3标准差为0的滤波核进行高斯滤波处理
strat_t = datetime.datetime.now()
gaussian_img = cv2.GaussianBlur(o,(3,3),0,0)
end_t = datetime.datetime.now()
t = end_t - strat_t
print('高斯滤波处理耗时:',t)
cv2.imshow("gaussian_img",gaussian_img)

高斯滤波处理耗时:0:00:00.002001

高斯滤波处理后的效果

步骤五:关闭窗口

代码实现

cv2.waitKey()
cv2.destroyAllWindows()

5.3 结果比较

通过三种不同滤波方法对图像进行处理,中值滤波对图像的处理耗时较短,均值滤波耗时较长;但是从滤波效果来看,中值滤波效果优于其他两者;均值滤波对于噪声的处理效果略好于高斯滤波,但是对于图像的模糊更多;从综合效果出发,对于这张图像,使用中值滤波处理的效果最好。

点击下载源码

day8 - 使用不同的滤波核进行图像降噪相关推荐

  1. 自适应中值滤波用于超声图像降噪

    自适应中值滤波原理: RAMF主要通过以下两步来处理图像. 1.首先确定最大的滤波半径,然后用一个合适的半径r对图像进行滤波.计算当前滤波半径像素灰度的Imin,Imax,Imed,然后判断Imed是 ...

  2. 图像锐化一:几个常见的滤波核

    文章目录 1.滤波核 2.代码 3. 效果分析 示例1. 示例2. 图像锐化和图像平滑相对应,前者用于增强细节表现,后者一般用于降噪 在图像锐化时,往往会 1. 放大 噪声,2. 引入aritfact ...

  3. opencv进阶学习笔记5:图像模糊操作,图像锐化,边缘保留滤波EPF(图像滤镜)

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 模糊操作 方法:均值模糊,中值模 ...

  4. 卷积滤波 英文_图像的卷积(滤波)运算(二)——高斯滤波

    1.高斯滤波原理 根据数学知识,一维高斯函数可以描述为: 在图像处理中,选定X方向上长度为3的窗口,令δ=1,中心坐标为1,由上述公式,其卷积核(Xa,X,Xb)可以如下计算: Xa = exp(-1 ...

  5. 图像降噪算法——小波硬阈值滤波(下)

    图像降噪算法--小波硬阈值滤波(下) 图像降噪算法--小波硬阈值滤波(下) 1. 基本原理 2. C++代码实现 3. 结论 图像降噪算法--小波硬阈值滤波(下) 1. 基本原理 关于离散小波变换的原 ...

  6. 图像降噪算法——小波硬阈值滤波(上)

    图像降噪算法--小波硬阈值滤波(上) 图像降噪算法--小波硬阈值滤波(上) 1. 多分辨率展开 2. 尺度函数 3. 小波函数 4. 小波级数展开 5. 离散小波变换 6. 快速小波变换 7. 图像小 ...

  7. 图像降噪算法——高斯低通滤波

    图像降噪算法--高斯低通滤波 图像降噪算法--高斯低通滤波 1. 基本原理 2. C++代码实现 3. 结论 图像降噪算法--高斯低通滤波 1. 基本原理 通过离散傅里叶变换对图像进行滤波流程作非常简 ...

  8. 图像降噪算法——中值滤波/均值滤波/高斯滤波/双边滤波

    图像降噪算法--中值滤波/均值滤波/高斯滤波/双边滤波 图像降噪算法--中值滤波/均值滤波/高斯滤波/双边滤波 1. 基本原理 2. C++代码实现 3. 结论 图像降噪算法--中值滤波/均值滤波/高 ...

  9. 【youcans 的 OpenCV 例程 200 篇】112. 滤波反投影重建图像

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程 2 ...

最新文章

  1. 2018年第十届ACM四川省省赛题解(10 / 11)
  2. PowerDesigner中为Oracle添加自增id
  3. Photoshop自由变换图形大小
  4. 【动态规划】洛谷 P1282 多米诺骨牌
  5. bzoj1639[Usaco2007 Mar]Monthly Expense 月度开支*
  6. sql azure 语法_使用Azure Data Studio开发SQL Server数据库
  7. hibernate连接MySQL数据库
  8. tp5 生成二维码并与背景图合并
  9. VCL界面控件DevExpress VCL全新发布v21.1.6
  10. APP界面设计教程---手机ui高级实战案例(完整版)
  11. 计算机丢失msvc80.dll,msvcr80.dll
  12. tmall.item.add.simpleschema.get( 天猫发布商品规则获取 )
  13. 详细说明如何实现简易轮播效果
  14. 你真的分清楚子序列和全排列了吗?【建议收藏】
  15. RK3399 Qt+RTSP+FFMPEG+MPP+RGA解码
  16. 数字 整除 互质 最大公约数 最小公倍数 判断技巧
  17. Docker 环境下 Prometheus 和 Grafana 监控 Mysql
  18. 无锡会计培训——出纳要考初级会计吗?
  19. 工业相机 linux驱动软件,菲力尔FLIR-灰点Point Grey工业相机Linux Ubuntu18.04系统驱动Spinnaker-2.0.0.147-amd64/arm64...
  20. 企业网站建设的八大种类是什么?

热门文章

  1. 画原型全靠野路子?来看看规范的原型长这样
  2. 顶级管理思维-普通外包项目的生命周期
  3. AIX 系统故障之--hd5修复
  4. Aurora框架基础开发总结
  5. C语言:通讯录程序设计(多功能)
  6. 【柏拉图】在WPF中利用DevExpress控件进行柏拉图展示
  7. 关于社保卡发放进度的查询方式
  8. 你为什么应该为软件付费
  9. Mysql共享锁和排他锁
  10. Java学习笔记⑩(final关键字、内部类)