图像空域平滑算法

基于空间相领像素点的平滑算法是图像处理里面经常用到的去噪算法。

它的核心思想是:选择当前像素点c和其周围的一些像素{c, n1, n2, ..., nN}(共N+1个像素点),根据他们与c的距离和/或与c的像素差值,赋予他们不同的权重{w0, w1, w2, ..., wn}(要求0<wi<=1并且w0+w1+w2+...+wN=1, w0是当前点c的权重值),那么平滑后当前点的像素值为C‘ = w0*c + w1*n1 + ... + wN*nN.这种运算方式可以称为加权平均,也可以称为卷积。

空域平滑算法就是不同权重值的卷积运算,卷积运算需要注意的问题1是计算量,2是数据搬移量。3x3的卷积运算,一个像素会被其周边9个点的计算过程用到,在有较大Cache的体系里面还好,如果没有cache或者cache比较小,那么就会造成重复的数据在内外存之间搬移。因此要尽量减少卷积运算核的大小,尤其是垂直方向上的纬度大小(图像数据绝大部分都是按照水平方向存储的)。

不同的空域平滑算法就是在N值和wi的选择上不同而已。

1. 均值滤波

N取周边的3x3或者5x5或者更大的或者不是矩形的模板,C‘是模板内所有点的平均值。

各点的权重wi相同都为1/(N+1)。均值滤波算法简单,但滤波效果不好,还模糊的了图像细节,一般都不采用。

2. 中值滤波

N取周边的3x3或者5x5或者更大的或者不是矩形的模板,C‘是模板内所有点的中间值。

wi = ni是排序后中值点 ? 1 : 0。中值滤波对孤立点的椒盐噪声特别有效,而且可以保护图像边缘,是一种经典的平滑滤波算法。但对其他的一些噪声,效果并不太好,所以也很少采用。

3. 高斯滤波

N取周边的3x3或者5x5或者更大的或者不是矩形的模板,C‘是模板内所有点高斯加权的结果。

wi的取值特征是考虑ni点与c点的距离。离c点越近的点,赋予的权重越大,反之越远的点,权重越低。在2维空间上类似一个钟形,符合高斯函数的特征。因此这类的滤波算法统称为高斯滤波。高斯滤波的计算量适中,对于各种噪声都能有一个不一定是最好但可以接受的结果,因此在图像处理大量采用。

高斯滤波的核心是高斯核,参考博文高斯图像滤波原理及其编程离散化实现方法(blog.csdn.net/likezhaobin/article/details/6835049)。

OpenCV里面定义的3x3高斯核是:

0.0625 0.1250 0.0625

0.1250 0.2500 0.1250

0.0625 0.1250 0.0625

matlab里面3x3高斯核是

0.0751 0.1238 0.0751

0.1238 0.2042 0.1238

0.0751 0.1238 0.0751

高斯核一般都是x,y两个轴对称的。OpenCV里面也可以定义不对称。

在很多应用里面定义了高斯核的大小,例如3x3或者5x5,根据高斯核直径D(大于1的奇数),可以对应计算出高斯分布σ的值,参考OpenCV的代码,σ=(D/2-1)*0.3+0.8,σ得到后就可以计算高斯核各个参数,然后卷积运算进行滤波。这个计算过程其实是不符合应用场景的。决定高斯核的因素有两个:1.核直径(大于1的奇数),2.当前噪声级别σ。D与σ之间是有约束关系的,按照高斯分布的特点,要求数值分布在(μ—3σ, μ+3σ)中的概率几乎为1,因此D最好是大于6σ的最小奇数。即 D=round(6*σ+1)|1。取更大的D值,只会增加计算量,效果并不会提升。取小于这个值的直径,会由于采样点数太少,滤波效果不好。因此应该是根据当前图像的噪声级别σ来确定采用的高斯核直径,只有这样才能使用最小的高斯核滤波得到最好的结果。只是在很多时候图像的噪声级别σ很难准确的得到,噪声级别估计也是一个复杂且重要的图像算法。

优化高斯卷积的方法主要有:1.在满足噪声级别的情况下,尽量减小高斯核直径;2.整数化高斯核系数,浮点数操作所需要的指令周期远大于整数操作;3.调整高斯核系数向2的整数倍靠拢,用左右移位来代替乘除法,这时候的高斯核已经不符合高斯分布曲线,但大致趋势相类似(例如OpenCV的3x3高斯核)。

4. 双边滤波(Bilateral filter)

高斯滤波考虑ni与c的距离关系,近的分权重大些。而双边滤波不仅考虑距离,还考虑ni与c的像素值差别,差别小的分的权重更大些,相反如果c与ni像素值差别很大,那么ni的权重会相应降低。

基于距离的权重 wdi=Guass(Dis(c-ni));

基于像素的权重 wpi=Guass(|P(c)-P(ni)|);

wi = wdi*wpi

双边滤波可以很好的保护图像边界,对于噪声点有如高斯滤波的效果,因此滤波效果优于高斯滤波,只是它的计算量比高斯滤波要大,高斯核需要实时计算,不能对于高斯核做先验优化。

时间: 2024-10-28 11:37:09

图像空域平滑算法的相关文章

深入学习图像处理——图像相似度算法

最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜索的流程整理一下,想到什么说什么吧. 首先在进行图片灰度化处理之前,我觉得有必要了解一下为什么要进行灰度化处理. 图像灰度化的目的是什么? 将彩色图像转化为灰度图像的过程是图像的灰度化处理.彩色图像中的每个像素的颜色由R,G,B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多

图像空域活动性测度

图像复原是一个病态(或非适定)问题的求逆过程,且在这个过程中为受噪声的影响,为了更好的处理这种情况,需要采用平滑约束法. 其思想为:设置dc使得dtcx为期望图像的平滑性测度,也可称为空域活动性测度, 测度越大(越不平滑),复原图像的概率越小,这样使得复原结果的高频分量得到有效的抑制. 为了能够保留图像边缘信息,可以利用Huber所提出的一个新函数,称为Huber边缘惩罚函数: ρ(dtcx,T)=(dtcx)2,|dtcx|≤TT2+2T(|dtcx|-T),|dtc|>T]]> 可以看出,

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

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

图像编程学习笔记8——图像的平滑(去噪)

第一种方法:高斯模版 以下文字内容copy于<<数字图像处理编程入门>>,code为自己实现,是win32控制台程序. 先举个例子说明一下什么是平滑(smoothing),如下面两幅图所示:可以看到,图3.2比图3.1柔和一些(也模糊一些).是不是觉得很神奇?其实实现起来很简单.我们将原图中的每一点的灰度和它周围八个点的灰度相加,然后除以9,作为新图中对应点的灰度,就能实现上面的效果. 这么做并非瞎蒙,而是有其道理的.大概想一想,也很容易明白.举个例子,就象和面一样,先在中间加点水

避免图像去雾算法中让天空部分出现过增强的一种简易方法。

在经典的几种去雾算法中,包括何凯明的暗通道去雾.Tarel的基于中值滤波的去雾以及一些基于其他边缘保留的方法中,都有一个普遍存在的问题:即对天空部分处理的不好,天空往往会出现较大的面积的纹理及分块现象.究其主要原因,还是因为天空部位基本上是不符合暗通道去雾先验这个前决条件的.目前,针对这一问题,我搜索到的主要有以下几篇文章进行了处理: 1. 改进的基于暗原色先验的图像去雾算法 作者: 蒋建国\侯天峰\齐美彬   合肥工业大学 2011. 2.Single image dehazing Algor

关于图像高速缩放算法,目前看到的最好的最清晰的一篇文章

http://www.myexception.cn/image/1630385.html 关于图像快速缩放算法,目前看到的最好的最清晰的一篇文章 昨天开始写一个录制屏幕和声音存储为视频文件的程序,差不多完成了. 屏幕录制使用方法:抓屏(方法很多,BitBlt.DirectX.MirrorDriver等),缩放,X264压缩(开源的,自己封装) 声音录制使用方法:声卡采集PCM数据,AAC压缩(开源的,自己封装) 最后打包复用为MP4文件,可以使用ffmpeg或者mp4v2等. 经过断断续续一天的

《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果

本文完全转载:http://www.cnblogs.com/Imageshop/p/3281703.html,再次仅当学习交流使用.. <Single Image Haze Removal Using Dark Channel Prior>一文中图像去雾算法的原理.实现.效果(速度可实时) 本文算法合作联系QQ: 33184777, 非诚勿扰 邮件地址:   [email protected] 最新的效果见 :http://video.sina.com.cn/v/b/124538950-125

盘点一下数据平滑算法

在自然语言处理中,经常要计算单词序列(句子)出现的概率估计.我们知道,算法在训练时,语料库不可能包含所有可能出现的序列.  因此,为了防止对训练样本中未出现的新序列概率估计值为零,人们发明了好多改善估计新序列出现概率的算法,即数据平滑算法. Laplace 法则 最简单的算法是Laplace法则,思路很简单,统计测试数据集中的元素在训练数据集中出现的次数时,计数器的初始值不要设成零,而是设成1.这样,即使该元素没有在训练集中出现,其出现次数统计值至少也是1.因此,其出现的概率估计值就不会是零了.

图像连通域标记算法研究

把之前一篇记录过的日志贴过来 图像连通域标记算法研究 ConnectedComponent Labeling 最近在研究一篇复杂下背景文字检测的论文. “Detecting Text in Natural Scenes with Stroke Width Transform ” CPVR 2010的文章,它主要探讨利用文字内部笔画宽度一致作为主要线索来检测文字的一个新奇的算法,当然,我不是想讨论文字检测,论文算法实施的过程中有一步涉及到图像连通域标记算法,在这里我遇到了一些问题,查阅了一些相关文