文章目录

  • 关于滤波和模糊:
    • 均值滤波
    • 方框滤波
    • 高斯滤波
    • 中值滤波
    • 双边滤波
  • 总结

关于滤波和模糊:

  • 它们都属于卷积,不同滤波方法之间只是卷积核不同(对线性滤波而言)
  • 低通滤波器是模糊,高通滤波器是锐化

低通滤波器就是允许低频信号通过,在图像中边缘和噪点都相当于高频部分,所以低通滤波器用于去除噪点、平滑和模糊图像。高通滤波器则反之,用来增强图像边缘,进行锐化处理。

常见噪声有椒盐噪声和高斯噪声,椒盐噪声可以理解为斑点,随机出现在图像中的黑点或白>>点;高斯噪声可以理解为拍摄图片时由于光照等原因造成的噪声。

均值滤波

均值滤波是一种最简单的滤波处理,它取的是卷积核区域内元素的均值,用cv2.blur()实现,如3×3的卷积核:

kernel=19[123456789](3)kernel =\frac{1}{9} \left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right] \tag{3} kernel=91​⎣⎡​147​258​369​⎦⎤​(3)

import cv2
img = cv2.imread('lena.jpg')
blur = cv2.blur(img, (3, 3))  # 均值模糊
cv2.imshow("", blur)
cv2.waitKey(0)

方框滤波

方框滤波跟均值滤波很像,如3×3的滤波核如下:
kernel=α[123456789](3)kernel =\alpha \left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right] \tag{3} kernel=α⎣⎡​147​258​369​⎦⎤​(3)

用cv2.boxFilter()函数实现,当可选参数normalize为True的时候,方框滤波就是均值滤波,上式中的a就等于1/9;normalize为False的时候,a=1,相当于求区域内的像素和。

import cv2img = cv2.imread('lena.jpg')
# 前面的均值滤波也可以用方框滤波实现:normalize=True
blur = cv2.boxFilter(img, -1, (3, 3), normalize=False)cv2.imshow("---", blur)
cv2.waitKey(0)

高斯滤波

前面两种滤波方式,卷积核内的每个值都一样,也就是说图像区域中每个像素的权重也就一样。高斯滤波的卷积核权重并不相同:中间像素点权重最高,越远离中心的像素权重越小

显然这种处理元素间权值的方式更加合理一些。图像是2维的,所以我们需要使用2维的高斯函数,比如OpenCV中默认的3×3的高斯卷积核

kernel=[0.06250.1250.06250.1250.250.1250.06250.1250.0625](3)kernel = \left[ \begin{matrix} 0.0625 & 0.125 & 0.0625 \\ 0.125 & 0.25 &0.125 \\ 0.0625 & 0.125& 0.0625 \end{matrix} \right] \tag{3} kernel=⎣⎡​0.06250.1250.0625​0.1250.250.125​0.06250.1250.0625​⎦⎤​(3)


OpenCV中对应函数为cv2.GaussianBlur(src,ksize,sigmaX):

img = cv2.imread('gaussian_noise.bmp')
# 均值滤波vs高斯滤波
blur = cv2.blur(img, (5, 5))  # 均值滤波
gaussian = cv2.GaussianBlur(img, (5, 5), 1)  # 高斯滤波

参数3 σx值越大,模糊效果越明显。高斯滤波相比均值滤波效率要慢,但可以有效消除高斯噪声,能保留更多的图像细节,所以经常被称为最有用的滤波器。均值滤波与高斯滤波的对比结果如下(均值滤波丢失的细节更多):

中值滤波

中值又叫中位数,是所有数排序后取中间的值。中值滤波就是用区域内的中值来代替本像素值,所以那种孤立的斑点,如0或255很容易消除掉,适用于去除椒盐噪声和斑点噪声。中值是一种非线性操作,效率相比前面几种线性滤波要慢。

img = cv2.imread('salt_noise.bmp', 0)
# 均值滤波vs中值滤波
blur = cv2.blur(img, (5, 5))  # 均值滤波
median = cv2.medianBlur(img, 5)  # 中值滤波

双边滤波

模糊操作基本都会损失掉图像细节信息,尤其前面介绍的线性滤波器,图像的边缘信息很难保留下来。然而,边缘(edge)信息是图像中很重要的一个特征,所以这才有了双边滤波。用cv2.bilateralFilter()函数实现:

mg = cv2.imread('lena.jpg')
# 双边滤波vs高斯滤波
gau = cv2.GaussianBlur(img, (5, 5), 0)  # 高斯滤波
blur = cv2.bilateralFilter(img, 9, 75, 75)  # 双边滤波

总结

  • 在不知道用什么滤波器好的时候,优先高斯滤波cv2.GaussianBlur(),然后均值滤波cv2.blur()。

  • 常见噪声有椒盐噪声和高斯噪声,椒盐噪声可以理解为斑点,随机出现在图像中的黑点或白点

  • 高斯噪声可以理解为拍摄图片时由于光照等原因造成的噪声。

  • 斑点和椒盐噪声优先使用中值滤波cv2.medianBlur()。

  • 要去除噪点的同时尽可能保留更多的边缘信息,使用双边滤波cv2.bilateralFilter()。

  • 线性滤波(速度相对快):

    • 1.方框滤波:模糊图像
    • 2.均值滤波:模糊图像
  • -3.高斯滤波:信号的平滑处理,去除符合正太分布的噪声

  • 非线性滤波(速度相对慢):

    • 1.中值滤波:去除椒盐噪声
    • 2.双边滤波:保边去噪

(ง •_•)ง[Python3 OpenCV4]10.平滑图像相关推荐

  1. (ง •_•)ง[Python3 OpenCV4]4.颜色转换

    文章目录 RGB HSV HSL 接口文档 颜色空间转换 视频中特定颜色物体追踪 小结 RGB RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红.绿.蓝三盏灯,当它们的光相互叠合 ...

  2. 第4章 Python 数字图像处理(DIP) - 频率域滤波10 - 使用低通频率域滤波器平滑图像 - 理想、高斯、巴特沃斯低通滤波器

    目录 使用低通频率域滤波器平滑图像 理想低通滤波器(ILPF) 高斯低通滤波器(GLPF) 巴特沃斯低通滤波器 低通滤波的例子 使用低通频率域滤波器平滑图像 理想低通滤波器(ILPF) 在以原点为中心 ...

  3. OpenCV 中的图像处理 004_平滑图像

    本文主要内容来自于 OpenCV-Python 教程 的 OpenCV 中的图像处理 部分,这部分的全部主要内容如下: 改变色彩空间 学习在不同色彩空间之间改变图像.另外学习跟踪视频中的彩色对象. 图 ...

  4. c语言实现图像拼接程序,opencv2实现10张图像上下左右拼接融合分享!

    本文实例为大家分享了opencv2实现多张图像上下左右拼接融合的具体代码,供大家参考,具体内容如下 在前面的"opencv2两张图像拼接融合_基于SURF特征提取"博文中,实现了两 ...

  5. python识别几何图形拼成的图案_自动驾驶汽车视觉- 图像特征提取与匹配技术

    Feature detection and matching Email: williamhyin@outlook.com 特征提取和匹配是许多计算机视觉应用中的一个重要任务,广泛运用在运动结构.图像 ...

  6. 数字图像处理笔记(七):频域低通滤波平滑图像

    1 - 傅里叶变换 在前面我们对空间滤波做了重点的研究,现在我们来介绍一下涉及频率域中的各种滤波技术.图像从空间域转换到频率域使用的是二维傅里叶变换,一个像素为M*N的图像f(x,y)进行傅里叶变换得 ...

  7. 神经网络python分类识别图片_教现有的神经网络图像模型识别新的图像类别

    如何用最小代价重新训练Google Inception V3神经网络模型,以用于新的分类 郑灵翔 2017.06.03 运行本文的代码要求已安装TensorFlow,若没安装的请参考TensorFlo ...

  8. Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建

    Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...

  9. 基于OpenCV平滑图像

    基于OpenCV平滑图像也就是图像模糊,本博文介绍使用OpenCV的不同函数通过线性滤波进行图像平滑. cv::blur cv::GaussianBlur (高斯模糊) cv::medianBlur ...

最新文章

  1. [JS][C++]两题斐波那契数列:上台阶、triangle
  2. Sql server 2005带来的分页便利
  3. Git使用汇总之git checkout -- <file>的真正用法
  4. php入门速成(2),PHP入门速成(1)
  5. 即时通讯开发(逐行、隔行扫描)
  6. mac上的mongodb安装与使用的踩坑记
  7. spring5源码-aop
  8. linux 下ftp的上传与下载
  9. hbase的学习逻辑_HBase-1.0.1学习笔记(二)HBase数据模型
  10. 合工大计算机与信息学院保研,合肥工业大学计算机与信息学院(专业学位)计算机技术保研细则...
  11. 《人是如何学习的》的读后感范文4000字
  12. html俄罗斯方块实验步骤,html俄罗斯方块
  13. POJ - Art Gallery(半平面交)
  14. 六个免费网站状态监控服务
  15. 【无标题】SEO优化
  16. 学习Android启动初始化 App StartUp
  17. html table表格设置滚动条
  18. 企业微信聊天记录如何备份?企业微信如何导出聊天记录?
  19. 基于Linux中的通讯录管理系统(C语言+双向循环链表+MySQL)
  20. Python文本挖掘:词云图

热门文章

  1. Jupyter notebook打开E盘文件夹
  2. mdk工程的批量操作文件
  3. QTP中的Action有什么作用?有几种?
  4. mycafe目前服务器正在维护,【图片】咖啡厅全剧情记录(修正重发)【mycafe吧】_百度贴吧...
  5. 曾经风光无限的铁饭碗没了...网友评论:996卷走了955的他们...
  6. ACM-ICPC 2018 南京赛区网络预赛 I Skr (马拉车+hash去重)或(回文树)
  7. PHP微信扫描登陆(模拟微信企业号平台登陆)
  8. 怎么正确理解「辩证法」
  9. linux fprintf sprintf 函数
  10. CSS------美化网页