图像处理进行平滑去噪处理

2014-07-25 16:21:11 EbowTang 阅读数 9647
  • 图像防抖

    通过本课程的学习,可以对数字成像系统知识整体上得到理解,在相机等成像产品的开发中,获得理论与实际的帮助。

    589人学习 姜卓
    免费试看

一,背景

 

随着各种数字仪器和数码产品的普及,图像和视频已成为人类活动中最常用的信息载体,它们包含着物体的大量信息,成为人们获取外界原始信息的主要途径。然而在图像的获取、传输和存贮过程中常常会受到各种噪声的干扰和影响而使图像降质,并且图像预处理算法的好坏又直接关系到后续图像处理的效果,如图像分割、目标识别、边缘提取等,所以为了获取高质量数字图像,很有必要对图像进行降噪处理,尽可能的保持原始信息完整性(即主要特征)的同时,又能够去除信号中无用的信息。所以,降噪处理一直是图像处理和计算机视觉研究的热点。

图像视频去噪的最终目的是改善给定的图像,解决实际图像由于噪声干扰而导致图像质量下降的问题。通过去噪技术可以有效地提高图像质量,增大信噪比,更好的体现原来图像所携带的信息,作为一种重要的预处理手段,人们对图像去噪算法进行了广泛的研究。在现有的去噪算法中,有的去噪算法在低维信号图像处理中取得较好的效果,却不适用于高维信号图像处理;或者去噪效果较好,却丢失部分图像边缘信息,或者致力于研究检测图像边缘信息,保留图像细节。如何在抵制噪音和保留细节上找到一个较好的平衡点,成为近年来研究的重点。

 

二,图像去噪理论基础

 

2.1 图像噪声概念

噪声可以理解为“妨碍人们感觉器官对所接收的信源信息理解的因素”。例如,一幅黑白图片,其平面亮度分布假定为f(x,y),那么对其接收起干扰作用的亮度分布R(x,y),即可称为图像噪声。但是,噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”。因此将图像噪声看成是多维随机过程是合适的,因而描述噪声的方法完全可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。但在很多情况下,这样的描述方法是很复杂的,甚至是不可能的。而实际应用往往也不必要。通常是用其数字特征,即均值方差,相关函数等。因为这些数字特征都可以从某些方面反映出噪声的特征。

 

2.2 常见的图像噪声

在我们的图像中常见的噪声主要有以下几种:

(1),加性噪声

加性嗓声和图像信号强度是不相关的,如图像在传输过程中引进的“信道噪声”电视摄像机扫描图像的噪声的。这类带有噪声的图像g可看成为理想无噪声图像f与噪声n之和,即:

image

(2),乘性噪声

乘性嗓声和图像信号是相关的,往往随图像信号的变化而变化,如飞点扫描图像中的嗓声、电视扫描光栅、胶片颗粒造成等,这类噪声和图像的关系是:

image

(3),量化噪声

量化嗓声是数字图像的主要噪声源,其大小显示出数字图像和原始图像的差异,减少这种嗓声的最好办法就是采用按灰度级概率密度函数选择化级的最优化措施。

(4),“椒盐”噪声

此类嗓声如图像切割引起的即黑图像上的白点,白图像上的黑点噪声,在变换域引入的误差,使图像反变换后造成的变换噪声等。

 

2.3 图像噪声模型

实际获得的图像含有的噪声,根据不同分类可将噪声进行不同的分类。从噪声的概率分情况来看,可分为高斯噪声、瑞利噪声、伽马噪声、指数噪声和均匀噪声。它们对应的概率密度函数(PDF)如下

(1),高斯噪声

在空间域和频域中,由于高斯噪声在数学上的易处理性,这种噪声(也称为正态噪声)模型经常被用在实践中。高斯随机变量Z的PDF由下式给出:

image

其中,z表示灰度值,μ表示z的平均值或期望值,α表示z的标准差。当z服从上述分布时,其值有95%落在[(μ-2σ), (μ+2σ)]范围内。

(2)脉冲噪声(椒盐噪声)

(双极)脉冲噪声的PDF可由下式给出:

image

如果b>a,则灰度值b在图像中将显示为一个亮点,反之则a的值将显示为一个暗点。若Pa或Pb为零,则脉冲称为单极脉冲。如果Pa和Pb均不可能为零,尤其是它们近似相等时,则脉冲噪声值将类似于随机分布在图像上的胡椒和盐粉微粒。由于这个原因,双极脉冲噪声也称为椒盐噪声。

(3)瑞利噪声

image

其均值和方差分别为:

image

(4)伽马噪声

image

其密度的均值和方差为:

image

(5)指数分布噪声

image

其中a>0,概率密度函数的期望值和方差是:

image

(6)均匀噪声

image

其均值和方差分别为:

image

 

2.4 图像去噪算法分类

(1),空间域滤波

空域滤波是在原图像上直接进行数据运算,对像素的灰度值进行处理。常见的空间域图像去噪算法有邻域平均法、中值滤波、低通滤波等。

(2),变换域滤波

图像变换域去噪方法是对图像进行某种变换,将图像从空间域转换到变换域,再对变换域中的变换系数进行处理,再进行反变换将图像从变换域转换到空间域来达到去除图像嗓声的目的。将图像从空间域转换到变换域的变换方法很多,如傅立叶变换、沃尔什-哈达玛变换、余弦变换、K-L变换以及小波变换等。而傅立叶变换和小波变换则是常见的用于图像去噪的变换方法。

(3),偏微分方程

偏微分方程是近年来兴起的一种图像处理方法,主要针对低层图像处理并取得了很好的效果。偏微分方程具有各向异性的特点,应用在图像去噪中,可以在去除噪声的同时,很好的保持边缘。偏微分方程的应用主要可以分为两类:一种是基本的迭代格式,通过随时间变化的更新,使得图像向所要得到的效果逐渐逼近,这种算法的代表为Perona和Malik的方程[27],以及对其改进后的后续工作。该方法在确定扩散系数时有很大的选择空间,在前向扩散的同时具有后向扩散的功能,所以,具有平滑图像和将边缘尖锐化的能力。偏微分方程在低噪声密度的图像处理中取得了较好的效果,但是在处理高噪声密度图像时去噪效果不好,而且处理时间明显高出许多。

(4),变分法

另一种利用数学进行图像去噪方法是基于变分法的思想,确定图像的能量函数,通过对能量函数的最小化工作,使得图像达到平滑状态,现在得到广泛应用的全变分TV模型就是这一类。这类方法的关键是找到合适的能量方程,保证演化的稳定性,获得理想的结果。

(5),形态学噪声滤除器

将开与闭结合可用来滤除噪声,首先对有噪声图像进行开运算,可选择结构要素矩阵比噪声尺寸大,因而开运算的结果是将背景噪声去除;再对前一步得到的图像进行闭运算,将图像上的噪声去掉。据此可知,此方法适用的图像类型是图像中的对象尺寸都比较大,且没有微小细节,对这类图像除噪效果会较好。

 

三,几种图像去噪算法介绍

 

3.1 基于空间域的中值滤波

中值滤波器是一种常用的非线性平滑滤波器,基本原理是把数字图像或数字序列中一点的值用该点邻域内各点的中值代换。设f(x,y)表示数字图像像素点(x,y)的灰度值,滤波窗口为A的中值滤波器可以定义为:

image

当n为奇数时,n个数x1,x2,…xn的中值就是按数值大小顺序处于中间的数;当n为偶数时,我们定义两个中间数平均值为中值。

 

3.2 基于小波域的小波阈值去噪

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

阈值的选择:

阈值的确定在阈值萎缩中是最关键的。目前使用的阈值可以分成全局阈值和局部适应阈值两类。其中,全局阈值对各层所有的小波系数或同一层内的小波系数都是统一的;而局部适应阈值是根据当前系数周围的局部情况来确定阈值。目前提出的全局阈值主要有以下几种:

(1),Donoho和Johastone统一阈值(简称DJ阈值):

其中σ为噪声标准方差,N为信号的尺寸或长度。

image

(2),基于零均值正态分布的置信区间阈值:

image

(3),Bayes Shrink阈值和Map Shrink阈值。在小波系数服从广义高斯分布的假设下,Chang等人得出了阈值:

image

其中,(R为噪声标准方差,RB为广义高斯分布的标准方差值)。

(4),最小最大化值:这是Donoho和John Stone在最小最大化意义下得出的阈值与上边的阈值不同,它是依赖于信号的,而且没有显式表达式,在求取时需要预先知道原信号。

(5),理想值:理想阈值是在均方差准则下的最优阈值,同最大最小化阈值一样,也没有显式的表达式,并且这个阈值的计算通常也需先知道信号本身。

阈值函数:

Bruce和Gao。提出了一种半软阈值函数:

image

该方法通过选择合适的阈值T1和12,可以在软阈值方法和硬阈值方法之间达到很好的折中。另外,zhang等人为了对SIJRE误差准则函数进行基于梯度的优化搜索,提出了另外一种阈值函数,这种阈值函数同上边闭值函数所不同的是它拥有更高的导数阶,故其重建图像更为平滑,但该文作者将去噪效果的提高归功于搜索方法,其实,Donoh。和 Johnstone提出的在当前小波系数集合中,搜索最优阈值的方法,对于当前已经是优的了,由此可见,该去噪效果的提高则应归功于阈值函数的选取。

 

3.3 基于PDE的图像去噪

目前,基于PDE的图像处理方法的研究,也是图像去噪的研究热点方向,并且己经取得了一定的理论和实际应用方面的成它的去噪过程为通过建立噪声图像为某非线性PDE的初始条件,然后求解这个PDE,得到在不同时刻的解,即为滤波结果。Perona和Malik提出了基于PDE的非线性扩散滤波方法(以下简称P-M),各向异性的去噪模型根据图像的梯度值决定扩散的速度,使之能兼顾噪声消除和边缘保持两方面的要求。

以P-M模型为代表的这类方法己经在图像增强、图像分割和边缘检测等领域得到了广泛的应用,取得了很好的效果。

P-M是一种非线性的各向异性方法,目的是为了克服线性滤波方法存在的模糊边缘和边缘位置移动的缺点。基本思想是:图像特征强的地方减少扩散系数,图像特征弱的地方增强扩散系数。方程如下:

image

其中u(x,y,t)是随时间变化的图像,image是梯度的模,image扩散系数函数用于控制扩散速度。理想的扩散系数应当使各向异性扩散在灰度变化平缓的区域快速进行,而在灰度变化急剧的位置(即图像特征处)低速扩散乃至不扩散函数,所以,image应具有如下性质:

image

基于以上的两个性质,P-M提出了如下扩散系数函数:

image

其中k为边缘阈值,用来判断边缘区域和平坦区域。引入通量函数,主要是为了阐明阈值k在扩散操作中的作用,其函数定义如下:

image

尽管P-M方程在抑制噪声与保留图像重要特征方面取得了一定的效果,但却表现出病态且不稳定。Catt等人对该方程进行了改进,他们先用高斯核同图像作卷积,然后取其梯度模作图像边缘信息的估计。文献提出用优化的对称指数滤波器对图像作光滑,然后取其梯度模作图像边缘信息的估计。这两种估计方法的基本思想是降低噪声的干扰,更加真实地提取图像的边缘特征信息,以便利用边缘信息更好地控制P-M方程的扩散行为。

 

3.4 全变分(TV)图像去噪

TV方法是由Rudin Osher and Fatemi提出,它基于变分法的思想,确定图像的能量函数,通过对图像能量函数最小化达到平滑去噪的目的。是现在比较流行的图像复原方法。图像的能量函数方程为:

image

在文献[2]中给出的全变分去噪能量泛函为:

image

为了使得能量函数最小,其欧拉-拉格朗日方程为:

image

其中,梯度算子:

image

正则项:

image

用来减少平坦区域的退化。将整体左边转换成图像中任意像素点中的局部坐标系后,方程可以分解成边缘方向和边缘正交的两个方向,分解后个方向的系数控制着该方向的扩散强度。扩散方向实际上是一个分线性的各向异性的扩散方程,其扩散算子仅沿图像梯度的正交方向扩散,扩散系数为1/|▽μ|,而朝着梯度方向无扩散。这样可以通过图像的梯度来判断边缘位置,使得边缘扩散系数最小,从而降低对边缘的模糊程度,但是也由于边缘的扩散系数小,噪声得不到很好的抑制,而且当|▽μ|>λ的时候,势能函数是非凸的,使得边缘处处理表现不稳定。所以,如何确定扩散参数的值是一个问题。


四,评价图像质量的客观参数

客观评价算法根据其对参考图像的依赖程度, 可分成三类。

(1)全参考:需要和参考图像上的像素点做一一对应的比较;

(2)半参考:只需要和参考图像上的部分统计特征做比较;

(3)无参考:不需要具体的参考图像。其中全参考算法是研究时间最长、发展最成熟的部分

a,PNSR峰值信噪比


b,ENL等效视数


c,SNR信噪比


引用别人的一片博客:

Lin Zhang等人在论文《A COMPREHENSIVEEVALUATION OF FULL REFERENCE IMAGE QUALITY ASSESSMENT ALGORITHMS》中,比较了几种全参考图像质量评价算法,在此记录一下他们的结果。

下表所示是他们所用的图像库,包含了:TID2008databaseCSIQ databaseLIVEdatabaseIVCdatabaseToyama-MICTdatabaseCornell A57 database,以及 WirelessImaging Quality database (WIQ)。从上到下数据库的规模依次下降。


一共比较了如下所列的全参考图像客观质量评价算法:

PeakSignal to Noise Ratio(PSNR)

峰值信噪比。

noise quality measure (NQM) index

参考文献:N. Damera-Venkata, T.D. Kite, W.S. Geisler, B.L. Evans, and A.C.Bovik, “Image quality assessment based on a degradation model,” IEEE Trans. IP,vol. 9, pp. 636-650, 2000.

universal quality index (UQI)

参考文献:Z. Wang and A.C. Bovik, “A universal image quality index,” IEEE SignalProcess. Lett., vol. 9, pp. 81-84, 2002.

structural similarity (SSIM) index

参考文献:Z. Wang, A.C. Bovik, H.R. Sheikh, and E.P. Simoncelli,”Image qualityassessment: from error visibility to structural similarity,” IEEE Trans. IP,vol. 13, pp. 600-612, 2004.

multi-scaleSSIM (MS-SSIM) index

参考文献:Z. Wang, E.P. Simoncelli, and A.C. Bovik, “Multi-scale structuralsimilarity for image quality assessment,” ACSSC’03, pp. 1398-1402, 2003.

information fidelity criterion (IFC) index

参考文献:H.R. Sheikh, A.C. Bovik, and G. de Veciana, “An information fidelitycriterion for image quality assessment using natural scene statistics,” IEEETrans. IP, vol. 14, pp. 2117-2128, 2005.

visual information fidelity (VIF) index

参考文献:H.R. Sheikh and A.C. Bovik, “Image information and visual quality,”IEEE Trans. IP, vol. 15, pp. 430-444, 2006.

visual signal to noise ratio (VSNR) index

参考文献:D.M. Chandler and S.S. Hemami, “VSNR: a wavelet-based visualsignal-to-noise ratio for natural images,” IEEE Trans. IP, vol. 16, pp.2284-2298, 2007.

information content weighted SSIM (IW-SSIM) index

参考文献:Z. Wang and Q. Li, “Information content weighting for perceptualimage quality assessment,” IEEE Trans. IP, vol. 20,

pp. 1185-1198, 2011.

Riesz transforms based feature similarity (RFSIM) index

参考文献:L. Zhang, L. Zhang, and X. Mou, “RFSIM: a feature based imagequality assessment metric using Riesz transforms,” ICIP’10, pp. 321-324, 2010.

feature similarity (FSIM) index

参考文献:L. Zhang, L. Zhang, X. Mou, and D. Zhang, “FSIM: a feature similarityindex for image quality assessment,” IEEE Trans. IP, vol. 20, pp. 2378-2386,2011.

 

统计了每种全参考图像质量评价算法的客观值和主观值之间的相关系数:

斯皮尔曼秩相关系数(Spearman rankorder correlation coefficient,SROCC),肯德尔秩次相关系数(Kendallrank-order correlation coefficient,KROCC),皮尔森线性相关系数(Pearsonlinear correlation coefficient,PLCC)。客观算法的结果和主观评价的结果相关性越高,则以上三个系数的值越接近于1,说明算法越准确。由表可见,FSIM算法的准确度相对来说是最高的,三个系数的取值分分别达到了0.9094,0.7409,0.9050。


下表将上表的数值进行了一下排名。排在前面的有FSIM,IW-SSIM,RFSIM,MS-SSIM。猛然发现:PSNR真的是好不准啊~~

下表反映了每种全参考质量评价算法的耗时,耗时越短,说明算法速度越快。


总体说来FSIM,IW-SSIM,RFSIM这三种比较新的图像质量评价算法准确性比较高




五,总结

随着科技的发展和工作生活的需要,数字图像滤波应用将越来越广泛,要求也将越来越高。到目前为止,仍有很多去噪方面的新思想、新方法出现,不断的充实图像去噪方法。而且,噪声的研究范围也在不断扩大,由高斯噪声到非高斯噪声。去噪技术有很广泛的应用和研究的前景,而且,研究领域也在不断的拓展。

本文主要的内容是对图像的去噪技术做一个简单的介绍。全文对图像去噪技术进行了概述,包括噪声的概念和去噪原理,并对一些基本的图像去噪方法做了介绍。由于时间关系,并且这是导论课程的论文作业,就没有进行深入细致的研究。

 

参考文献

[1] GonzalesRC,WoodsRE.DigitalImageProeessing,SeeondEdition Beijing Eleetronieand Industrial Press,2002

[2] Leonid I. Rudin 1, Stanley Osher and Emad Fatemi Nonlinear total variation based noise removal algorithms 1992

[3] W.Luo,An efficient detail preserving approach for removing impulse noise in images,IEEE Signal Proeess.Lett.,2006,13(7):413-416.

[4] http://blog.csdn.net/coloriy/article/details/46532171

2013-03-28 00:09:39 Sun1956 阅读数 10122
  • 图像防抖

    通过本课程的学习,可以对数字成像系统知识整体上得到理解,在相机等成像产品的开发中,获得理论与实际的帮助。

    589人学习 姜卓
    免费试看

第一种方法:高斯模版

以下文字内容copy于<<数字图像处理编程入门>>,code为自己实现,是win32控制台程序。

先举个例子说明一下什么是平滑(smoothing),如下面两幅图所示:可以看到,图3.2比图3.1柔和一些(也模糊一些)。是不是觉得很神奇?其实实现起来很简单。我们将原图中的每一点的灰度和它周围八个点的灰度相加,然后除以9,作为新图中对应点的灰度,就能实现上面的效果。


这么做并非瞎蒙,而是有其道理的。大概想一想,也很容易明白。举个例子,就象和面一样,先在中间加点水,然后不断把周围的面和进来,搅拌几次,面就均匀了。

用信号处理的理论来解释,这种做法实现的是一种简单的低通滤波器(low pass filter)。哇,好深奥呀!不要紧,这些理论的内容并不多,而且知道一些理论也是很有好处的。在灰度连续变化的图象中,如果出现了与相邻象素的灰度相差很大的点,比如说一片暗区中突然出现了一个亮点,人眼能很容易觉察到。就象看老电影时,由于胶片太旧,屏幕上经常会出现一些亮斑。这种情况被认为是一种噪声。灰度突变在频域中代表了一种高频分量,低通滤波器的作用就是滤掉高频分量,从而达到减少图象噪声的目的。

为了方便地叙述上面所说的“将原图中的每一点的灰度和它周围八个点的灰度相加,然后除以9,作为新图中对应点的灰度”这一操作,我们采用如下的表示方法:

(3.1)

这种表示方法有点象矩阵,我们称其为模板(template)。中间的黑点表示中心元素,即,用哪个元素做为处理后的元素。例如[2. 1]表示将自身的2倍加上右边的元素作为新值,而[2 1.]表示将自身加上左边元素的2倍作为新值。

通常,模板不允许移出边界,所以结果图象会比原图小,例如模板是,原图是,经过模板操作后的图象为;其中数字代表灰度,x表示边界上无法进行模板操作的点,通常的做法是复制原图的灰度,不进行任何处理。

模板操作实现了一种邻域运算(NeighborhoodOperation),即某个象素点的结果灰度不仅和该象素灰度有关,而且和其邻域点的值有关。在以后介绍的细化算法中,我们还将接触到邻域运算。模板运算的数学涵义是一种卷积(或互相关)运算,你不需要知道卷积的确切含义,只要有这么一个概念就可以了。

模板运算在图象处理中经常要用到,可以看出,它是一项非常耗时的运算。以

                                                                                        (3.2)

为例,每个象素完成一次模板操作要用9个乘法、8个加法、1个除法。对于一幅n×n(宽度×高度)的图象,就是9n2个乘法,8n2个加法和n2个除法,算法复杂度为O(n2),这对于大图象来说,是非常可怕的。所以,一般常用的模板并不大,如3×3,4×4。有很多专用的图象处理系统,用硬件来完成模板运算,大大提高了速度。另外,可以设法将二维模板运算转换成一维模板运算,对速度的提高也是非常可观的。例如,(3.2)式可以分解成一个水平模板和一个垂直模板,即,


(3.3)

我们来验证一下。

设图象为 ,经过(3.2)式处理后变为,经过(3.3)式处理后变为,两者完全一样。如果计算时不考虑周围一圈的象素,前者做了4×(9个乘法,8个加法,1个除法),共36个乘法,32个加法,4个除法;后者做了4×(3个乘法,2个加法)+4×(3个乘法,2个加法)+4个除法,共24个乘法,16个加法,4个除法,运算简化了不少,如果是大图,效率的提高将是非常客观的。

平滑模板的思想是通过将一点和周围8个点作平均,从而去除突然变化的点,滤掉噪声,其代价是图象有一定程度的模糊。上面提到的模板(3.1),就是一种平滑模板,称之为Box模板。Box模板虽然考虑了邻域点的作用,但并没有考虑各点位置的影响,对于所有的9个点都一视同仁,所以平滑的效果并不理想。实际上我们可以想象,离某点越近的点对该点的影响应该越大,为此,我们引入了加权系数,将原来的模板改造成,可以看出,距离越近的点,加权系数越大。

新的模板也是一个常用的平滑模板,称为高斯(Gauss)模板。为什么叫这个名字,这是因为这个模板是通过采样2维高斯函数得到的。

设图象为 ,分别用两种平滑模板处理(周围一圈象素直接从原图拷贝)。采用Box模板的结果为,采用高斯模板的结果为

可以看到,原图中出现噪声的区域是第2行第2列和第3行第2列,灰度从2一下子跳到了6,用Box模板处理后,灰度从3.11跳到4.33;用高斯模板处理后,灰度从3.跳到4.56,都缓和了跳变的幅度,从这一点上看,两者都达到了平滑的目的。但是,原图中的第3,第4行总的来说,灰度值是比较高的,经模板1处理后,第3行第2列元素的灰度变成了4.33,与第3,第4行的总体灰度相比偏小,另外,原图中第3行第2列元素的灰度为6,第3行第3列元素的灰度为4,变换后,后者4.56反而比前者4.33大了。而采用高斯模板没有出现这些问题,究其原因,就是因为它考虑了位置的影响。

举个实际的例子:下图中,从左到右分别是原图,用高斯模板处理的图,用Box模板处理的图,可以看出,采用高斯模板,在实现平滑效果的同时,要比Box模板清晰一些。

功能实现函数代码:

double tem[9] = {1.0,2.0,1.0,2.0,4.0,2.0,1.0,2.0,1.0};
void smooth()
{
	int height = bmpInfoHeader.biHeight;   
	int width = bmpInfoHeader.biWidth;  
	int imgSize = bmpInfoHeader.biSizeImage;
	int lineByte = (width * 8 +31) / 32 * 4;  //每行像素所占字节数
	//处理是基于原图的,所以原图的数据不能改变,用pNewBmpData存储改变之后的数据
	memcpy(pNewBmpData,pBmpData,imgSize);   //把原图数据复制给pNewBmpData
	double sum;
	for(int i = 1; i < height - 1; i++ )
	{
		for(int j = 1; j < width - 1; j++ )
		{
			sum = 0;    //清零
			sum += (double)(*(pBmpData + (i-1) * lineByte + j - 1)) * tem[0];   //该点左下角
			sum += (double)(*(pBmpData + (i-1) * lineByte + j)) * tem[1];		//下
			sum += (double)(*(pBmpData + (i-1) * lineByte + j + 1)) * tem[2];  //右下
			sum += (double)(*(pBmpData + i * lineByte + j - 1)) * tem[3];  //左
			sum += (double)(*(pBmpData + i * lineByte + j)) * tem[4];  //该点位置
			sum += (double)(*(pBmpData + i * lineByte + j + 1)) * tem[5];  //右
			sum += (double)(*(pBmpData + (i+1) * lineByte + j - 1)) * tem[6];  //左上
			sum += (double)(*(pBmpData + (i+1) * lineByte + j)) * tem[7];   //上
			sum += (double)(*(pBmpData + (i+1) * lineByte + j + 1)) * tem[8];  //右上
			*(pNewBmpData + i * lineByte + j) = (unsigned char)(sum / 16.0);   
		}
	}
}

第二种方法:中值滤波

中值滤波也是一种典型的低通滤波器,它的目的是保护图象边缘的同时去除噪声。所谓中值滤波,是指把以某点(x,y)为中心的小窗口内的所有象素的灰度按从大到小的顺序排列,将中间值作为(x,y)处的灰度值(若窗口中有偶数个象素,则取两个中间值的平均)。中值滤波是如何去除噪声的呢?举个例子就很容易明白了。


图中数字代表该处的灰度。可以看出原图中间的6和周围的灰度相差很大,是一个噪声点。经过3×1窗口(即水平3个象素取中间值)的中值滤波,得到右边那幅图,可以看出,噪声点被去除了。

下面将中值滤波和上面介绍的两种平滑模板作个比较,看看中值滤波有什么特点。我们以一维模板为例,只考虑水平方向,大小为3×1(宽×高)。Box模板为 ,高斯模板为

先考察第一幅图:


从原图中不难看出左边区域灰度值低,右边区域灰度值高,中间有一条明显的边界,这一类图象称之为“step”(就象灰度上了个台阶)。应用平滑模板后,图象平滑了,但是也使边界模糊了。应用中值滤波,就能很好地保持原来的边界。所以说,中值滤波的特点是保护图象边缘的同时去除噪声。

再看第二幅图:


不难看出,原图中有很多噪声点(灰度为正代表灰度值高的点,灰度为负代表灰度值低的点),而且是杂乱无章,随机分布的。这也是一类很典型的图,称之为高斯噪声。经过Box平滑,噪声的程度有所下降。Gauss模板对付高斯噪声非常有效。而中值滤波对于高斯噪声则无能为力。

最后看第三幅图:


从原图中不难看出,中间的灰度要比两边高许多。这也是一类很典型的图,称之为脉冲 (impulse)。可见,中值滤波对脉冲噪声非常有效。

综合以上三类图,不难得出下面的结论:中值滤波容易去除孤立点,线的噪声同时保持图象的边缘;它能很好的去除二值噪声,但对高斯噪声无能为力。要注意的是,当窗口内噪声点的个数大于窗口宽度的一半时,中值滤波的效果不好。这是很显然的。

CODE:

/**
* 函数名: medianFilter
* 功  能: 对图像进行水平中值滤波处理
*/
void medianFilter()
{
	int height = bmpInfoHeader.biHeight;   
	int width = bmpInfoHeader.biWidth;  
	int imgSize = bmpInfoHeader.biSizeImage;
	int lineByte = (width * 8 +31) / 32 * 4;  //每行像素所占字节数
	//处理是基于原图的,所以原图的数据不能改变,用pNewBmpData存储改变之后的数据
	memcpy(pNewBmpData,pBmpData,imgSize);   //把原图数据复制给pNewBmpData
	unsigned char g[3];   //要取的三个点
	//注意边界点不处理,所以i从1到高度-2,j类似
	for(int i = 1; i < height - 1; i++ )
	{
		for(int j = 1; j < width - 1; j++ )
		{
			g[0] = *(pBmpData + i * lineByte + j - 1);
			g[1] = *(pBmpData + i * lineByte + j);
			g[2] = *(pBmpData + i * lineByte + j + 1);
			sort(g,g+3);   //排序
			*(pNewBmpData + i * lineByte + j) = g[1];
		}
	}
}


2019-04-17 14:47:18 molihong28 阅读数 388
  • 图像防抖

    通过本课程的学习,可以对数字成像系统知识整体上得到理解,在相机等成像产品的开发中,获得理论与实际的帮助。

    589人学习 姜卓
    免费试看

1.均值滤波
所谓均值滤波顾名思义即对原图的一个小区域内(如3x3)中所有像素取平均值:
在这里插入图片描述
常用的滤波器有4领域,8邻域及除去自身的8邻域:
在这里插入图片描述
2.加权平均滤波
加权平均滤波与上面的均值滤波类似,但会做加权平均,即在前面乘上一个对应的系数:
在这里插入图片描述
常用的滤波器有2种(3x3),一种是中心点权值是2其余为1,另一种是高斯滤波器,即中心点权值为4,其4领域的权值为2,其余为1:
在这里插入图片描述
3.中值滤波
中值滤波与上面的两种最大的不同之处在于他是一种非线性的滤波方式。
在这里插入图片描述
对比
(1)均值滤波能够滤除白噪声,但会使原始图像丢掉一些细节(原图变得模糊)
(2)加权均值滤波(高斯滤波)也可以有效的滤除白噪声,同时不会丢掉原图中的细节(甚至原图更清晰)
(3)中值滤波可以有效滤除椒盐噪声

4.基于形态学操作

膨胀
腐蚀
开运算:先腐蚀后膨胀 :可以减少原图中的毛刺
闭运算:先膨胀后腐蚀: 可以将原图中的小孔给填充上

2019-03-03 15:42:00 weixin_34301307 阅读数 322
  • 图像防抖

    通过本课程的学习,可以对数字成像系统知识整体上得到理解,在相机等成像产品的开发中,获得理论与实际的帮助。

    589人学习 姜卓
    免费试看

图像去噪定义

图像去噪是指减少数字图像中噪声的过程称为图像去噪。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。

噪声分类

按照噪声组成来分

   f(x,y)表示给定原始图象,g(x,y)表示图象信号,n(x,y)表示噪声。

(1)加性噪声,此类噪声与输入图象信号无关,含噪图象可表示为f(x,y)=g(x,y)+n(x,y),信道噪声及光导摄像管的摄像机扫描图象时产生的噪声就属这类噪声;典型的加性噪声有高斯噪声,

(2)乘性噪声,此类噪声与图象信号有关,含噪图象可表示为f(x,y)=g(x,y)+n(x,y)g(x,y),飞点扫描器扫描图象时的噪声,电视图象中的相关噪声,胶片中的颗粒噪声就属于此类噪声;

(3)量化噪声,此类噪声与输入图象信号无关,是量化过程存在量化误差,再反映到接收端而产生。

按照噪声密度分布:

(1)高斯噪声:指噪声服从高斯分布,即某个强度的噪声点个数最多,离这个强度越远噪声点个数越少,且这个规律服从高斯分布。高斯噪声是一种加性噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除。

(2)椒盐噪声(脉冲噪声):类似把椒盐撒在图像上,因此得名,是一种在图像上出现很多白点或黑点的噪声,如电视里的雪花噪声等。椒盐噪声可以认为是一种逻辑噪声,用线性滤波器滤除的结果不好,一般采用中值滤波器滤波可以得到较好的结果。

(3)均匀噪声:是指功率谱密度(信号功率在频域的分布状况)在整个频域内是常数的噪声。 所有频率具有相同能量密度的随机噪声称为白噪声。

(4)瑞利噪声:噪声分布为瑞利分布。

(5)指数噪声:噪声分布为指数分布。

(6)伽马噪声:噪声分布为瑞利分布。

(以下是对图像加入高斯,椒盐等噪声的python代码) 

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Sat Mar  2 14:00:30 2019
 4 
 5 @author: Administrator
 6 """
 7 
 8 '''
 9 图像添加噪声,去除噪声
10 '''
11 import matplotlib.pyplot as plt 
12 import numpy as np
13 from skimage.util import random_noise
14 from PIL import Image 
15 
16 img = plt.imread('F:/python编程/自己的博客园代码/picture_process/example.jpg')
17 
18 fig = plt.figure(figsize = (8.0,6.0))
19 ax1 = fig.add_subplot(2,3,1)
20 ##  show the original picture
21 ax1.imshow(img)
22 plt.title('original_picture')
23 
24 ## gray_picture
25 gravity= np.array([0.299,0.587,0.114])
26 #red*0.299+green*0.587+blue*0.114
27 img_gravity=np.dot(img,gravity)
28 ax2 = fig.add_subplot(2,3,2)
29 ##  show the gray_picture
30 ax2.imshow(img_gravity,cmap='gray')
31 plt.title('gray_picture')
32 
33 
34 img_gaussian =  random_noise(img, mode='gaussian', seed=100, clip=True)
35 ax3 = fig.add_subplot(2,3,3)
36 ax3.imshow(img_gaussian)
37 plt.title('add_gaussian')
38 
39 
40 img_salt =  random_noise(img, mode='salt', seed=100, clip=True)
41 ax4 = fig.add_subplot(2,3,4)
42 ax4.imshow(img_salt)
43 plt.title('add_salt')
44 
45 
46 img_pepper =  random_noise(img, mode='pepper', seed=100, clip=True)
47 ax4 = fig.add_subplot(2,3,5)
48 ax4.imshow(img_pepper)
49 plt.title('add_pepper')
50 
51 
52 img_sp =  random_noise(img, mode='s&p', seed=100, clip=True)
53 ax4 = fig.add_subplot(2,3,6)
54 ax4.imshow(img_sp)
55 plt.title('add_sp')
View Code

去噪方法

中值滤波:

  中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。

高斯滤波:

  高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

均值滤波:

  均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。

维纳滤波:

  维纳滤波(wiener filtering) 一种基于最小均方误差准则、对平稳过程的最优估计器。这种滤波器的输出与期望输出之间的均方误差为最小,因此,它是一个最佳滤波系统。它可用于提取被平稳噪声所污染的信号。

傅里叶滤波简称fft,是通过对图片信号在频域里进行滤波,从而达到去噪效果。

 (以下是几种滤波方法(不一定全)在python代码中的应用)

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Sat Mar  2 21:17:58 2019
 4 
 5 @author: Administrator
 6 """
 7 
 8 '''
 9 图像去除噪声
10 '''
11 import matplotlib.pyplot as plt 
12 import numpy as np
13 from skimage.util import random_noise
14 from PIL import Image 
15 import cv2
16 
17 img = plt.imread('F:/python编程/自己的博客园代码/picture_process/gaussian_picture.jpg')
18 fig = plt.figure(figsize=(8.0,6.0))
19 ax1 = fig.add_subplot(2,3,1)
20 ax1.imshow(img)
21 plt.title('blur_picture')
22 
23 ###  中值滤波
24 median_filter_img = cv2.medianBlur(img, 3)
25 ax2 = fig.add_subplot(2,3,2)
26 ax2.imshow(median_filter_img)
27 plt.title('median_filter')
28 
29 #### 高斯滤波
30 Gaussian_filter_img = cv2.GaussianBlur(img, (3,3), 0)
31 ax2 = fig.add_subplot(2,3,3)
32 ax2.imshow(Gaussian_filter_img)
33 plt.title('Gaussian_filter')
34 
35 #### 均值滤波
36 mean_vaule_filter = cv2.blur(img, (5,5))
37 ax2 = fig.add_subplot(2,3,4)
38 ax2.imshow(mean_vaule_filter)
39 plt.title('mean_vaule_filter')
40 
41 #### 双边滤波
42 #9 邻域直径,两个 75 分别是空间高斯函数标准差,灰度值相似性高斯函数标准差
43 blur = cv2.bilateralFilter(img,9,75,75)
44 ax2 = fig.add_subplot(2,3,5)
45 ax2.imshow(blur)
46 plt.title('bilatral-filter')
View Code

效果图

 

posted on 2019-03-03 15:42 E-Dreamer 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/E-Dreamer-Blogs/p/10458846.html

2019-07-02 20:57:49 qq_37486501 阅读数 4993
  • 图像防抖

    通过本课程的学习,可以对数字成像系统知识整体上得到理解,在相机等成像产品的开发中,获得理论与实际的帮助。

    589人学习 姜卓
    免费试看

噪声分类:

  • 高斯噪声
  1. 是随机噪声, 服从高斯分布
  2. 主要特点表现为:麻点
  • 椒盐噪声
  1. 胡椒噪声、盐噪声
  2. 主要特点表现为:黑白点

噪声的描述

  1. 均方误差 MSE : MSE越大,失真率越大
  2. 峰值信噪比 PSNR: PSNR越大,失真度越小

图像平滑(去噪)

  1. 平滑的目的: 在表刘源是图像基本特征的前提下, 消除或衰减噪声的影响, 提高视觉效果

  2. 基础知识:
    (1): 滤波: 使用空间模版(滤波器)处理图像的过程
    (2): 模版与模版运算: 模版和邻域大小相同

  3. 常用图像平滑方法(空间平滑滤波):

  • 均值滤波 (邻域平均法)——线性空间滤波
    MATLAB实现均值滤波,见我的博客:
    https://blog.csdn.net/qq_37486501/article/details/80274928
    (1): 基本思想: 某像素点灰度值=邻域中所有像素灰度值平均值 来代替
    (2): 优点: 在一定程度上可衰减噪声影响——拉小灰度差异
    (3): 缺点: 图像的边缘轮廓细节变模糊——边缘轮廓也做均值,导致的变模糊

  • 中值滤波(中位数)——非线性滤波
    MATLAB实现中值滤波,见我的博客:
    https://blog.csdn.net/qq_37486501/article/details/80274960
    (1): 基本思想: 某像素的灰度值=窗口内所有像素的灰度中值 来代替
    (2):窗口:
    有不同形状(
    一维:线状
    二维:十字、正方形、菱形、圆形)
    有不同大小(窗口大小中必含奇数元素, 为了保证中心像素值)
    (3): 优点:
    在去噪同时,较好的保持边缘轮廓细节
    适合处理椒盐噪声(因为: 不是去噪声点, 而使改变其灰度值)

  • 小波去噪
    将信号通过小波变换(采用Mallat算法)后,信号产生的小波系数含有信号的重要信息,将信号经小波分解后小波系数较大,噪声的小波系数较小,并且噪声的小波系数要小于信号的小波系数,通过选取一个合适的阀值,大于阀值的小波系数被认为是有信号产生的,应予以保留,小于阀值的则认为是噪声产生的,置为零从而达到去噪的目的。

  • 高斯滤波
    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

  • 双边滤波器去噪
    双边滤波器(Bilateral filter)是一种可以保边去噪的滤波器。可以滤除图像数据中的噪声,且还会保留住图像的边缘、纹理等(因噪声是高频信号,边缘、纹理也是高频信息,高斯滤波会在滤除噪声的同时使得边缘模糊)。是使用一个卷积核(模板矩阵),叠加到待处理像素点上,使用对应邻域像素点的加权求和来作为新的输出像素点的值一种方法,简单来说,双边滤波和高斯滤波一样,不同只在于模板矩阵的不同。

滤波 平滑 去噪

阅读数 3027