【OpenCV 例程 300 篇】101. 自适应中值滤波器

专栏地址:『youcans 的 OpenCV 例程 300篇 - 总目录』

【第 7 章:图像复原与重建】
100. 自适应局部降噪滤波器
101. 自适应中值滤波器
102. 陷波带阻滤波器的传递函数

【youcans 的 OpenCV 例程 300 篇】101. 自适应中值滤波器


3.8 自适应中值滤波器(Adaptive median filter)

中值滤波器的窗口尺寸是固定大小不变的,不能同时兼顾去噪和保护图像的细节,在噪声的密度较小时的性能较好,当噪声概率较高时的性能就会劣化。

自适应中值滤波器根据预先设定的条件,在滤波的过程中动态改变滤波器的窗口尺寸大小;进一步地,根据条件判断当前像素是否噪声,由此决定是否用邻域中值替换当前像素。

自适应中值滤波器可以处理较大概率的脉冲噪声,平滑非脉冲噪声,尽可能保护图像细节信息,避免图像边缘的细化或者粗化。

SxySxySxy 表示中心在点 (x,y)(x,y)(x,y) 、大小为 m∗nm*nmn 的矩形子窗口(邻域),滤波器在由 SxySxySxy 定义的邻域操作。

Zmin、Zmax、ZmedZmin、Zmax、ZmedZminZmaxZmed 表示 SxySxySxy 中的最小灰度值、最大灰度值和灰度值的中值,ZxyZxyZxy 是点 (x,y)(x,y)(x,y) 的灰度值,SmaxSmaxSmax 是允许的最大窗口尺寸。

自适应中值滤波器分为两个过程:

  • Step A:

    • A1 = Zmed - Zmin
    • A2 = Zmed - Zmax
    • 如果 A1>0 且 A2<0,则跳转到 Step B;否则,增大窗口尺寸
    • 如果增大后的尺寸 ≤ Smax,则重复 A;否则,输出 Zmed
  • Step B:

    • B1 = Zxy - Zmin
    • B2 = Zxy - Zmax
    • 如果 B1>0 且 B2<0,则输出 Zxy;否则,输出 Zmed

StepA 的目的是确定当前窗口内得到的中值 Zmed 是否是噪声。如果 Zmin<Zmed<Zmax,则中值 Zmed 不是噪声,转到StepB。如果Zmin<Zxy<Zmax,则 Zxy 不是噪声,滤波器输出 Zxy。如果不满足上述条件,则判定 Zxy 是噪声,输出中值 Zmed。

如果在StepA中,Zmed 不满足条件 Zmin<Zmed<Zmax,则可判断得到的中值 Zmed 是噪声。这时要增大滤波器的窗口尺寸,在更大的范围内寻找一个非噪声点的中值。

因此,如果图像中噪声的概率较低,自适应中值滤波器可以使用较小的窗口尺寸,以提高计算速度;反之,如果噪声的概率较高,则需要增大滤波器的窗口尺寸,以改善滤波效果。


例程 9.15:自适应中值滤波器

    # # 9.15: 自适应中值滤波器 (Adaptive median filter)img = cv2.imread("../images/Fig0514a.tif", 0)  # flags=0 读取为灰度图像hImg = img.shape[0]wImg = img.shape[1]smax = 7  # 允许最大窗口尺寸m, n = smax, smaximgAriMean = cv2.boxFilter(img, -1, (m, n))  # 算术平均滤波# 边缘填充hPad = int((m-1) / 2)wPad = int((n-1) / 2)imgPad = np.pad(img.copy(), ((hPad, m-hPad-1), (wPad, n-wPad-1)), mode="edge")imgMedianFilter = np.zeros(img.shape)  # 中值滤波器imgAdaMedFilter = np.zeros(img.shape)  # 自适应中值滤波器for i in range(hPad, hPad+hImg):for j in range(wPad, wPad+wImg):# 1. 中值滤波器 (Median filter)ksize = 3k = int(ksize/2)pad = imgPad[i-k:i+k+1, j-k:j+k+1]  # 邻域 Sxy, m*nimgMedianFilter[i-hPad, j-wPad] = np.median(pad)# 2. 自适应中值滤波器 (Adaptive median filter)ksize = 3k = int(ksize/2)pad = imgPad[i-k:i+k+1, j-k:j+k+1]zxy = img[i-hPad][j-wPad]zmin = np.min(pad)zmed = np.median(pad)zmax = np.max(pad)if zmin < zmed < zmax:if zmin < zxy < zmax:imgAdaMedFilter[i-hPad, j-wPad] = zxyelse:imgAdaMedFilter[i-hPad, j-wPad] = zmedelse:while True:ksize = ksize + 2if zmin < zmed < zmax or ksize > smax:breakk = int(ksize / 2)pad = imgPad[i-k:i+k+1, j-k:j+k+1]zmed = np.median(pad)zmin = np.min(pad)zmax = np.max(pad)if zmin < zmed < zmax or ksize > smax:if zmin < zxy < zmax:imgAdaMedFilter[i-hPad, j-wPad] = zxyelse:imgAdaMedFilter[i-hPad, j-wPad] = zmedplt.figure(figsize=(9, 6))plt.subplot(131), plt.axis('off'), plt.title("Original")plt.imshow(img, cmap='gray', vmin=0, vmax=255)plt.subplot(132), plt.axis('off'), plt.title("Median filter")plt.imshow(imgMedianFilter, cmap='gray', vmin=0, vmax=255)plt.subplot(133), plt.axis('off'), plt.title("Adaptive median filter")plt.imshow(imgAdaMedFilter, cmap='gray', vmin=0, vmax=255)plt.tight_layout()plt.show()

在这里插入图片描述


(本节完)


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/122839526)
Copyright 2022 youcans, XUPT
Crated:2022-2-1


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

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

相关文章

SQL Server 2008R2安装详细教程(附安装包)

许多人都在苦恼如何安装SQL server&#xff0c;或者找不着安装包&#xff0c;那么这篇文章将带您避坑&#xff0c;解决您的烦恼 安装包如下&#xff1a; 云盘链接&#xff1a; 嗨&#xff0c;请点击我&#xff01;http://pan.baidu.com/s/1_7sQ9Eky2mGogKe4W0A_6Q 提取码&#…

Vue简单日历

使用Vue实现简单的日历。 原理分析&#xff1a; 1.获取当前时间 2.显示当前时间 3.点击增加和减少月份 4.大月和小月的天数 效果演示 初始样式&#xff08;显示现在的日期时间&#xff09; 增加一个月 在程序开始之前一定注意&#xff1a; 引入Vue.js架包 代码演示 Body…

【OpenCV 例程 300 篇】102. 陷波带阻滤波器的传递函数

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300篇 - 总目录』 【第 7 章&#xff1a;图像复原与重建】 102. 陷波带阻滤波器的传递函数 103. 陷波带阻滤波器消除周期噪声干扰 【youcans 的 OpenCV 例程 300 篇】102. 陷波带阻滤波器的传递函数 通过频率域滤波可以有效分析并…

SPSS基础操作(一):用幂指数型的权函数建立加权最小二乘回归方程

1、【分析】—【回归】—【权重估计】 2、添加因变量、自变量、权重变量&#xff0c;然后点击【确定】 可以自己该变幂的范围 3、得到的幂值&#xff0c;即m1.5 4、【转换】—【计算变量】 5、目标变量中输入w&#xff0c;填入数字表达式&#xff0c;然后点击【确定】 (提示…

【OpenCV 例程 300 篇】103. 陷波带阻滤波器消除周期噪声干扰

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300篇 - 总目录』 【第 7 章&#xff1a;图像复原与重建】 102. 陷波带阻滤波器的传递函数 103. 陷波带阻滤波器消除周期噪声干扰 【youcans 的 OpenCV 例程 200 篇】103. 陷波带阻滤波器消除周期噪声干扰 4.1 陷波滤波器&#x…

求解非线性方程f (x)= 0的MATLAB数值法指令介绍(solve、fzero的方法与实例)

一、符号方程求解 在MATLAB中&#xff0c;求解用符号表达式表示的代数方程可由函数solve实现&#xff0c;其调用格式为&#xff1a; solve(s)&#xff08;求解符号表达式s的代数方程&#xff0c;求解变量为默认变量&#xff0c;当方程右端为0时&#xff0c;方程可以不标…

【youcans 的 OpenCV 学习课】9. 频率域图像滤波(下)

专栏地址&#xff1a;『youcans 的图像处理学习课』 文章目录&#xff1a;『youcans 的图像处理学习课 - 总目录』 【youcans 的 OpenCV 学习课】9. 频率域图像滤波&#xff08;下&#xff09; 图像滤波是在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制&#xff0…

SQL语句中,创建标识列、默认值及各种约束的语法介绍

虽然创建表中字段的主外键、标识列、唯一约束、check约束等可以使用视图法创建&#xff0c;但最基本的还是应该会使用sql语句来创建这些吧&#xff0c;咱废话少说&#xff0c;直接上干货&#xff01;&#xff01;&#xff01; 标识列&#xff1a; 在创建表的字段时加上identity…

SpringBoot项目的 pom.xml第一行报错

当我们第一次创建SpringBoot项目的时候有时会发现SpringBoot项目里的pom.xml第一行报错。 对于这个报错问题&#xff0c;是由于jar包版本太高了。 错误显示 我们要修改jar包的版本 解决方案如下&#xff1a; 把 <version>2.2.1.RELEASE</version>修改为 <…

SPSS基础操作(二):用迭代法处理序列相关,并建立回归方程

1、【回归】—【线性】 2、添加自变量、因变量 3、选择【统计】&#xff0c;勾选【德滨沃森】&#xff0c;然后点继续、确定 4、得到德滨沃森的值&#xff0c;即DW0.771 5、【转换】—【计算变量】 6、添加目标变量、数字表达式&#xff0c;然后确定 注&#xff1a; 7、同样方…

【OpenCV 例程 300 篇】104. 运动模糊退化模型

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300篇 - 总目录』 【第 7 章&#xff1a;图像复原与重建】 104. 运动模糊退化模型 105. 湍流模糊退化模型 【youcans 的 OpenCV 例程 300 篇】104. 运动模糊退化模型 5.3 模型法估计退化函数 估计图像复原中所用的退化函数&…

我的第一个SpringBoot项目

创建我的第一个SpringBoot项目。 打开Eclipse右击选择new >> project 进入之后找到SpringBoot点击打开找到Spring Starter Project 修改SpringBoot的项目名称即name之后的内容 找到Web选择SpringWeb 项目就 创建好了如图所示 找到src/main/java点开再找到com.exampl…

SPSS基础操作(三):用一阶差分法处理数据,并建立回归方程

1、【回归】—【线性】 2、添加自变量、因变量 3、选择【统计】&#xff0c;勾选【德滨沃森】&#xff0c;然后点继续、确定 4、得到德滨沃森的值&#xff0c;即DW0.771 5、【转换】—【计算变量】 6、添加目标变量、数字表达式&#xff0c;然后确定 注&#xff1a; 7、同样方…

【OpenCV 例程 300 篇】105. 湍流模糊退化模型

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300篇 - 总目录』 【第 7 章&#xff1a;图像复原与重建】 104. 运动模糊退化模型 105. 湍流模糊退化模型 【youcans 的 OpenCV 例程300 篇】105. 湍流模糊退化模型 5.3 模型法估计退化函数 估计图像复原中所用的退化函数&#…

SQL Server经典查询语句练习题及答案

注意&#xff1a;在插入数据的时候&#xff0c;需要将zahowei改成中文&#xff0c;原数据是中文的&#xff0c;因为最近这个词不能过审&#xff0c;只能用拼音代替了&#xff0c;可能是那个人出了啥事吧&#xff0c;审核不通过就挺莫名其妙的 现在有一教学管理系统&#xff0…

如何创建SpringBoot项目

对于刚刚接触SpringBoot框架的人来说一切都是未知的探索&#xff0c;我们应该如何创建一个SpringBoot项目呢&#xff1f;&#xff1f;&#xff1f; 我们可以使用Eclipse来创建我们的SpringBoot项目&#xff0c;下面就给大家讲一下创建的方法。 1.打开我们的Eclipse软件&#…

【OpenCV 例程 300 篇】106. 退化图像的逆滤波

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300篇 - 总目录』 【第 7 章&#xff1a;图像复原与重建】 106. 退化图像的逆滤波 107. 退化图像的维纳滤波 108. 约束最小二乘方滤波 109. 几何均值滤波 【youcans 的 OpenCV 例程 300 篇】106. 退化图像的逆滤波 6. 退化图像复…

MySql数据类型介绍

对于刚开始学习MySql数据库的小伙伴们来说&#xff0c;MySql数据库有那些数据类型呢&#xff0c;在此我给大家总结介绍一下MySql数据库数据类型。 MySql数据类型 数据类型一共有五大类分别是&#xff1a; 整数类型&#xff1a;BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、…

【OpenCV 例程 300 篇】107. 退化图像的维纳滤波

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300篇 - 总目录』 【第 7 章&#xff1a;图像复原与重建】 106. 退化图像的逆滤波 107. 退化图像的维纳滤波 108. 约束最小二乘方滤波 109. 几何均值滤波 【youcans 的 OpenCV 例程 300 篇】107. 退化图像的维纳滤波&#xff08;…

阶段项目:学生信息管理系统数据库设计

目录问题描述&#xff1a;一、后台数据库的设计1&#xff09;设计数据库2&#xff09;插入数据3&#xff09;查询数据4&#xff09;修改数据5&#xff09;管理数据1.导出数据到各种异构数据源、导出脚本2.附加和分离数据库二、前端界面的开发&#xff08;后期我们可以用dNet开发…