2015-11-27 10:28:32 qq_18343569 阅读数 3337
   噪声主要可以分为脉冲噪声和高斯噪声,我们在现实中看到的图像一
般都会含有噪声,在对图像做后续处理时,要对图像进行去噪处理,这样也被称作图像

滤波,图像滤波可分为空间域滤波、频率域滤波两大类

1空间域滤波降噪

空间域滤波降噪的基本原理是指直接对图像所在的二维空间进行处理,也就是直接
对每一像素点的灰度值进行处理,针对这一特点,空间域去噪通常用中值滤波法、邻域
滤波法以及自适应滤波法来实现。
(一)邻域平均法:
  邻域平均法是一种图像增强方法,邻域平均法是一种直接在空间域上进行平滑的技
术,该技术是基于这样一个假设:图像可以化为许多灰度不变的小块,因为图像噪声的
灰度值与它们相邻像素的灰度值之前是相互关联的,而噪声是相对独立的,基于如上假
设,如果我们想要达到去噪的目的,我们就可以应用邻域平均值法,即取平滑图像的灰
度值等于一个像素和邻域内所有像素的灰度值,这种方法又叫做局部平滑法或均值滤
波,

(二)中值滤波法:

   中值滤波法是一种去除噪声方法,特别是对于处理非线性信号上有很大的作用,其

原理为排序统计理论,中值滤波器的概念是J.W.Tukey在上世纪70年代初在进行时间序
列分析的时侯提出的,后入又将这一概念应用到图像处理中,运算简单、速度较快是这
种滤波器的主要优点,比如在长尾叠加噪声和滤除叠加白噪声等应用中展现了极优异的
能力,在滤除脉冲等噪声过程中,中值滤波器也有很好的应用,它能很完整地保存边缘、
锐角等细节信息,此外,中值滤波器也能根据不同情况改变参考系数,它的这种自适应
功能使得它的性能大大提高,在数字图像处理过程中,中值滤波器相对其它非线性滤波
器有很强的应用性。中值滤波法也是一种处理非线性平滑滤波的经典方法,根据灰度的
等级对邻域中像素灰度值进行排序,是一种邻域运算,而不是加权求和运算,这样输出
的像素值我们就可以取排序后结果产生的中间数值,在傅里叶空间中它不但能影响低频
分量,还能减弱甚至消除高频分量,图像中的边缘区域会有一些高频分量,而灰度值对
高频分量特别敏感,而中值滤波可将这些分量滤掉,使图像更为平滑。

(三)自适应滤波法:
   我们在现实处理中,针对于不同种类的噪声和信号,必须是经过优化的非线性滤波
器参数才能得到令人满意的效果,但是在一些其它情形中,我们在统计数据之前,对相
关数据的掌握还不够,对计算相关参数所必须的相应噪声知之甚少,在一些情况下这些
统计数据还随时间而变化,对于这样的状况,自适应非线性滤波器作为去噪方法就显得
极为重要了,自适应滤波器的实现思想是:先是输入一个信号,调节滤波器的参数来产
生输出信号,并和已知信号进行对比,从而得到误差信号,为了使误差信号的均方差最
小,我们需要根据滤波器参数来进行改变相应的自适应算法。在运用一种滤波器之前,
我们不必要再学习了解原始信号的特性以及噪声相关的信息,自适应滤波法能够自身渐
渐估计所需要的统计特性,然后根据统计的特性来自己调整相应的参数,从而获得更好
的滤波效果,假如原始信号的统计特性有所改变时,自适应滤波法又能够随之跟踪发生改变来自动改变参数,进而使其能又一次得到较好的结

2频率域滤波降噪

  频率域去噪基本实现思想:首先将原始图像通过一些积分变换,将其变换到频率域,
接着再通过频率域对其进行操作,得到的结果再反变换到空间域中,进而使图像得到增
强。根据傅里叶频谱的特性可得到,图像的平均灰度级对应于扰和v同时为0时的频率成
分,当从傅里叶变换的原点离开时,图像的慢变化分量对应着低频滤波,比如一幅图像
中较平的区域;当再进一步离开原点时,较高的频率开始对应图像中变换越来越快的灰
度级,它们反映了一幅图像中物体的边缘和灰度级突发改变和噪声部分的图像成分。频
率域图像增强正是基于这种原理,通过对图像的傅里叶频谱进行低通滤波(使低频通过,
使高频衰退)来过滤噪声,通过对图像的傅里叶频谱进行高通滤波(使高频通过,使低频
衰退)使图像的边缘和轮廓更明显。
理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器三种滤波器


2017-12-21 14:41:51 O_MMMM_O 阅读数 13678

简单概念

图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染,一般数字图像系统中的常见噪声主要有:高斯噪声(主要由阻性元器件内部产生)、椒盐噪声(主要是图像切割引起的黑图像上的白点噪声或光电转换过程中产生的泊松噪声)等;这里用一个函数实现 :imnoise函数。(见文末

这里说明两种图像去噪算法:

  1. 均值滤波算法

也称线性滤波,主要思想为邻域平均法,即用几个像素灰度的平均值来代替每个像素的灰度。有效抑制加性噪声,但容易引起图像模糊,可以对其进行改进,主要避开对景物边缘的平滑处理。

  1. 中值滤波

基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化。


话不多说附代码:


I=imread('C:\Users\wpc\Pictures\1.jpg');%读取图像

I = rgb2gray(I);%灰度处理

J=imnoise(I,'salt & pepper',0.2);%加入椒盐噪声,密度为0.2

subplot(2,3,1);imshow(I);

title('原始图像');

subplot(2,3,2); imshow(J);

title('加入椒盐噪声之后的图像');

%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波

K1= medfilt2(J);%采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波

%采用MATLAB中的函数filter2对受噪声干扰的图像进行中值滤波

K2=filter2(fspecial('average',3),J)/255; %模板尺寸为3

K3=filter2(fspecial('average',5),J)/255;% 模板尺寸为5

K4= filter2(fspecial('average',9),J)/255; %模板尺寸为9

subplot(2,3,3);imshow(K1);

title('中值滤波');

subplot(2,3,4); imshow(K2);

title('均值滤波,尺寸3');

subplot(2,3,5);imshow(K3);

title('均值滤波,尺寸5');

subplot(2,3,6);imshow(K4);

title('均值滤波,尺寸9'); 



运行结果
分析与总结

通过目测?

  • 中值滤波效果要比均值好
  • 使用均值滤波去噪效果选用的邻域半径越大效果越好,当然其代价也会更大。

PS:

  1. fspecial函数

fspecial函数用于创建预定义的滤波算子,其语法格式为:

h = fspecial(type)
h = fspecial(type,parameters)

参数type制定算子类型,parameters指定相应的参数,具体格式为:
type=‘average’,为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。

  1. imnoise函数
imnoise(I,type)

I:为处理的后的图像矩阵
type:添加噪声的类型,包含 ‘gaussian’ 、‘salt & pepper’…(不会自己查。。。啦啦啦)

2019-01-08 14:54:01 hacker_long 阅读数 4387

文章首发于微信公众号《有三AI》

【技术综述】一文道尽传统图像降噪方法

图像预处理算法的好坏直接关系到后续图像处理的效果,如图像分割、目标识别、边缘提取等,为了获取高质量的数字图像,很多时候都需要对图像进行降噪处理,尽可能的保持原始信息完整性(即主要特征)的同时,又能够去除信号中无用的信息。

并且,降噪还引出了一个非常热门的研究方向,即美颜磨皮,这对于中国用户来说,是非常重要的计算机视觉领域,今天就来认真讲讲传统的图像降噪算法。

 

01 图像降噪算法分类

虽然各种图像降噪算法犹如雨后春笋般不断新增,然而很多方法都存在一个通用的缺点,就是在降噪的同时往往会丢失图像的细节或边缘信息。

一般的图像处理,微小的细节对图像降噪的后续处理程序影响不太明显,但是当处理对象为医学图像时,这样的小失误是不被允许的,因为在医疗诊断或治疗中,每一个微小的失误都会影响医师的治疗方法甚至威胁到患者的生命。这就要求更多的研究者来投入时间和精力研究新的降噪技术,以达到降噪并同时仍能保留足够细节信息的目的。

目前常用的图像去噪算法大体上可非为两类,即空域像素特征去噪算法和变换域去噪算法。前者是直接地在图像空间中进行的处理,后者是间接地在图像变换域中进行处理。

1.1 空域像素特征去噪算法 

首先说明一点就是在信号处理教科书中,虽然介绍过很多经典的图像去噪方法,但主要都是针对随机噪声的,对于sensor缺陷导致的一些脉冲噪声(impulse noise)这里我们不考虑。

那么什么是随机噪声呢?相比于图像的真实信号来说随机噪声就是一种或高或低呈现出不确定变化的一种信号,如下图所示虚线代表真实信号,红蓝线表示的就是随机噪声信号,所有的随机噪声信号求和后结果为0。

由于这个零和特点,目前几乎所有的空域降噪算法都是基于这个理论为出发点来进行降噪处理的。

基于空域像素特征的方法,是通过分析在一定大小的窗口内,中心像素与其他相邻像素之间在灰度空间的直接联系,来获取新的中心像素值的方法,因此往往都会存在一个典型的输入参数,即滤波半径r。此滤波半径可能被用于在该局部窗口内计算像素的相似性,也可能是一些高斯或拉普拉斯算子的计算窗口。在邻域滤波方法里面,最具有代表性的滤波方法有以下几种:

(1) 算术均值滤波与高斯滤波

算术均值滤波用像素邻域的平均灰度来代替像素值,适用于脉冲噪声,因为脉冲噪声的灰度级一般与周围像素的灰度级不相关,而且亮度高出其他像素许多。

  • 均值滤波结果A'(i,j)随着L(滤波半径)取值的增大而变得越来越模糊,图像对比度越来越小。经过均值处理之后,噪声部分被弱化到周围像素点上,所得到的结果是噪声幅度减小,但是噪声点的颗粒面积同时变大,所以污染面积反而增大。为了解决这个问题,可以通过设定阈值,比较噪声和邻域像素灰度,只有当差值超过一定阈值时,才被认为是噪声。不过阈值的设置需要考虑图像的总体特性和噪声特性,进行统计分析。自适应均值滤波算法通过方向差分来寻找噪声像素,从而赋予噪声像素与非噪声像素不同的权重,并自适应地寻找最优窗口大小,优于一般的均值滤波方法。

  • 高斯滤波矩阵的权值,随着与中心像素点的距离增加,而呈现高斯衰减的变换特性。这样的好处在于,离算子中心很远的像素点的作用很小,从而能在一定程度上保持图像的边缘特征。通过调节高斯平滑参数,可以在图像特征过分模糊和欠平滑之间取得折中。与均值滤波一样,高斯平滑滤波的尺度因子越大,结果越平滑,但由于其权重考虑了与中心像素的距离,因此是更优的对邻域像素进行加权的滤波算法。

(2) 统计中值滤波

中值滤波首先确定一个滤波窗口及位置(通常含有奇数个像素),然后将窗口内的像素值按灰度大小进行排序,最后取其中位数代替原窗口中心的像素值(如下图)。

但当噪声像素个数大于窗口像素总数的一半时,由于灰度排序的中间值仍为噪声像素灰度值,因为滤波效果很差。此时如果增加窗口尺寸,会使得原边缘像素被其他区域像素代替的几率增加,图像更容易变模糊,并且运算量也大大增加。

无论是中值滤波还是加权滤波,两者受窗口的尺寸大小影响非常大。一种对中值滤波的改进是自适应中值滤波,它首先判断窗口内部的中心像素是否是一个脉冲,如果不是,则输出标准中值滤波的结果;如果是,则通过继续增大窗口滤波尺寸来寻找非脉冲的中值,因此该方法相比较原始的统计中值滤波器,在保持清晰度和细节方面更优。

(3) 双边滤波

这是一种非线性的保边滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。双边滤波器之所以可以达到保边去噪的效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差值决定滤波器系数。双边滤波器中,输出像素的值g(i,j)依赖于邻域像素的值的加权组合:

上图中权重系数w(i,j)取决于空域核和值域核的乘积。其中空域滤波器对空间上邻近的点进行加权平均,加权系数随着距离的增加而减少。值域滤波器则是对像素值相近的点进行加权平均,加权系数随着值差的增大而减少。

(4) 引导滤波(guided filter)

高斯滤波等线性滤波算法所用的核函数相对于待处理的图像是独立无关的,这里的独立无关也就意味着,对任意图像都是采用相同的操作。

引导滤波就是在滤波过程中加入引导图像中的信息,这里的引导图可以是单独的图像也可以是输入图像,当引导图为输入图像时,引导滤波就成为了一个可以保持边缘的去噪滤波操作。我们来看一下具体算法原理:

第一步:假设该引导滤波函数的输出与输入在一个二维窗口内满足线性关系,如下:

 

其中,q是输出像素的值,即p去除噪声或者纹理之后的图像,ni表示噪声,I是输入图像的值,i和k是像素索引,a和b是当窗口中心位于k时该线性函数的系数。(当引导图为输入图像时,引导滤波就成为一个保持边缘的滤波操作,即 I= p,对上示两边取梯度可得q'=aI',即当输入图I有梯度时,输出q也有类似的梯度,这也就可以解释为什么引导滤波有边缘保持特性了。

第二步求出线性函数的系数,也就是线性回归,即希望拟合函数的输出值q与真实值p之间的差距最小,转化为下面但最优化问题,也就是让下式最小:

 

在这里,μk和σk^2表示I在局部窗口wk中的均值和方差。 |ω|是窗口内的所有像素数,pk表示p在窗口wk中的均值,ϵ就是规整化参数,当I=p时,上面第二个公式即可简化为:

  • 如果ϵ=0,显然a=1, b=0是E(a,b)为最小值的解,从上式可以看出,这时的滤波器没有任何作用,将输入原封不动的输出。

  • 如果ϵ>0,在像素强度变化小的区域(方差不大),即图像I在窗口wk中基本保持固定,此时有σ2k<<ϵ,于是有ak≈0和bk≈μk,即做了一个加权均值滤波,而在高方差区域,即表示图像I在窗口wk中变化比较大,此时我们有σ2k>>ϵ,于是有ak≈1和bk≈0,对图像的滤波效果很弱,有助于保持边缘。

  • 在窗口大小不变的情况下,随着ϵ的增大,滤波效果越明显。

第三步:在计算每个窗口的线性系数时,我们可以发现一个像素会被多个窗口包含,也就是说,每个像素都由多个线性函数所描述。因此,如之前所说,要具体求某一点的输出值qi时,只需将所有包含该点的线性函数值平均即可,如下:

其中,输出值q又与两个均值有关,分别为a和b在窗口w中的均值,我们将上一步得到两个图像ak和bk都进行盒式滤波,得到两个新图:ai'和bi'。然后用ai'乘以引导图像Ii,再加上bi',即得最终滤波之后的输出图像q。

(5) NLM(Non-Local means)算法

前面基于邻域像素的滤波方法,基本上只考虑了有限窗口范围内的像素灰度值信息,没有考虑该窗口范围内像素的统计信息如方差,也没有考虑整个图像的像素分布特性,和噪声的先验知识。

针对其局限性,NLM算法被提出,该算法使用自然图像中普遍存在的冗余信息来去噪声。与常用的双线性滤波、中值滤波等利用图像局部信息来滤波不同的是,它利用了整幅图像来进行去噪,以图像块为单位在图像中寻找相似区域,再对这些区域求平均,能够比较好地去掉图像中存在的高斯噪声。这里我直接拿图来说可能会更能说明问题:

如上图所示,其中p为去噪的点,从图中看出q1和q2的邻域与p相似,所以权重和比较大,而q3因为与q邻域相差比较大所以赋予的权重值就很小。NLM就是将一幅图像中所有点的权重都表示出来,那就得到下面这些权重图:

上面权值图像中,左边是原图,中心的白色色块代表了像素  块邻域,右边是计算出来的权重图,权重范围从0(黑色)到1(白色)。

这个块邻域在整幅图像中移动,计算图像中其他区域跟这个块的相似度,相似度越高,得到的权重越大。最后将这些相似的像素值根据归一化之后的权重加权求和,得到的就是去噪之后的图像了。

由于原始NLM方法需要用图像中所有的像素来估计每一个像素的值,因此计算量非常大,研究者不断对该方法进行了几点改进。(a) 采用一定的搜索窗口代替所有的像素,使用相似度阈值,对于相似度低于某一阈值的像素,不加入到权重的计算(即不考虑其相对影响,这些都可以降低计算复杂度。(b)使用块之间的显著特征,如纹理特征等代替灰度值的欧氏距离来计算相似度,在计算上更加有优势,应用上也更加灵活。

除了上面所说的方法,还有如加权最小二乘法(WLS),变分法(TV)等滤波算法,并且上面的这些算法都产生出了非常多的变种,篇幅有限不再一一详述,可以参考文献【1】。

1.2 变换域去噪算法 

空域去噪都是从空间的角度去思考如何去噪,也就是所谓的spatial noise reduction,这条路子能想的方法也都做得差不多了,于是有人就换个角度想问题,就有了变换域做去噪的方法。通过数学变换,在变换域上把信号和噪声分离,然后把噪声过滤掉,剩下的就是信号。如下图没有噪声的信号就比较顺滑没有杂质。

而下图中含有噪声的信号就会显得参差不齐,毛刺较多。而如果我们可以将噪声变换一个域后设定一个阈值将高于阈值的部分去掉,再反变换后剩下的就是干净的信号了。

因此图像变换域去噪算法的基本思想其实就是首先进行某种变换,将图像从空间域转换到变换域,然后从频率上把噪声分为高中低频噪声,用这种变换域的方法就可以把不同频率的噪声分离,之后进行反变换将图像从变换域转换到原始空间域,最终达到去除图像噪声的目的。

图像从空间域转换到变换域的方法很多,其中最具代表性的有傅里叶变换、离散余弦变换、小波变换以及多尺度几何分析方法等。

其中基于小波萎缩法是目前研究最为广泛的方法,小波萎缩法又分成如下两类:第1类是阈值萎缩,由于阈值萎缩主要基于如下事实,即比较大的小波系数一般都是以实际信号为主,而比较小的系数则很大程度是噪声。因此可通过设定合适的阈值,首先将小于阈值的系数置零,而保留大于阈值的小波系数;然后经过阈值函数映射得到估计系数;最后对估计系数进行逆变换,就可以实现去噪和重建;而另外一种萎缩方法则不同,它是通过判断系数被噪声污染的程度,并为这种程度引入各种度量方法(例如概率和隶属度等),进而确定萎缩的比例,所以这种萎缩方法又被称为比例萎缩。

1.3 BM3D去噪算法 

空域中NLM算法和变换域中小波萎缩法效果都很好,一个很自然的想法就是是否可以将两者相结合呢?是的,BM3D就是融合了spatial denoise和tranform denoise,从而可以得到最高的峰值信噪比。它先吸取了NLM中的计算相似块的方法,然后又融合了小波变换域去噪的方法。我们来看一下具体算法流程如下图:

BM3D算法总共有两大步骤,分为基础估计(Step1)和最终估计(Step2)。在这两大步中,分别又有三小步:相似块分组,协同滤波和聚合。

Stpe1:基础估计

(1) 相似块分组:首先在噪声图像中选择一些大小的参照块(考虑到算法复杂度,不用每个像素点都选参照块,通常隔3个像素为一个步长进行选取,复杂度降到1/9),在参照块的周围适当大小区域内进行搜索,寻找若干个差异度最小的块,并把这些块整合成一个3维的矩阵。

(2) 协同滤波:形成若干个三维的矩阵之后,首先将每个三维矩阵中的二维的块(即噪声图中的某个块)进行二维变换,可采用小波变换或DCT变换等。二维变换结束后,在矩阵的第三个维度进行一维变换,变换完成后对三维矩阵进行硬阈值处理,将小于阈值的系数置0,然后通过在第三维的一维反变换和二维反变换得到处理后的图像块。

(3) 聚合:此时,每个二维块都是对去噪图像的估计。这一步分别将这些块融合到原来的位置,每个像素的灰度值通过每个对应位置的块的值加权平均,权重取决于置0的个数和噪声强度。

Step2:最终估计

具体的步骤从流程图可看出和Step1基本一样,不同的有两处:

一处是聚合过程将会得到两个三维数组:噪声图形成的三维矩阵和基础估计结果的三维矩阵。

另一处是协同滤波中用维纳滤波(Wiener Filtering)代替了硬阈值处理。

 

02 滤波器抑制噪声比较

对图像进行滤波去噪的算法其实就是一个加权平均的运算过程,滤波后图像中的每个像素点都是由其原图像中该点邻域内多个像素点值得加权平均,不同的滤波器最根本的差异就是权值不同。另外根据噪声的不同,滤波效果也各有不同。

  • 均值滤波处理会噪声部分被弱化到周围像素点上,所得到的结果是噪声幅度减小,但是噪声点的颗粒面积同时变大,所以污染面积反而增大。

  • 高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真,因此缺点是权重完全取决于图像像素之间欧氏距离,与图像的内容没有关系。

  • 中值滤波适用于椒盐噪声和脉冲噪声。因为对于受脉冲噪声和椒盐噪声污染的图像,相应位置的图像灰度发生了跳变,是不连续的,而此处的中值滤波正是一种非线性滤波方法,对这些类型的随机噪声,它比相同尺寸的线性平滑滤波器引起的模糊更少,能较好的保持边缘,但会使图像中的小目标丢失,因此对点、线和尖顶多的图像不宜采用中值滤波。

  • 双边滤波器的好处是可以做边缘保存,一般过去用的维纳滤波或者高斯滤波去降噪,都会较明显地模糊边缘,对于高频细节的保护效果并不明显。双边滤波顾名思义比高斯滤波多了一个高斯方差,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多的影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波因此,双边滤波器即平滑滤波了图像,又保持的图像边缘。虽然去噪效果很明显,但很多细节被去除,只有整体形状被保留,不过美颜相机磨皮恰恰就需要这种算法(如下图美女磨皮后的效果)。

  • 引导滤波不像高斯滤波等线性滤波算法所用的核函数相对于待处理的图像是独立无关的,而是在滤波过程中加入了引导图像中(去噪时用的就是图像本身)的信息,所以引导滤波本质上就是通过一张引导图I,对初始图像p(输入图像)进行滤波处理,使得最后的输出图像大体上与初始图像P相似,但是纹理部分与引导图I相似。在滤波效果上,引导滤波和双边滤波差不多,在一些细节上,引导滤波较好。

    引导滤波最大的优势在于能够保持线性复杂度,每个像素虽然由多个窗口包含,求某一点像素值的具体输出值时,只需将包含该点所有的线性函数值平均即可,而双边滤波不是线性复杂度在于他考虑了每个点的几何差距与强度差距两个因素,当处理图像较大时,运算量很明显会增大很多。

  • 非局部算法获得的信噪比比双边滤波略高,有时候还不如双边滤波。但是,非局部滤波是一种基于快的匹配度来计算滤波权值的,所以能获得比较好的视觉效果。然而,它的计算复杂度实在是太高了。最原始非局部均值算法是在整个图片中进行块搜索,根据块的匹配度来计算权值。实际执行过程,都会把搜索区域限定在一个局部的搜索窗口中。

  • BM3D算法是目前传统算法中效果最好的去噪算法,相比于NLM噪声更少,图像细节恢复更多,但算法复杂度实在太高,除非解决计算性能问题,不然至少工业界是无法容忍几分钟的处理时间进行降噪处理。

03 总结

图像去噪难点在于区别高频信号(如纹理、边缘)和噪声,去噪常用思想是利用图像的相似性。空域去噪是认为相近的点相似,通过平滑可以降低随机性的噪声,效果较好的去噪方法大多是多种方法结合,既能很好地保持边缘信息,又能去除图像中的噪声,比如将中值滤波和小波滤波结合起来进行滤波。

基本上传统的去噪算法都是从噪音图像中找出规律后再进行相对应的去噪处理。那么如果从有噪音的图片本身无法找到规律,我们是否也可以借助其他类似但又没有噪音的图片,来总结图片具有的固有属性呢?

深度学习方法是数据驱动的方法,在仿真图像去噪上,数据(也就是干净图像)是非常充足的,所以当前深度学习方法在高斯白噪声假设条件下的滤波问题中已经达到甚至超过BM3D算法。

深度学习的发展水平如何,就等待我们下一期文章吧。

[1] 龙鹏. MRI医学图像增强与分割新方法[D]. 中国科学院大学, 2015.

感谢各位看官的耐心阅读,不足之处希望多多指教。后续内容将会不定期奉上,欢迎大家关注有三公众号 有三AI

 

 

2016-08-02 18:16:05 balconychy 阅读数 967
图像降噪的本质是:从图像中去掉无关的信号。
假设噪音性质:平均值为零;则可以对像素点周围像素取平均值。

均值滤波:直接对周围像素取平均值;
注意到,不但对噪音信号进行平均,对要提取的图像信号也进行了平均,这导致了边缘的模糊。

高斯滤波
为了降低模糊的效果,采用高斯滤波;高斯滤波改变加权的权值,是得原始图像更突出。

中值滤波
高斯滤波对付幅度比较小的噪声比较有效,但对于峰值比较大的单点噪音效果不好。中值滤波取邻近像素的中值,可以想象对于平滑过渡的图像,中值滤波几乎在不影响原来平滑的画面的情况下可以很好的去掉极大和极小的噪点。但中值滤波对于尖角形状不友好,对其有圆滑的效果。

双边滤波
高斯滤波考虑了,距离的因素,距离越远,对当前像素的贡献越小。双边滤波在考虑空间距离的影响 的同时,在加权系数上同时考虑灰度或颜色距离的影响,灰度越接近,权重越高。因此,对梯度也就是边缘有很好的保留。

非局部均匀滤波
前面的考虑的都只是局部加权,通过寻找图像中相似的块来进行综合确定加权系数。

BM3D
BM3D也是一种非局部加权滤波,通过区块匹配(block mathing)的方式寻址类似区块,然后堆叠在一起形成3D,在对3D堆叠数据进行维纳斯滤波,最后对原始图像进行估计。实际的算法要复杂的多。


参考资料:
双边滤波器的原理及实现

BM3D
http://www.cs.tut.fi/~foi/GCF-BM3D/BM3D_TIP_2007.pdf



2017-07-29 04:16:28 linglian0522 阅读数 1910

图像去噪

减少数字图像中噪声的过程,广泛应用于图像处理领域的预处理过程,去噪效果的好坏会直接影响后续的图像处理效果,如图像分割、图像模式识别等。

噪声的产生

噪声只要产生于获取、传输图像的过程中。

常见的噪声有高斯噪声和椒盐噪声,其中高斯噪声主要由摄像机传感器元器件内部产生的,椒盐噪声主要是由图像切割所产生的黑白相间的亮暗点噪声,椒指黑色噪声,盐指白色噪声,还有另外泊松噪声,想继续了解的可以看这里浅析三种的噪声区别

f = imread('onion.png');
g = imnoise(f, 'salt & pepper', 0.05);
h = imnoise(f, 'gaussian', 0.05, 0.05);
subplot(1, 3, 1), imshow(f), title('原图');
subplot(1, 3, 2), imshow(g), title('椒盐');
subplot(1, 3, 3), imshow(h), title('高斯');

这里写图片描述

图像去噪

图像去噪可以分为空域和频域来完成。

空域图像去噪常用的有均值滤波算法和中值滤波算法(对像素做邻域的运算来达到去噪效果)。

f = imread('onion.png');
f = rgb2gray(f);
g = imnoise(f, 'salt & pepper', 0.05);
subplot(2, 2, 1), imshow(f), title('原图');
subplot(2, 2, 2), imshow(g), title('椒盐');
g1 = imfilter(g, fspecial('average'));
g2 = medfilt2(g, [5 5]);
subplot(2, 2, 3), imshow(g1), title('均值滤波');
subplot(2, 2, 4), imshow(g2), title('中值滤波');

这里写图片描述

可以看出来,去噪效果还是很明显的(中值滤波去除椒盐噪声)。
那高斯噪声怎么去除呢?用均值滤波可以减弱对高斯噪声的影响。

f = imread('onion.png');
f = rgb2gray(f);
h = imnoise(f, 'gaussian', 0, 0.025);
subplot(2, 2, 1), imshow(f), title('原图');
subplot(2, 2, 2), imshow(h), title('高斯');
subplot(2, 2, 3), imshow(wiener2(h, [5 5])), title('二维自适应除噪滤波器');
subplot(2, 2, 4), imshow(imfilter(h, fspecial('average', 5))), title('5*5 均值滤波');

这里写图片描述

function igo = myFun(f)

s = getStrelList();
e = erodeList(f, s);
g = getRateList(f, e);
igo = getRemoveResult(g, e);

end

function s = getStrelList()

s.co11 = strel('line', 5, -45);
s.co12 = strel('line', 7, -45);
s.co21 = strel('line', 5, 45);
s.co22 = strel('line', 7, 45);
s.co31 = strel('line', 3, 90);
s.co32 = strel('line', 5, 90);
s.co41 = strel('line', 3, 0);
s.co42 = strel('line', 5, 0);

end

function e = erodeList(ig, s)

e.eroded_co11 = imerode(ig, s.co11);
e.eroded_co12 = imerode(e.eroded_co11, s.co12);
e.eroded_co21 = imerode(ig, s.co21);
e.eroded_co22 = imerode(e.eroded_co21, s.co22);
e.eroded_co31 = imerode(ig, s.co31);
e.eroded_co32 = imerode(e.eroded_co31, s.co32);
e.eroded_co41 = imerode(ig, s.co41);
e.eroded_co42 = imerode(e.eroded_co41, s.co42);

end

function f = getRateList(ig, e)

f.df1 = sum(sum(abs(double(e.eroded_co12) - double(ig))));
f.df2 = sum(sum(abs(double(e.eroded_co22) - double(ig))));
f.df3 = sum(sum(abs(double(e.eroded_co32) - double(ig))));
f.df4 = sum(sum(abs(double(e.eroded_co42) - double(ig))));

f.df = sum([f.df1 f.df2 f.df3 f.df4]);

end

function igo = getRemoveResult(f, e)

igo = f.df1 / f.df * double(e.eroded_co12) + f.df2 / f.df * double(e.eroded_co22) + ...
    f.df3 / f.df * double(e.eroded_co32) + f.df4 / f.df ...
    * double (e.eroded_co42);
igo = mat2gray(igo);

end
f = imread('人像.jpg');
h = imnoise(f, 'poisson');
r = h(:, :, 1);
g = h(:, :, 2);
b = h(:, :, 3);
subplot(2, 2, 1), imshow(f), title('原图');
subplot(2, 2, 2), imshow(h), title('泊松');
subplot(2, 2, 3), imshow(cat(3, imfilter(r, fspecial('average', 5)), imfilter(g, fspecial('average', 5)), imfilter(b, fspecial('average', 5)))), title('5*5 均值滤波');
subplot(2, 2, 4), imshow(cat(3, myFun(r), myFun(g), myFun(b))), title('形态学滤波');

这里写图片描述

感觉没什么太大的区别,要说的话,就是形态学保留了原先的色彩细节,均值的话,就有点失去了的意思(感觉像是磨皮- -)。

没有更多推荐了,返回首页