《数字图像处理》手动实现修正的α均值滤波+手动实现自适应中值滤波器

article/2025/8/27 14:10:52

1 修正的α均值滤波实现

1.1 修正的α均值滤波原理

假设在邻域S_xy内去掉g(x,t)最低灰度值的d/2和最高的灰度值的d/2。令g_r (x,t)代表剩下的mn-d个像素。由这些剩余的像素的平均值形成的滤波器就称为修正的α均值滤波器:
在这里插入图片描述
其中,d的取值范围可以为0到mn-1。当d=0时,修正的α均值滤波器退化为算术均值滤波器。如果选择d=mn-1,则修正的α均值滤波器将退化为中值滤波器。当d取其他值时,修正的α均值滤波器在包括多种噪声的情况下很有用。例如高斯噪声和椒盐噪声混合的情况下。

1.2 实验结果

算法的主要流程比较简单,对于选定邻域的大小后的每一个小区域内的像素根据像素值(这里是灰度值)的大小进行排序,选取提前设定好的最高像素值和最低像素值的界限,将中间的像素值的均值作为邻域中心像素点的像素值(灰度值)即可,这样将整幅图像进行遍历即可得到最终的修正的α均值滤波效果。具体的实验代码及注释见于AlphaTrimmedMeanFt.py文件,具体的实验结果如下所述。
实验图为一个加了高级别噪音(肉眼观察主要为椒噪声和盐噪声)污染后的电路板的图片。下面分别考虑不同邻域大小以及不同的最低灰度值的d/2和最高的灰度值的d/2下的滤波效果。
邻域大小为3×3,最低灰度值d/2和最高的灰度值d/2中的d取值为4的滤波效果:(左图为原图,右图为滤波后的图)(算法三次平均用时2.58秒)
在这里插入图片描述
邻域大小为3×3,最低灰度值d/2和最高的灰度值d/2中的d取值为6的滤波效果:(左图为原图,右图为滤波后的图)(算法三次平均用时2.57秒)
在这里插入图片描述
邻域大小为3×3,最低灰度值d/2和最高的灰度值d/2中的d取值为0的滤波效果(即为算数均值滤波):(左图为原图,右图为滤波后的图)(算法三次平均用时2.86秒)
在这里插入图片描述
邻域大小为3×3,最低灰度值d/2和最高的灰度值d/2中的d取值为8的滤波效果(即为中值滤波):(左图为原图,右图为滤波后的图)(算法三次平均用时2.22秒)
在这里插入图片描述
邻域大小为5×5,最低灰度值d/2和最高的灰度值d/2中的d取值为20的滤波效果:(左图为原图,右图为滤波后的图)(算法三次平均用时6.52秒)

在这里插入图片描述
邻域大小为5×5,最低灰度值d/2和最高的灰度值d/2中的d取值为16的滤波效果:(左图为原图,右图为滤波后的图)(算法三次平均用时6.69秒)
在这里插入图片描述
邻域大小为5×5,最低灰度值d/2和最高的灰度值d/2中的d取值为24的滤波效果(即为中值滤波):(左图为原图,右图为滤波后的图)(算法三次平均用时6.22秒)
在这里插入图片描述

1.3 实验结果分析与结论

首先,使用修正的α均值滤波器可以对较高污染下的椒盐噪声图片,进行很好的滤波。
其次,在实验中我尝试了不同大小的邻域以及不同范围的最低灰度值和最高的灰度值,可以得出这样的结论:
对于不同的邻域值,由于此图细节较多,从实际的实验结果来看,邻域大小为3×3的滤波器的效果更好,可以更好的恢复图片中的细节,对于邻域大小为5×5的滤波器对于噪声的消除的效果更好,但是对于原图的细节恢复的效果没有3×3的滤波器理想。
对于最低灰度值和最高的灰度值的范围来说,从两种不同的邻域的结果来看,选取所有邻域像素数的一半作为此范围的滤波效果是最为理想的。
在时间方面,随着邻域面积的增大,处理时间也将变长,对于最低灰度值和最高的灰度值的范围来说,对于算法运行的时间影响不大。
另外,对于边界一圈的像素值,仅使用修正的α均值滤波器是不可以进行滤波的,所以我在下一个实验中自己设计了算法,进行了边界的过滤,在下一个自适应中值滤波器的效果中可以表现出来。

2 自适应中值滤波器

2.1 自适应中值滤波器原理

在噪声密度不是很大的情况下,使用中值滤波的效果不错。但是当噪声出现的概率比较高时,原来的中值滤波算法就不是很有效了。只有增大滤波器窗口尺寸,尽管会使图像变得模糊。
使用自适应中值滤波器的目的就是,根据预设好的条件,动态地改变中值滤波器的窗口尺寸,以同时兼顾去噪声作用和保护细节的效果。综上,自适应中值滤波可以处理具有更大概率的脉冲噪声。同时,其可以在平滑非脉冲噪声时保留细节。
考虑下面的符号:
S_xy:滤波器的作用区域,滤波器窗口所覆盖的区域,该区域中心点为图像中第y行第x列个像素点;
Z_min:S_xy中最小的灰度值;
Z_max:S_xy中最大的灰度值;
Z_med:S_xy中所有灰度值的中值;
Z_xy:表示图像中第y行第x列个像素点的灰度值;
S_max:S_xy所允许的最大窗口尺寸;
进程A:
A1 = Z_med-Z_min
A2 = Z_med-Z_max
如果A1>0 且 A2<0则跳转到B
否则,增大窗口的尺寸
如果增大后的尺寸≤S_max,则重复A
否则,直接输出Z_med
进程B:
B1 = Z_xy-Z_min
B2 = Z_xy-Z_max
如果B1>0 且 B2<0,则输出Z_xy
否则输出Z_med
这个的直观解释就是:在自适应中值滤波算法中,A步骤里面会先判断是否满足Z_min<Z_med<Z_max。这一步骤实质是判断当前区域的中值点是否是噪声点,通常来说是满足Z_min<Z_med<Z_max这个条件的,此时中值点不是噪声点,跳转到B;考虑一些特殊情况,如果Z_med=Z_min或Z_med=Z_max,则认为是噪声点,应该扩大窗口尺寸,在一个更大的范围内寻找一个合适的非噪声点,随后再跳转到B,否则输出的中值点是噪声点;
跳转到B之后,判断中心点的像素值是否是噪声点,判断条件为Z_min<Z_xy<Z_max,原理同上,因为如果Z_min=Z_xy或Z_xy=Z_max,则认为是噪声点。如果不是噪声点,我们可以保留当前像素点的灰度值;如果是噪声点,则使用中值替代原始灰度值,滤去噪声。

2.2 实验结果

根据2.1中对于自适应中值滤波器的原理描述,所实现的主要代码如图所示:
在这里插入图片描述
具体的实验代码及注释见于AdaptiveMedianFt.py文件,具体的实验结果如下所述。
实验图为一个加了相比于第一小节更高级别噪音污染后的电路板的图片。下面分别考虑不同最大邻域大小以及不同的初始滤波器大小下的滤波效果。
最大邻域大小为7×7,初始滤波器大小为3×3的自适应中值滤波的效果:(左图为原图,右图为滤波后的图)(算法三次平均用时5.74秒)
在这里插入图片描述
最大邻域大小为7×7,初始滤波器大小为5×5的自适应中值滤波的效果:(左图为原图,右图为滤波后的图)(算法三次平均用时8.85秒)
在这里插入图片描述
最大邻域大小为9×9,初始滤波器大小为3×3的自适应中值滤波的效果:(左图为原图,右图为滤波后的图)(算法三次平均用时6.35秒)
在这里插入图片描述
最大邻域大小为9×9,初始滤波器大小为5×5的自适应中值滤波的效果:(左图为原图,右图为滤波后的图)(算法三次平均用时9.88秒)
在这里插入图片描述
最大邻域大小为13×13,初始滤波器大小为3×3的自适应中值滤波的效果:(左图为原图,右图为滤波后的图)(算法三次平均用时8.32秒)
在这里插入图片描述
最大邻域大小为13×13,初始滤波器大小为5×5的自适应中值滤波的效果:(左图为原图,右图为滤波后的图)(算法三次平均用时11.93秒)
在这里插入图片描述

2.3 实验结果分析与结论

首先,使用自适应中值滤波器可以很好的处理很高噪声污染的图片。在实验中我尝试了不同最大邻域大小以及不同的初始滤波器大小下的自适应中值滤波的效果,可以得出这样的结论:
对于不同的邻域大小来说,这里尝试了7×7、9×9、13×13的邻域大小,结果发现,处理效果均十分理想。仔细对比可以看出,7×7的效果是最好的,尤其在滤波后图片的细节方面可以表现的十分明显。
对于不同的初始滤波器大小来说,这里尝试了3×3、5×5的初始滤波器邻域大小,从两种不同的邻域的结果来看,处理效果也均比较理想。不过仔细观察可以发现,对于本图来说,噪声的密度比较大,所以5×5的大小的效果更好,可以对于更大范围内的噪声进行滤波。
另外,对于边界一圈的像素值,进行了边界的过滤(边缘点的像素值使用与之最近的滤波后的点的像素值替代)。这样可以使图片的边缘变得更加光滑。
在时间方面,随着最大邻域以及初始滤波器边长的增大,处理时间都将明显变长,而且基本呈现线性关系。


http://chatgpt.dhexx.cn/article/LZYukEwp.shtml

相关文章

3D点云处理:半径滤波器中值滤波器

文章目录 0. 效果1. 半径滤波器1.1. 半径滤波器基本内容1.2 pcl实现2. 中值滤波器2.1.中值滤波器基本内容2.2 pcl实现3. 参考0. 效果 红色点云为处理的点云;白色为滤除的点云。 1. 半径滤波器 1.1. 半径滤波器基本内容 设置目标点半径范围内最少点数,如果少于该点数,则认为…

中值滤波器和双边滤波器(python实现)

文章目录 1.中值滤波&#xff08;1&#xff09;函数&#xff08;2&#xff09;代码 2.双边滤波&#xff08;1&#xff09;函数讲解&#xff08;2&#xff09;关于d,sigmaColor和sigmaSpace的值选择&#xff08;3&#xff09;代码实现 1.中值滤波 优点&#xff1a;对椒盐噪声处…

自适应中值滤波器(基于OpenCV实现)

转自&#xff1a;http://blog.csdn.net/brookicv/article/details/54931857 本文主要介绍了自适应的中值滤波器&#xff0c;并基于OpenCV实现了该滤波器&#xff0c;并且将自适应的中值滤波器和常规的中值滤波器对不同概率的椒盐噪声的过滤效果进行了对比。最后&#xff0c;对中…

NAFSM中值滤波器讲解与实现

去年大三时课上&#xff0c;医学图像处理老师讲解了这个算法&#xff0c;当时布置的作业就是实现这个中值滤波器&#xff0c;今天突然从一篇论文中看到过类似这种思想&#xff0c;就又想起来了&#xff0c;发现网上对这个算法的讲解很少&#xff0c;那我就在这分享一下咯&#…

中值滤波器处理椒盐噪声

clc; close all; clear all; %读取原始图像 im imread(‘Fig0318(b)(ckt-board-slt-pep-both-0pt2).tif’); im_noise_salt imnoise(im,‘salt & pepper’,0.05); % 加入椒盐噪声 % im_noise_gaussian imnoise(im,‘gaussian’); %定义邻域尺寸 n1 2; m1 2n11; n2 2;…

使用中值滤波器对图像降噪

中值滤波器&#xff1a; 基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个像素为中心点的邻域&#xff0c;一般为方形邻域&#xff0c;也可以为圆形、十字形等等&#xff0c;然后将邻域中各像素的灰度值排序&#xff…

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

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300篇 - 总目录』 【第 7 章&#xff1a;图像复原与重建】 100. 自适应局部降噪滤波器 101. 自适应中值滤波器 102. 陷波带阻滤波器的传递函数 【youcans 的 OpenCV 例程 300 篇】101. 自适应中值滤波器 3.8 自适应中值滤波器&am…

python实现自适应中值滤波器

目录 原理&#xff08;冈萨雷斯第四版p235&#xff09;&#xff1a; 代码&#xff1a; 结果&#xff1a; 原理&#xff08;冈萨雷斯第四版p235&#xff09;&#xff1a; 代码&#xff1a; import cv2 import numpy as np from matplotlib import pyplot as plt# for gray im…

自编自适应中值滤波器

自适应中值滤波器 算法思想&#xff1a;自适应中值滤波器是根据输入的图片像素矩阵和滤波器窗口的最大和最小值&#xff0c;首先&#xff0c;根据滤波器窗口的最大值申请两个可以处理了边界情况的滤波器&#xff0c;大小为原图加上最大滤波器的尺寸减一&#xff0c;按照边缘处…

图像中值滤波器python实现

中值滤波器原理 图像处理中最著名的统计排序滤波器是中值滤波器&#xff0c;即用一个预定义的像素领域中的灰度中值来代替像素的值&#xff1a; 其中是以&#xff08;x,y&#xff09;为中心的领域&#xff0c;包含中心点自己&#xff0c;在领域中找到中值&#xff0c;并用中值…

中值滤波器 median filter

中值滤波 中值滤波器(median filter)是将每个像素替换为围绕这个像素的矩形领域内的中值&#xff0c;或”中值像素"。 通过平均的简单模糊对噪声图像&#xff0c;由其是有较大孤立的异常值非常敏感。少量具有较大偏差的点也会严重影响到均值滤波。中值滤波可以采用取中间…

中值滤波器

我们前面提到&#xff0c;使用平均操作或加权平均操作可以降低图像的噪声&#xff0c;并由此引出了空间滤波器的概念。 这种平均操作或加权平均操作的空间滤波器&#xff0c;根据平均操作的特点&#xff0c;可以叫做均值滤波器。均值&#xff0c;就是平均值得意思。我们在《统…

C Primer Plus 第1章 初识C语言 笔记

C语言的起源 1972年&#xff0c;贝尔实验室的丹尼斯里奇&#xff08;Dennis Ritch&#xff09;和肯汤普逊&#xff08;Ken Thompson&#xff09;在开发UNIX操作系统时设计了C语言。 选择C语言的理由 用C语言编写的程序更易懂、更可靠。C语言充分利用了当前计算机的优势&…

C语言 基于结构体的程序设计(PTA)

一、实验目的 1&#xff0e;掌握C语言中结构体类型的定义和结构体变量的定义和引用。 2&#xff0e;掌握用结构指针传递结构数据的方法。 二、实验内容 1、 计算职工工资 给定N个职员的信息&#xff0c;包括姓名、基本工资、浮动工资和支出&#xff0c;要求编写程序顺序输…

C语言学习笔记(kk-zkx)

前言 流行的编程语言编程语言的大致发展历程编程语言应用数据在内存中的储存程序载入内存ASCII编码GB2312和GBKUnicode字符集&#xff08;统一码&#xff0c;万国码&#xff09;就业坑&#xff0c;当心 编程语言&#xff1a;用来控制计算机&#xff0c;让计算机为我们做事情的语…

C语言简介--学前必备知识

关键字 32个关键字&#xff1a; C和C的关系 C 主要在C语言的基础上增加了面向对象和泛型的机制&#xff0c;提高了开发效率&#xff0c;以适用于大中型软件的编写。C支持面向过程编程、面向对象编程和泛型编程&#xff0c;而C语言仅支持面向过程编程。就面向过程编程而言&a…

C语言入门篇——文件操作篇

目录 1、为什么使用文件 2、什么是文件 2.1程序文件 2.2数据文件 2.3文件名 3、文件的打开和关闭 3.1文件指针 3.2文件的打开和关闭 4、文件的顺序读写 5、文件的随机读写 5.1fseek 5.2ftell 5.3rewind 6、文本文件和二进制文件 7、文件读取结束的判定 8、文件…

C语言基础之13:文件输入/输出

Tips1&#xff1a; 函数&#xff1a;fopen()、getc()、putc()、exit()、fclose() fprintf()、fscanf()、fgets()、fputs() rewind()、fseek()、ftell()、fflush() fgetpos()、fsetpos()、feof()、ferror() ungetc()、setvbuf()、fread()、fwrite() 如何使用C标准I/O系列的函数…

01是c语言,01-C语言-简介

一、C语言的起源 1972年&#xff0c;由贝尔实验室的丹尼斯.里奇和肯.汤普逊在开发UNIX系时设计C语言。C语言是在B语言基础上进行设计的。C 语言设计的初衷是将其作为程序员使用的 一种编程工具&#xff0c;因此&#xff0c;其主要目标是成为有用的语言。 二、C语言的特性 设计特…

用C语言实现CLI界面的魔塔游戏

简介 本着开源的精神&#xff0c;我分享下我做的数据结构大作业&#xff0c;我当时选择的是游戏设计题目&#xff0c;由于魔塔基础的机制不太复杂&#xff0c;所以就借着大作业设计了个简易的魔塔游戏。 这是游戏界面&#xff1a; 以下是我当时大作业内容&#xff1a; 我把…