中值滤波(Median Filter),用于图像的中值滤波最早是由美国普林斯顿大学的John Wilder Tukey教授提出来的。常见的线性滤波器,用于图像处理时,有可能导致细节模糊或破坏边缘,更关键的是无法滤除脉冲干扰,而中值滤波,作为一种典型的非线性滤波器,则可以较好地解决此类问题。

中值滤波的基本工作原理是基于排序统计理论,把数字图像或数字序列中某一点的值用该点的一个邻域中各点值的中值代替,从而使周围的像素值更接近真实值,达到消除孤立噪声点的目的。实际操作中,中值滤波会选取数字图像或数字序列中像素点及其周围临近像素点(要求奇数个像素点,例如3*3,5*5等)的像素值,将这些像素值排序,然后将位于中间位置的像素值作为当前像素点的像素值,使周围的像素值接近真实值,从而消除孤立的噪声点。下图中取像素点79(红色标示),该像素及邻近像素点3*3,即绿色区域内的像素点。将这些像素点的像素值进行排序,按升序排序后得到序列值为:[68,79,86,89,93,93,93,98,102]。在该序列中,处于中心位置(也叫中心点或中值点)的值是93,以该值替换原来的像素值 79,作为操作点的新像素值。

5 57 23 52 23 59
123 20 64 34 79 66
47 19 98 93 93 26
70 63 93 79 86 175
70 98 68 89 102 199
97 87 88 43 39 120

在OpenCV中,实现中值滤波的函数是cv2.medianBlur(),其语法格式如下:

dst=cv2.medianBlur(src,ksize)

dst:返回值,中值滤波结果

src: 源图像,即需要处理的图像。可以有任意数量的通道,对各个通道独立处理

ksize:滤波核。滤波核大小是指在滤波处理过程中其邻域图像的高度和宽度,核大小必须是比1大的奇数,比如3、5、7等。

对上图进行中值滤波,核为3,结果为:

20 23 52 34 52 59
47 47 52 64 59 59
63 64 64 86 79 79
70 70 89 93 93 102
70 87 87 86 89 120
97 88 87 68 89 120

代码如下:

import cv2
im=cv2.imread("test_m.bmp",0)
im
dst=cv2.medianBlur(im,3)
dst

test_m.bmp文件,即上述原始图像:用于测试中值滤波的demo文件资源-CSDN文库

中值滤波在滤除高斯噪声、随机噪声、“椒盐”噪声及冲击噪声中表现突出。通常中值滤波中的数据排序费时较多,特别在大窗口下,需要进行大量的数据比较工作,不利于图像快速实时的处理。中值滤波算法的复杂度是O(r2logr),其中r为核的半径。当像素的可能取值是个常数时,比如对于8位图像,可以使用桶排序(Bucker sort),该排序使得算法的复杂度降低为O(r2)。但是除了小半径的情况外,这样的改进任然是不可接受的。

传统中值滤波(Standard Median Filter,SM),是通过快速排序寻找像素点集合的中值,该方法对滤波窗口形状和像素灰度级没有限制,具有更加广泛的运用范围。由算法原理可知,传统中值滤波算法的执行效率由快速排序算法的时间复杂度决定, 其基本思想是通过每次排序将像素点集合划分为相互独立的两个子集合, 其中一个子集合中所有像素值都比另一个子集合中所有像素值小, 然后分别对这两个子集合继续进行排序, 直到滤波窗口中所有像素点有序。SM算法最后选取位于序列中间位置的元素作为中值滤波的输出。

加权中值滤波(Weight Median Filter),将窗口内的每一个像素都乘上一个相应的权值,然后利用乘上权值后的值进行排序,取中值替换中心元素的灰度值即可。传统中值滤波可以看做是每个像素的权值都是1的加权中值滤波。加权中值滤波比较耗时,基本是O(r2)的复杂度,在实时性要求比较高的项目中是难以应用的。

自适应中值滤波器(Adaptive Median Filter),在噪声密度不是很大的情况下(根据报道,噪声出现的概率小于20%),使用中值滤波的效果不错。但是当噪声出现的概率比较高时,原来的中值滤波算法就不是很有效了。只有增大滤波器窗口尺寸,尽管会使图像变得模糊。使用自适应中值滤波器的目的就是,根据预设好的条件,动态地改变中值滤波器的窗口尺寸,以同时兼顾去噪声作用和保护细节的效果。

中值滤波(资料整理,持续更新)相关推荐

  1. 前端资料整理--持续更新中

    前端网站 1.http://www.wufangbo.com/   前端开发-武方博   包含有前端相关的各种文章.资源.开发工具等 2.http://www.w3cfuns.com/   前端网-云 ...

  2. Java自学视频整理(持续更新中...)

    1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播客) 张孝祥2010年贺岁视频:Java高新技术 ...

  3. FPGA verilog HDL实现中值滤波

    FPGA verilog HDL实现中值滤波 今天给大侠简单带来FPGA verilog HDL实现中值滤波,话不多说,上货. 一.实现步骤: 1.查看了中值滤波实现相关的网站和paper: 2.按照 ...

  4. [Python图像处理] 四十一.Python图像平滑万字详解(均值滤波、方框滤波、高斯滤波、中值滤波、双边滤波)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  5. 【OpenCV 例程200篇】58. 非线性滤波—中值滤波

    [OpenCV 例程200篇]58. 非线性滤波-中值滤波 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 图像滤波是 ...

  6. Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波

    作者 | 杨秀璋,责编 | 夕颜 题图  | 视觉中国 出品 | CSDN博客 本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波.全文均是 ...

  7. 【OpenCV 4开发详解】中值滤波

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  8. 使用Python对图像进行中值滤波

    首先解答上一篇文章Python使用标准库subprocess调用外部程序中的问题,该题答案为['1', '2', '3', '4'],在正则表达式中,问号(?)有两种含义,一种是表示前面的字符或模式可 ...

  9. 直方图实现快速中值滤波opencv

    中值滤波能够有效去除图像中的异常点,具有去除图像噪声的作用.传统中值滤波的算法一般都是在图像中建立窗口,然后对窗口内的所有像素值进行排序,选择排序后的中间值作为窗口中心像素滤波后的值.由于这个做法在每 ...

最新文章

  1. Linuxshell之高级Shell脚本编程-创建函数
  2. 使用redis4.0.1和redis-cluster搭建集群并编写重启shell脚本
  3. 超级封装RecyclerView的适配器Adapter 只需二三十行代码
  4. 【技术解决方案】开发工具源码安装包大全
  5. 人民币 小写金额转换为大写金额
  6. java 数据库操作教程_数据库基本操作:增删改查及联表操作
  7. 华为机试HJ73:计算日期到天数转换
  8. C++产生指定范围内的随机数/随机小数
  9. Android6.0指纹识别开发
  10. Android 网络学习之获取服务器的图片
  11. 供应商TOP10榜单!车载前装激光雷达进入规模化上车关键期
  12. 搭配实例的常见cmd命令+最简单bat病毒编写
  13. stm32 火灾自动报警及联动控制源码_火灾自动报警与消防联动控制系统
  14. android+锁屏录像,快速录像机(锁屏录像)
  15. 下列python语句的输出结果是_下列Python语句的输出结果是 __________ 。
  16. 面试中关于MySQL十连问
  17. 「AppleScript」循环遍历
  18. 网页引用优酷视频并添加封面自动播放
  19. Java校验框架使用@Valid、@Validated、OVAL+Groovy
  20. GM65条形码二维码扫描识别模块与STM32学习

热门文章

  1. 基于FaceNet的实时人脸识别训练
  2. case/casez/casex 区别与综合
  3. Excel2013 基本用法(上)
  4. 从零开始用人工智能预测股票(三、初步实现)
  5. twitter如何以图搜图_没有完整图时,如何使用图深度学习?你需要了解流形学习2.0版本...
  6. 卓有成效的管理者|木深读书笔记
  7. 制作Win10系统安装U盘,安装纯净版Win10的通用教程
  8. Cannot create an instance of class AndroidViewModel (androidx ViewModelProvider AndroidViewModel)
  9. ffmpeg运行在服务器上,如何在脱离流媒体服务器的时候使用ffmpeg 监测.m3u8直播视频流的状态?...
  10. IM群聊头像九宫格实现方式