[数字图像处理]图像去噪初步(2)--非线性滤波器

1.非线性处理与线性处理的区别

上一篇博文的内容,是关于均值滤波器的。比如说像算术均值滤波器,几何均值滤波器。这以类型的滤波器的常常被用于剔除某些不需要的频率成分,或者选择需要的频率成分,从而达到去噪的目的。这样的滤波器,被称为线性滤波器。

然而,还有一些特殊滤波器,他们被称为非线性滤波器。其代表为中央值滤波器。所谓中央值滤波器,就是将一定范围内的数据(对于图像而言,是像素的灰度值)进行排序,选择中央值作为滤波器的输出。

中央值滤波器的目的并不是频率成分的选择,而是求root信号。关于root信号的定义,[文献1]中是这样给出的。

------------------------

定义:对于任意信号,使用中央值滤波器进行有限次处理,直到所得到的限号不变为止。中央值滤波器处理前后,如果这个信号列没有任何变化,那么将这个信号列称为这个滤波器的root信号。

------------------------

对于中央值滤波器来讲,可以完美去除被椒盐噪声污染的root信号。对于root信号,有如下的性质。对于以下定理的证明与详细说明,请参考[文献2][文献3]。

=============

定理1:如果信号列{x(i)}是单调递增或单调递减的,那么对于任何尺寸的中央值滤波器,这个信号列都是root信号。

定理2:如果信号列{x(i)}是在从i开始的m个信号之间的局部单调信号的话,那么对于尺寸为N=2M+1(M<=m-2)的中央值滤波器,这样的信号为这个滤波器的root信号。

=============

2.几个典型的非线性滤波器

2.1 中央值滤波器 (Median Filter)

正如第一节所叙述的,中央值滤波器可以有效去除椒盐噪声,并且不会使得图像模糊。我们将一副图像染上椒盐噪声,然后使用不同尺寸的中央值滤波器去进行处理。所得的结果的画质使用SSIM去评价。

首先,将图像染上盐粒密度为0.15,胡椒密度为0.15的椒盐噪声,使用3x3,5x5,7x7和9x9四种不同尺寸的中值滤波器去处理图像。所得到的结果,如下表所示。

由上图所示,可以看出,所用滤波器尺寸不同,得到的结果是不同的,尺寸较大的滤波器得到了不太好的结果。随着循环次数的增加,图像的SSIM逐渐变化,最后趋近于稳定。下面是循环次数为30时候,4种尺寸滤波器得到的结果。

为了验证噪声与实验结果的影响,将图像染上盐粒密度为0.35,胡椒密度为0.35的椒盐噪声,在进行滤波实验,可以得到如下曲线。

实验结果给出,尺寸较小的的中值滤波器,其收敛到root信号较为缓慢,其次,对于高噪声的图像,其修复结果是不太好的。

总结上述实验,可以得到三个有用的结论。

1.中央值滤波器在处理过程中,不断在寻找root信号。反复数回之后,其结果收敛,基本不改变。

2.对于不同的图像,不同的噪声,最适合本幅图像的中央值滤波器的尺寸是不同的。并不是尺寸越小越好。

3.尺寸小的滤波器,收敛速度慢。反之,尺寸大的滤波器,收敛较快。

2.2 自适应中央值滤波器

我们要很好的使用中央值滤波器,只有一个要点!就是找一个最适合的滤波器尺寸,使得原图就是这个滤波器的root信号,那么,就可以得到一个完美的结果(当然,最适合的滤波器是不存在的)。那么,这里就可以有个想法了,在执行滤波器操作的时候,尽可能多的尝试各种尺寸,选择一个最适合的,让原图很接近这个尺寸的滤波器的root信号。这样的话,就可以得到一个不错的结果了。

当然,之对于椒盐噪声的话,还可以加入这样一个功能,由于噪声的灰度值是已知的(盐粒噪声为1,胡椒噪声0),那么只有当中央值不是0或者1的时候,滤波器生效,否则,扩大滤波器尺寸。

归纳上述思想,可以得到如下的伪代码。

START:   S_xy = read(f(x,y),[size_S_xy]);
 z_min = min(S_xy);
 z_max = max(S_xy);
 z_med = median(S_xy);
LOOP A :  A_1 = z_med - z_min;
          A_2 = z_med - z_max;

          if  ((A_1 >0) and (A_2 < 0))
               goto LOOP B;
          else  size_S_xy++;
               goto START;

          if  (size_S_xy <= size_max)
               g(x,y) = z_med;
               goto NEXT;

LOOP B :  B_1 = f(x,y) - z_min;
          B_2 = f(x,y) - z_max;

          if  ((B_1 >0) and (B_2 < 0))
               g(x,y) =  f(x,y) ;
               goto NEXT;
          else  g(x,y) = z_med;
               goto NEXT;

NEXT :    x,y移动到下一个像素点
          if (x > x_max)and(y>y_max)
              return;
     else goto START;

来看看这个滤波器的效果,将图像加一个很强的噪声椒盐噪声。盐粒密度为0.3,胡椒密度为0.3。同时将同样的图像,使用5x5的中央值滤波器。两个滤波器的不同,还是很容易看出来的。

2.3 最大值滤波器与最小值滤波器

最大值滤波器与最小值滤波器这两个滤波器,跟中央值滤波器有些类似。同样是一个目的,用于寻找root信号,只不过,最大值滤波器可以用于去除盐粒噪声,相反,最小值滤波器可以用于取出胡椒噪声。同样的,最大值与最小值滤波器不适用于去除,同时含有盐粒噪声与胡椒噪声的图片。

由于这个很简单,结果就不贴了。

2.4 中点滤波器(midpoint filter)

中点滤波器,糅合了均值滤波器和非线性的排序处理。这样的滤波器对于去除高斯噪声与均匀噪声有很好的效果。

我们使用这个滤波器,与平均滤波器做个比较吧。其结果显示在下图。

图片上,纵轴表示画质SSIM,横轴表示噪声的方差。绿线表示中点滤波器,红线表示算术滤波器。可以看出,均匀噪声上,中点滤波器的性能还是优于算术平均滤波器的。(当然,这可能跟选用的评价图像有关,但是基本是这个趋势)。

2.4 修正的阿尔法均值滤波器

从很小的时候开始,对唱歌节目就有这样的一个映像,评委打分的时候,总是要去掉一个最高分,去掉一个最低分,然后求均值。这个是个什么样的原理呢?其实这是一个很典型的滤波器,可以更好的反应一个选手的水平。

在图像处理领域,也有一个类似的处理方法,其表达式如下。

简单的理解一下这个滤波器,首先,我们将滤波范围 个数据进行排序,从大到下的顺序去除个数据,从小到大的顺序去除个数据。将剩下的数据计算均值。

这样的滤波器,很擅长去除椒盐噪声与其他类型噪声一起污染过的图片。依然是实验,首先将图片染上盐粒密度为0.1,胡椒密度为0.1的椒盐噪声。然后,再将这幅图像染上高斯噪声。在将图片进行去噪。得到的结果如下所示。

可以出,对于复数的噪声,这样的滤波器的效果是最好的。

3.自适应中值滤波器的Matlab代码

由于本次代码都比较简单,主要是概念上的理解,所以,代码我也就贴个自适应滤波器的代码就完事吧!

下一篇博文,会说到去卷积处理。

参考文献

[文献1]非線形ディジタル信号処理  ,棟安実治 ?田口亮 著,システム制御情報学会,朝倉書店,1999年03月20日

[文献2]Tyan, S. G. "Median filtering: Deterministic properties." Two-Dimensional
Digital Signal Prcessing II. Springer Berlin Heidelberg, 1981. 197-217.

[文献3]Gallagher Jr N C, Wise G L. A theoretical analysis of the properties of median filters[J]. Acoustics,
Speech and Signal Processing, IEEE Transactions on, 1981, 29(6): 1136-1141.

原文发于博客:http://blog.csdn.net/thnh169/

=============更新日志===================

2014 - 7 - 17       修正了一些格式错误

[数字图像处理]图像去噪初步(2)--非线性滤波器

时间: 2024-10-13 16:44:32

[数字图像处理]图像去噪初步(2)--非线性滤波器的相关文章

[数字图像处理]图像去噪初步(1)--均值滤波器

1.图像去噪的前言 上一篇博文中,我对噪声的类型进行了介绍,也使用的Matlab对各种噪声进行了实现.旧话重提,一幅图像,甚至是一个信号的老化,能够使用下面模型来表示. 能够使用下面算式来表示 这里,因为退化函数的作用,使得原图像产生退化(比方,运动模糊),然后在加上一个加性噪声项. 本博文,主要对去除加性噪声的线性滤波器的性能进行了比較.对于退化函数的去除(称为去卷积或者逆滤波),将放在稍后的博文. 1.1 实验用图像 1.2 实验结果的评价 实验的步骤为,将实验用图像加上加性噪声,然后使用滤

数字图像处理- 3.6 锐化空间滤波器

Reference Link : http://blog.csdn.net/xz_rabbit/article/details/17999315 Reference Link : http://www.cnblogs.com/salan668/p/3560197.html 3.6 锐化空间滤波器 锐化处理的主要目的是突出图像中的细节或者增强被模糊了的细节,这种模糊不是由于错误操作,就是特殊图像获取方法的固有印象.总的来说,微分算子的响应强度与图像在该店(应用了算子)的突变程度有关.这样一来,图像

数字图像处理的初步学习

灰度图是一个二维函数,彩色图是三个二维函数. 数字图像的量化电平越少色彩越差. 采样间隔也就是像素. 图像中实际层次越多,效果越好. 图像的对比度=最大亮度/最小亮度,对比度越大,图像效果越好. 直方图的处理:图像暗,说明图像的直方图分布出在灰度级低的一侧,图像亮则图像处在灰度级高的一侧.好的图像的像素占有全部的灰度级且分布均匀,具有高对比度和多变的灰度色调. 图像锐化的三种算子:(图像锐化的主要用于增强图像灰度跳变部分) 1.基于一阶导数的图像增强-梯度算子 梯度的方向就是函数f(x,y)最大

【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理具体解释

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说.主要通过MFC单文档视图实现显示BMP图片点运算处理.包含图像灰度线性变换.灰度非线性变换.图像阈值化处理.图像均衡化处理等知识,并结合前一篇论文灰度直方图进行展示 .同一时候文章比較具体基础,希望该篇文章对你有所帮助,尤其是刚開始学习的人和学习图像处理的学生. [数字图像处理]一.MFC具体解释显示BMP格式图片 [数字图像处理]二.MFC单文档切割窗体显示图片 [数字图像处理]

数字图像处理-空间域处理-空间滤波-锐化空间滤波器

参考自:数字图像处理第三版-冈萨勒斯 锐化处理的主要目的是突出灰度的过渡部分.增强边缘和其他突变(噪声),削弱灰度变化缓慢的区域. 注意:垂直方向是x,水平方向是y 基础 图像模糊可用均值平滑实现.因均值处理与积分类似,在逻辑上,我们可以得出锐化处理可由空间微分来实现.微分算子的响应强度与图像的突变程度成正比,这样,图像微分增强边缘和其他突变,而削弱灰度变化缓慢的区域. 微分算子必须保证以下几点:(1)在恒定灰度区域的微分值为0:(2)在灰度台阶或斜坡处微分值非0:(3)沿着斜坡的微分值非0 一

【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图像增强处理,包括图像普通平滑.高斯平滑.不同算子的图像锐化知识.希望该篇文章对你有所帮助,尤其是初学者和学习图像处理的学生. [数字图像处理]一.MFC详解显示BMP格式图片 [数字图像处理]二.MFC单文档分割窗口显示图片 [数字图像处理]三.MFC实现图像灰度.采样和量化功能详解 [数字图像处理]四.MFC对话框绘制灰度直方图 [数字图像

数字图像处理的基本原理和常用方法

数字图像处理的基本原理和常用方法 数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.图像处理最早出现于 20 世纪 50 年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息.数字图像处理作为一门学科大约形成于 20 世纪 60 年代初期.早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的.图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强.复原.编码.压缩等. 数字图像处理常用方法

学习数字图像处理_1

结束了数据结构的内容之后,在图书馆接着看数字图像处理的内容.教材以冈萨雷斯编写的<数字图像处理(第三版)>和<数字图像处理(matlab版)>为主.前期看的是后者,后者较薄,且以介绍matlab的各种图像处理相关函数和编程为主,原理讲的较少,前4章还能大概看懂程序,到图像复原这章由于基础知识不到位看的比较吃力,所以网上买了纯理论的第一本书.两本结合着看,前期还是以基础知识为主吧,matlab编程本身难度不大,主要是理解算法原理,虽然大部分算法matlab已经编好放在map工具箱中的

初始----python数字图像处理--:环境安装与配置

一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此,我们这里使用python这个脚本语言来进行数字图像处理. 要使用python,必须先安装python,一般是2.7版本以上,不管是在windows系统,还是linux系统,安装都是非常简单的. 要使用python进行各种开发和科学计算,还需要安装对应的包.这和matlab非常相似,只是matla