二项式滤波器 图像处理_opencv中二项式滤波器 - CSDN
精华内容
参与话题
  • 双边滤波(

    千次阅读 2014-05-03 17:49:30
    双边滤波问世

           双边滤波问世以来,以其较好的效果受到了广泛的实用,但是由于双边滤波同时考虑了空域和值域使其在速度方面带来了不少麻烦。为此人们提出了不少改进方法。

     

    (一)分离高斯核的方法(对每个空间方向使用一维双边滤波)

           Pham and Vlietseparable bilateral filtering for fast video preprocessing . [PvV05]这篇文章中提出用一维的双边滤波器分别对各个空间方向进行滤波。结果非常快,但在图象边缘分布着坐标系的地方会产生人工的痕迹。

          1:简单的分离高斯核

          由于高斯函数可以写成可分离的形式,因此可以采用可分离滤波器实现来加速。所谓的可分离滤波器,就是可以把多维的卷积化成多个一维卷积。具体到二维的高斯滤波,就是指先对行做一维卷积,再对列做一维卷积。这样就可以将计算复杂度从O(M*M*N*N)降到O(2*M*M*N),M,N分别是图像和滤波器的窗口大小。问题是实现时候怎么计算一维的卷积核呢?其实很简单,按照前面计算出来的窗口大小,计算所有离散点上一维高斯函数的权值,最后将权值之和归一化到1. 另外,可以设法将二维模板运算转换成一维模板运算,对速度的提高也是非常可观的。

    例如,(1)式可以分解成一个水平模板和一个垂直模板,即

            用一个实际的例子来验证一下:

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

           2:应用到高斯滤波器

           高斯平滑滤波器的原理高斯滤波器是根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对去除服从正态分布的噪声是很有效果的。一维零均值高斯函数为。其中,高斯分布参数决定了高斯滤波器的宽度。对图像来说,常用二维零均值离散高斯函数作平滑滤波器,函数表达式如下:式(1)

     

           由于高斯函数的可分离性,高斯滤波器加速可以有效实现。通过二维高斯函数的卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积的结果与方向垂直的相同一维高斯函数进行卷积。因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。这些性质使得它在早期的图像处理中特别有用,表明高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器。
    高斯函数的可分离性很容易表示:

     

           离散高斯平滑滤波器的设计在高斯滤波器的设计中,高斯函数的最佳逼近由二项式展开的系数决定。由高斯函数的可分离性得到,二维高斯滤波器能用2个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向。实际上,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成。对较大的滤波器,二项式展开系数对大多数计算机来说都太多,但是,任意大的高斯滤波器都能通过重复使用小的高斯滤波器来实现。设计高斯滤波器的另一途径是直接从离散高斯分布中计算模板值。

          选择适当的σ2值,就可以在窗口上评价该值,以便获取核或模板。首先选择n值和σ2值,然后根据式(4)计算出模板的右下角元素,再根据高斯模板的中心左右上下对称性(如图1 c7×7的模板结构所示)对应地复制给其它三个区域,即可得出整个模板的元素,最后再对全部的模板元素求和、取倒数即求得规范化系数。

     

    (二)实用3D直方图

           Weiss在文章Fast Median and Bilateral Filtering中提出用一个基于3维直方图的方法,并用此方法来加速正方形空间核的二维双边滤波。其算法的主要思想就是改变图像直方图的表示方式来达到加速图像处理的过程,同时达到在任意位宽的图像,任意大小的滤波核的情况下其时间复杂度都为;这是一种基于处理每个像素需要的时间复杂度度量,在之前的双边滤波算法都是在之上。其核心思想就是利用多个部分直方图来合成一个完整的直方图,相邻列可以并行处理,相邻行之间的改变也大大缩小了;并且在对直方图的排序时采用基数排序来代替传统的快速排序。而该改进确实可以提升算法的速度,但是存储开销非常大,文中则提出了一种基于序数变化的思想来减小存储开销。对于高精度的图像他又提出了一种基于移位操作的逐步取精的方法,即在源图像上右移8位得到一个低位图像然后进行双边滤波,得到的结果保存以便第二次移位得到的图像利用,以便更快的找到中值;最后右移完成,那么整个高精度的图像也就完成了滤波。

           在最近的文章Contant time O(1) Bilatearal Filtering[Por08]中,Porikli同样介绍了基于3维直方图的一种低计算复杂度的算法,Porikli提出常数时间双边滤波算法O(1)。其中常数时间是指计算时间与滤波核大小r无关。文章针对不同特征的双边滤波采用不同的证明方法。文章主要提供了三种方法:整体直方图,线性滤波器,泰勒级数。作者证明几种情况都能使双边滤波达到o(1)。

     

    (三)基于FFT加速的方法

           Durand and Dorsey 在文章Fast  Bilateral  Filtering  for  the  Display  of  High-Dynamic  Images[DD02]中提出一种快速的近似算法来处理3维的双边滤波,该算法通过将灰度核g2表示为g2(n-I(y))I(y),其中n是一个常数,通二维快速复利叶变换减少计算量,然后线性插值得到结果。

    Paris and Durand 在文章A Fast Approximation of the Bilateral Filter using a Signal Processing Approach[PD06]中将3维复利叶变换应用到下采样中。所以[DD02]中的算法可以看成Paris and Durand 在文章[PD06]中算法的一种特殊情况。Paris and Durand在文章[PD09]中将他们的算法扩展到彩色图象中。

     

    (四)FGT泰勒级数展开

          1:快速高斯变换

           如下对高斯函数的加权和进行处理

          定义

    对高斯函数进行Hermite展开为:

    进行平移和尺度变换后有:

    由上面可以得到下式:

    于是对多维的情况可以表示如下:

     

          2:基于快速高斯变换的双边滤波

           在文章[Fast Gauss Bilateral Filtering——2010]中,作者应用FGT的办法,首先对双边滤波的表达式进行改写:

    其中:

     

    然后定义了

    其中ti为目标的,si为源点。

     

          3:基于改进的快速高斯变换的双边滤波

     

     (五)用Raised cosines函数来逼近高斯值域函数(可参考下面博文)http://blog.csdn.net/laviewpbt/article/details/14126839

     

     

     

     

     

    展开全文
  • 注:本文为博主参考书籍和他人文章并加上自己的理解所编,...这种滤波器等价于图像与全部元素值为1的核函数先进性卷积再进行尺度缩放。对于尺寸较大的核函数,一个有效的实现策略如下:在扫描行上用一个移动的窗口...

    注:本文为博主参考书籍和他人文章并加上自己的理解所编,作为学习笔记使用并将其分享出去供大家学习。若涉及到引用您的文章内容请评论区告知!如有错误欢迎指正!

    一、均值滤波

        最简单的滤波器是移动平均或方框滤波器,他将K*K窗口中像素值的平均值作为输出。这种滤波器等价于图像与全部元素值为1的核函数先进性卷积再进行尺度缩放。对于尺寸较大的核函数,一个有效的实现策略如下:在扫描行上用一个移动的窗口进行滑动(在可分离滤波器中),新的窗口的和值等于上一个窗口的和值加上新的窗口中增加的像素的值并减去离开上一个窗口的像素的值。

    二、中值滤波

    1、中值滤波的实质

        对受到噪声污染的图像可以采用线性滤波的方法来处理,但是很多线性滤波有低通性,在去噪声的同时也使得边缘模糊了,中值滤波在某些情况下可以做到既去除噪声又保护图像的边缘,它是一种非线性的去除噪声的方法。

        中值滤波的实现原理是把数字图像中一点的值用该点的一个区域的各个点的值的中值代替。我们将一个点的特定长度或形状的邻域称为窗口,那么对于二维图像的中值滤波,一般采用3*3或5*5的窗口进行滤波。

     

    1、中值滤波的实现

       以3*3的窗口为例,对于灰度图像,有输入和输出两个矩阵。从bmp_in[1][1]开始算起,通过该像素点领域内的8个像素再加上该像素本身共9个像素计算出中值并映射到输出矩阵bmp_out[1][1]。接着整个窗口右移到[1][2],以此类推直到该行扫完,开始下一行的扫描。如果对于3通道的彩色图像,则需要对每个通道分别进行中值计算并映射到输出矩阵,接着进行整合显示。

    三、高斯滤波

    1、高斯滤波的实质

        高斯滤波是一种线性滤波。就是对整幅图像进行加权平均的过程,每个像素点的值都由其本身和邻域内的其它像素值经过加权平均后得到。高斯平滑滤波器对于仰制服从正态分布的噪声非常有效。

        既然是线性滤波,那么就会存在低通性,那么为什么还要使用这种滤波方法呢?实际上我们知道如果取模板中心的系数比较大,而模板周围的系数比较小,则可以在保持图像原有信息特征的情况下消除部分噪声,而高斯滤波的模板恰恰符合这个条件。还有一个问题,如果我们直接通过计算得到高斯模板,会存在大量浮点数的运算,故还需要进行取整变换使得模板周围的最小系数为1,中心点系数取最大值。

    2、高斯滤波器模板的生成

        那么高斯滤波的模板怎么确定呢?将系数值按高斯分布(正态分布)来确定,高斯滤波器的方法可以通过使用二项式展开法和计算高斯的掩码权重矩阵来得到一组高斯滤波器模板。

        首先我们先来考虑一维线阵图像的情况,高中时我们学过正态分布,其密度函数为:

        其中μ和σ都为常数,μ∈R,σ>0;记做X~N(μ,,σ²)。其中μ决定了曲线的中心位置(x=μ时,f(x)最大),σ决定了曲线的中锋的陡峭程度(σ越大,曲线越平缓),而且可以看出f(x)总是大于0的。

        μ=0,σ=1的正态分布称为标准正态分布,其密度函数为:

       

       对于一维图像, 在计算模板时,我们以最中心的像素点作为基准,所以该像素点要取最大值,我们记做f(0)。我们发现x=0时f(x)需要取最大值,那就刚好对应到标准正态分布x=μ=0时f(x)最大。而我们并不希望高斯模板一成不变,而是希望它可以通过一些参数进行调整以适应不同的情况,故我们不采用标准正态分布来计算模板,而是保留σ的可变性,用于调整模板的频带宽度进而影响图像被处理后的平滑(模糊)程度。此时还没有完,我们发现,高斯模板里的成员是用来作为系数使用的,那么当然可以对每个系数除以它们的公约数啦。

        此时我们拓展到二维图像,一般情况下我们使x轴和y轴的σ相等,此时我们可以得到高斯函数的表达式为:

        其中(x,y)为点坐标。要得到一个高斯滤波器模板,应先对高斯函数进行离散化,将得到的值作为模板的系数。

        例如:要产生一个3*3的高斯滤波器模板,以模板的中心位置为坐标原点进行取样。模板在各个位置的坐标,如下图所示(x轴水平向右,y轴竖直向下)

        这样,将各个坐标带入到上面的表达式便可以计算出我们需要的高斯滤波器模板了。

        然而此时计算得到的模板仍然是浮点类型的,为了计算方便可以对模板中的系数值进行取整即将模板各角位置的值即最小值通过一个系数α转换为1,其它位置均乘上这个系数也进行转换,转换后可通过近似取整得到最终的高斯滤波器模板。

        以上方式计算出来的模板在进行实际图像滤波时还需要进行归一化处理,实际上就是在加权后进行平均。

        下面给出一个常用的3*3高斯滤波器模板

           和一个常用的5*5 高斯滤波器模板

    3、高斯滤波器的性质

        (1)可分离滤波器:由于高斯函数可以写成可分离的形式,因此可以采用可分离滤波器实现来加速。所谓的可分离滤波器,就是可以把多维的卷积化成多个一维卷积。具体到二维的高斯滤波,就是指先对行做一维卷积,再对列做一维卷积。这样就可以将计算复杂度从O(M*M*N*N)降到O(2*M*M*N),M,N分别是图像和滤波器的窗口大小。

        (2)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向。

        (3)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真。而高斯函数只有一个波峰,对图像边缘回油加强而不会减弱。

        (4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷。

        (5)高斯函数的傅立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论,这样可以在空域和频域上做同样的变换而达到同样的效果。图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号。

    4、高斯滤波的实现

        在图像处理中,高斯滤波一般有两种实现方式,一是用离散化窗口滑窗卷积,另一种通过傅里叶变换。最常见的就是第一种滑窗实现,只有当离散化的窗口非常大,用滑窗计算量非常大(即使用可分离滤波器的实现)的情况下,可能会考虑基于傅里叶变换的实现方法。

        以下具体阐述第一种实现方法,傅里叶变换的方法可能会在后期加上去。

        首先是常规计算方法,以3*3的模板为例,对于灰度图像,有输入和输出两个矩阵。从bmp_in[1][1]开始算起,通过该像素点以及邻域内的像素点与模板中对应位置的系数进行加权然后平均计算出并映射到输出矩阵bmp_out[1][1]。接着整个窗口右移到[1][2],以此类推直到该行扫完,开始下一行的扫描。如果对于3通道的彩色图像,则需要对每个通道分别进行计算并映射到输出矩阵,接着进行整合显示。

     

    01 void gaussianFilter(uchar* data, int width, int height)
    02 {
    03     int i, j, index, sum;
    04     int templates[9] = { 1, 2, 1,
    05                          2, 4, 2,
    06                          1, 2, 1 };
    07     sum = height * width * sizeof(uchar);
    08     uchar *tmpdata = (uchar*)malloc(sum);
    09     memcpy((char*)tmpdata,(char*)data, sum);
    10     for(i = 1;i < height - 1;i++)
    11     {
    12         for(j = 1;j < width - 1;j++)
    13         {
    14             index = sum = 0;
    15             for(int m = i - 1;m < i + 2;m++)
    16             {
    17                 for(int n = j - 1; n < j + 2;n++)
    18                 {
    19                     sum +=
    20                         tmpdata[m * width + n] *
    21                         templates[index++];
    22                 }
    23             }
    24             data[i * width + j] = sum / 16;
    25         }
    26     }
    27     free(tmpdata);
    28 }

     

        由于高斯滤波器的可分离的性质,我们可以先对原图像的行做一维卷积,即同一行方向上的邻域与一维高斯模板进行卷积,结果保存在bmp_out1中。接着对bmp_out1同一列方向上的邻域与该一维高斯模板矩阵进行卷积得到最终输出图像bmp_out2

     

     

    1. void GaussianSmooth(const Mat &src, Mat &dst, double sigma)  
    2. {  
    3.     if(src.channels() != 1 && src.channels() != 3)  
    4.         return;  
    5.   
    6.     //  
    7.     sigma = sigma > 0 ? sigma : -sigma;  
    8.     //高斯核矩阵的大小为(6*sigma+1)*(6*sigma+1)  
    9.     //ksize为奇数  
    10.     int ksize = ceil(sigma * 3) * 2 + 1;  
    11.   
    12.     //cout << "ksize=" <<ksize<<endl;  
    13.     //  dst.create(src.size(), src.type());  
    14.     if(ksize == 1)  
    15.     {  
    16.         src.copyTo(dst);      
    17.         return;  
    18.     }  
    19.   
    20.     //计算一维高斯核  
    21.     double *kernel = new double[ksize];  
    22.   
    23.     double scale = -0.5/(sigma*sigma);  
    24.     const double PI = 3.141592653;  
    25.     double cons = 1/sqrt(-scale / PI);  
    26.   
    27.     double sum = 0;  
    28.     int kcenter = ksize/2;  
    29.     int i = 0, j = 0;  
    30.     for(i = 0; i < ksize; i++)  
    31.     {  
    32.         int x = i - kcenter;  
    33.         *(kernel+i) = cons * exp(x * x * scale);//一维高斯函数  
    34.         sum += *(kernel+i);  
    35.   
    36. //      cout << " " << *(kernel+i);  
    37.     }  
    38. //  cout << endl;  
    39.     //归一化,确保高斯权值在[0,1]之间  
    40.     for(i = 0; i < ksize; i++)  
    41.     {  
    42.         *(kernel+i) /= sum;  
    43. //      cout << " " << *(kernel+i);  
    44.     }  
    45. //  cout << endl;  
    46.   
    47.     dst.create(src.size(), src.type());  
    48.     Mat temp;  
    49.     temp.create(src.size(), src.type());  
    50.   
    51.     uchar* srcData = src.data; //原图像 
    52.     uchar* dstData = dst.data;  //行方向卷积后的图像
    53.     uchar* tempData = temp.data;  列方向卷积后的最终图像
    54.   
    55.     //x方向一维高斯模糊  
    56.     for(int y = 0; y < src.rows; y++)  
    57.     {  
    58.         for(int x = 0; x < src.cols; x++)  
    59.         {  
    60.             double mul = 0;  
    61.             sum = 0;  
    62.             double bmul = 0, gmul = 0, rmul = 0;  
    63.             for(i = -kcenter; i <= kcenter; i++)  
    64.             {  
    65.                 if((x+i) >= 0 && (x+i) < src.cols)  
    66.                 {  
    67.                     if(src.channels() == 1)  
    68.                     {  
    69.                         mul += *(srcData+y*src.step+(x+i))*(*(kernel+kcenter+i));  
    70.                     }  
    71.                     else   
    72.                     {  
    73.                         bmul += *(srcData+y*src.step+(x+i)*src.channels() + 0)*(*(kernel+kcenter+i));  
    74.                         gmul += *(srcData+y*src.step+(x+i)*src.channels() + 1)*(*(kernel+kcenter+i));  
    75.                         rmul += *(srcData+y*src.step+(x+i)*src.channels() + 2)*(*(kernel+kcenter+i));  
    76.                     }  
    77.                     sum += (*(kernel+kcenter+i));  
    78.                 }  
    79.             }  
    80.             if(src.channels() == 1)  
    81.             {  
    82.                 *(tempData+y*temp.step+x) = mul/sum;  
    83.             }  
    84.             else  
    85.             {  
    86.                 *(tempData+y*temp.step+x*temp.channels()+0) = bmul/sum;  
    87.                 *(tempData+y*temp.step+x*temp.channels()+1) = gmul/sum;  
    88.                 *(tempData+y*temp.step+x*temp.channels()+2) = rmul/sum;  
    89.             }  
    90.         }  
    91.     }  
    92.   
    93.       
    94.     //y方向一维高斯模糊  
    95.     for(int x = 0; x < temp.cols; x++)  
    96.     {  
    97.         for(int y = 0; y < temp.rows; y++)  
    98.         {  
    99.             double mul = 0;  
    100.             sum = 0;  
    101.             double bmul = 0, gmul = 0, rmul = 0;  
    102.             for(i = -kcenter; i <= kcenter; i++)  
    103.             {  
    104.                 if((y+i) >= 0 && (y+i) < temp.rows)  
    105.                 {  
    106.                     if(temp.channels() == 1)  
    107.                     {  
    108.                         mul += *(tempData+(y+i)*temp.step+x)*(*(kernel+kcenter+i));  
    109.                     }  
    110.                     else  
    111.                     {  
    112.                         bmul += *(tempData+(y+i)*temp.step+x*temp.channels() + 0)*(*(kernel+kcenter+i));  
    113.                         gmul += *(tempData+(y+i)*temp.step+x*temp.channels() + 1)*(*(kernel+kcenter+i));  
    114.                         rmul += *(tempData+(y+i)*temp.step+x*temp.channels() + 2)*(*(kernel+kcenter+i));  
    115.                     }  
    116.                     sum += (*(kernel+kcenter+i));  
    117.                 }  
    118.             }  
    119.             if(temp.channels() == 1)  
    120.             {  
    121.                 *(dstData+y*dst.step+x) = mul/sum;  
    122.             }  
    123.             else  
    124.             {  
    125.                 *(dstData+y*dst.step+x*dst.channels()+0) = bmul/sum;  
    126.                 *(dstData+y*dst.step+x*dst.channels()+1) = gmul/sum;  
    127.                 *(dstData+y*dst.step+x*dst.channels()+2) = rmul/sum;  
    128.             }  
    129.           
    130.         }  
    131.     }  
    132.       
    133.     delete[] kernel;  

     

    展开全文
  • 高斯平滑滤波器

    万次阅读 2014-02-23 20:01:56
    高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制服从正态分布 的噪声非常有效。 一维零均值高斯函数为: g(x)=exp( -x^2/(2 sigma^2)) (u=0) 详情参见:...
    高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制服从正态分布   的噪声非常有效。
    

    一维零均值高斯函数为: g(x)=exp( -x^2/(2 sigma^2)) (u=0)

    详情参见:http://zh.wikipedia.org/wiki/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83


                  概率密度函数                              累积分布函数
    Probability density function for the Normal distribtion    Cumulative distribution function for the Normal distribution
                          绿线代表标准正态分布



    其中,高斯分布参数Sigma决定了高斯函数的宽度。 对于图像处理来说,常用二维零均值离散高斯函数作平滑滤波器。

         高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:

    (1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.

    (2)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.

    (3)高斯函数的付立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号.???

    (4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.

    (5)由于高斯函数的可分离性,较大尺寸的高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.

    图像滤波 (转:http://www.baisi.net/viewthread.php?tid=219452

    1 图像滤波的基本概念

    图像常常被强度随机信号(也称为噪声)所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声、脉冲噪声、高斯噪声等.椒盐噪声含有随机出现的黑白强度值.而脉冲噪声则只含有随机的白强度值(正脉冲噪声)或黑强度值(负脉冲噪声).与前两者不同,高斯噪声含有强度服从高斯或正态分布的噪声.研究滤波就是为了消除噪声干扰。

        图像滤波总体上讲包括空域滤波和频域滤波。频率滤波需要先进行傅立叶变换至频域处理然后再反变换回空间域还原图像,空域滤波是直接对图像的数据做空间变换达到滤波的目的。它是一种邻域运算,即输出图像中任何像素的值都是通过采用一定的算法,根据输入图像中对用像素周围一定邻域内像素的值得来的。如果输出像素是输入像素邻域像素的线性组合则称为线性滤波(例如最常见的均值滤波和高斯滤波),否则为非线性滤波(中值滤波、边缘保持滤波等)。

        线性平滑滤波器去除高斯噪声的效果很好,且在大多数情况下,对其它类型的噪声也有很好的效果。线性滤波器使用连续窗函数内像素加权和来实现滤波。特别典型的是,同一模式的权重因子可以作用在每一个窗口内,也就意味着线性滤波器是空间不变的,这样就可以使用卷积模板来实现滤波。如果图像的不同部分使用不同的滤波权重因子,且仍然可以用滤波器完成加权运算,那么线性滤波器就是空间可变的。任何不是像素加权运算的滤波器都属于非线性滤波器.非线性滤波器也可以是空间不变的,也就是说,在图像的任何位置上可以进行相同的运算而不考虑图像位置或空间的变化。

    2 图像滤波的计算过程分析

        滤波通常是用卷积或者相关来描述,而线性滤波一般是通过卷积来描述的。他们非常类似,但是还是会有不同。下面我们来根据相关和卷积计算过程来体会一下他们的具体区别:

    卷积的计算步骤:

    (1)    卷积核绕自己的核心元素顺时针旋转180度

    (2)    移动卷积核的中心元素,使它位于输入图像待处理像素的正上方

    (3)    在旋转后的卷积核中,将输入图像的像素值作为权重相乘

    (4)    第三步各结果的和做为该输入像素对应的输出像素

    相关的计算步骤:

    (1)移动相关核的中心元素,使它位于输入图像待处理像素的正上方

    (2)将输入图像的像素值作为权重,乘以相关核

    (3)将上面各步得到的结果相加做为输出

        可以看出他们的主要区别在于计算卷积的时候,卷积核要先做旋转。而计算相关过程中不需要旋转相关核。

    例如: magic(3) =[8 1 6;3 5 7;4 9 2],旋转180度后就成了[2 9 4;7 5 3;6 1 8]

    三 高斯平滑滤波器的设计

        高斯函数的最佳逼近由二项式展开的系数决定,换句话说,用杨辉三角形(也称Pascal三角形)的第n行作为高斯滤波器的一个具有n个点的一维逼近,例如,五点逼近为:

    1 4 6 4 1

        它们对应于Pascal三角形的第5行.这一模板被用来在水平方向上平滑图像.在高斯函数可分离性性质中曾指出,二维高斯滤波器能用两个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向.实际中,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成.
    这一技术在模板尺寸N约为10时的滤波效果极好.对较大的滤波器,二项式展开系数对大多数计算机来说都太多.但是,任意大的高斯滤波器都能通过重复使用小高斯滤波器来实现.高斯滤波器的二项式逼近的σ可用高斯函数拟合二项式系数的最小方差来计算.

       设计高斯滤波器的另一途径是直接从离散高斯分布中计算模板权值。为了计算方便,一般希望滤波器权值是整数。在模板的一个角点处取一个值,并选择一个K使该角点处值为1。通过这个系数可以使滤波器整数化,由于整数化后的模板权值之和不等于1,为了保证图像的均匀灰度区域不受影响,必须对滤波模板进行权值规范化。

    高斯滤波器的采样值或者高斯滤波器的二项式展开系数可以形成离散高斯滤波器.当用离散高斯滤波器进行卷积时,其结果是一个更大的高斯离散滤波器.若一幅图像用N*N离散高斯滤波器进行平滑,接着再用M*M离散高斯滤波器平滑的话,那么平滑结果就和用(N+M-1)*(N+M-1)离散高斯滤波器平滑的结果一样.换言之,在杨辉三角形中用第N行和第M行卷积形成了第N+M-1行.

    几个经典的模板例子:

      

    尝试了使用这些滤波器对我们原来的图进行操作, 得到了这样的一组结果:

                 原图:                         3x3 高斯:                     5X5高斯:

     raw 3x3 5x5

    单纯从效果来看, 两个模板都起到了平滑的作用, 只是程度有深浅的区分. 那么从理论上来说为什么能起到平滑的作用呢? 很显然, 像素的颜色不仅由自身决定了, 同时有其周围的像素加权决定, 客观上减小了和周围像素的差异. 同时这些权重的设定满足了越近权重越大的规律. 从理论来讲, 这些权重的分布满足了著名的所谓高斯分布:

    这就是1维的计算公式 

    这就是2维的计算公式 

    x, y表示的就是当前点到对应点的距离, 而那些具体的模板就是由这里公式中的一些特例计算而来. 需要说明的是不只有这么一些特例, 从wikipedia可以方便地找到那些复杂的模板比如像:

    Sample Gaussian matrix 
    This is a sample matrix, produced by sampling the Gaussian filter kernel (with σ = 0.84089642) at the midpoints of each pixel and then normalising. Note that the center element (at [4, 4]) has the largest value, decreasing symmetrically as distance from the center increases.

    0.00000067 0.00002292 0.00019117  0.00038771 0.00019117  0.00002292 0.00000067 
    0.00002292 0.00078633 0.00655965 0.01330373 0.00655965 0.00078633 0.00002292 
    0.00019117  0.00655965 0.05472157 0.11098164 0.05472157 0.00655965 0.00019117  
    0.00038771 0.01330373 0.11098164 0.22508352  0.11098164 0.01330373 0.00038771 
    0.00019117  0.00655965 0.05472157 0.11098164 0.05472157 0.00655965 0.00019117  
    0.00002292 0.00078633 0.00655965 0.01330373 0.00655965 0.00078633 0.00002292 
    0.00000067 0.00002292 0.00019117  0.00038771 0.00019117  0.00002292 0.00000067

    四 使用高斯滤波器进行图像的平滑

    生成高斯核

    /*************************************************************************
    *
    * \函数名称:
    *   MakeGauss()
    *
    * \输入参数:
    *   double sigma                                            - 高斯函数的标准差
    *   double **pdKernel                                        - 指向高斯数据数组的指针
    *   int *pnWindowSize                                        - 数据的长度
    *
    * \返回值:
    *   无
    *
    * \说明:
    *   这个函数可以生成一个一维的高斯函数的数字数据,理论上高斯数据的长度应
    *   该是无限长的,但是为了计算的简单和速度,实际的高斯数据只能是有限长的
    *   pnWindowSize就是数据长度
    *   
    *************************************************************************
    */
    void MakeGauss(double sigma, double **pdKernel, int *pnWindowSize)
    {
        // 循环控制变量
        int i   ;
        // 数组的中心点
        int nCenter;

        // 数组的某一点到中心点的距离
        double  dDis  ;

        double PI = 3.14159;
        // 中间变量
        double  dValue; 
        double  dSum  ;
        dSum = 0 ; 
        // 数组长度,根据概率论的知识,选取[-3*sigma, 3*sigma]以内的数据。
        // 这些数据会覆盖绝大部分的滤波系数
        *pnWindowSize = 1 + 2 * ceil(3 * sigma);
        // 中心
        nCenter = (*pnWindowSize) / 2;
        // 分配内存
        *pdKernel = new double[*pnWindowSize] ;
        for(i=0; i< (*pnWindowSize); i++)
        {
            dDis = (double)(i - nCenter);
            dValue = exp(-(1/2)*dDis*dDis/(sigma*sigma)) / (sqrt(2 * PI) * sigma );
            (*pdKernel)[i] = dValue ;
            dSum += dValue;
        }
        // 归一化
        for(i=0; i<(*pnWindowSize) ; i++)
        {
            (*pdKernel)[i] /= dSum;
        }
    }

    高斯滤波

    /*************************************************************************
    *
    * \函数名称:
    *   GaussianSmooth()
    *
    * \输入参数:
    *   unsigned char * pUnchImg                - 指向图象数据的指针
    *   int nWidth                                            - 图象数据宽度
    *   int nHeight                                        - 图象数据高度
    *   double dSigma                                    - 高斯函数的标准差
    *   unsigned char * pUnchSmthdImg    - 指向经过平滑之后的图象数据
    *
    * \返回值:
    *   无
    *
    * \说明:
    *   为了抑止噪声,采用高斯滤波对图象进行滤波,滤波先对x方向进行,然后对
    *   y方向进行。
    *   
    *************************************************************************
    */
    void GaussianSmooth(unsigned char *pUnchImg, int nWidth, int nHeight, 
                                            double sigma, unsigned char * pUnchSmthdImg)
    {
        // 循环控制变量
      int y;
        int x;
        int i;
        // 高斯滤波器的数组长度
        int nWindowSize;
        //  窗口长度的1/2
        int    nHalfLen;   
        // 一维高斯数据滤波器
        double *pdKernel ;
        // 高斯系数与图象数据的点乘
        double  dDotMul     ;
        // 高斯滤波系数的总和
        double  dWeightSum     ;          
        // 中间变量
        double * pdTmp ;
        // 分配内存
        pdTmp = new double[nWidth*nHeight];
        // 产生一维高斯数据滤波器
        // MakeGauss(sigma, &dKernel, &nWindowSize);
        MakeGauss(sigma, &pdKernel, &nWindowSize) ;
        // MakeGauss返回窗口的长度,利用此变量计算窗口的半长
        nHalfLen = nWindowSize / 2;
      // x方向进行滤波
        for(y=0; y<nHeight; y++)
        {
            for(x=0; x<nWidth; x++)
            {
                dDotMul        = 0;
                dWeightSum = 0;
                for(i=(-nHalfLen); i<=nHalfLen; i++)
                {
                    // 判断是否在图象内部
                    if( (i+x) >= 0  && (i+x) < nWidth )
                    {
                        dDotMul += (double)pUnchImg[y*nWidth + (i+x)] * pdKernel[nHalfLen+i];
                        dWeightSum += pdKernel[nHalfLen+i];
                    }
                }
                pdTmp[y*nWidth + x] = dDotMul/dWeightSum ;
            }
        }
        // y方向进行滤波
        for(x=0; x<nWidth; x++)
        {
            for(y=0; y<nHeight; y++)
            {
                dDotMul        = 0;
                dWeightSum = 0;
                for(i=(-nHalfLen); i<=nHalfLen; i++)
                {
                    // 判断是否在图象内部
                    if( (i+y) >= 0  && (i+y) < nHeight )
                    {
                        dDotMul += (double)pdTmp[(y+i)*nWidth + x] * pdKernel[nHalfLen+i];
                        dWeightSum += pdKernel[nHalfLen+i];
                    }
                }
                pUnchSmthdImg[y*nWidth + x] = (unsigned char)(int)dDotMul/dWeightSum ;
            }
        }

        // 释放内存
        delete []pdKernel;
        pdKernel = NULL ;
        delete []pdTmp;
        pdTmp = NULL;
    }

    展开全文
  • 高斯滤波器理解与图像滤波

    千次阅读 2014-03-23 10:31:12
    先给出高斯函数的图形。 ... 高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制服从正态...对于图像处理来说,常用维零均值离散高斯函数作平滑滤波器。   高斯函数具
    先给出高斯函数的图形。
    
    高斯滤波器理解

         高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。一维零均值高斯函数为:

        g(x)=exp( -x^2/(2 sigma^2)

    其中,高斯分布参数Sigma决定了高斯函数的宽度。对于图像处理来说,常用二维零均值离散高斯函数作平滑滤波器。

         高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:

    1二维高斯函数具有旋转对称性即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.

    2高斯函数是单值函数这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.

    3高斯函数的傅立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号.

    4高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.

    (5)由于高斯函数的可分离性,较大尺寸的高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长

       

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

    高斯函数在图像滤波中的应用

     1函数的基本概念

     所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数。通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 , 可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小。最常用的径向基函数是高斯核函数 ,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中xc为核函数中心,σ为函数的宽度参数 , 控制了函数的径向作用范围。

    2函数的表达式和图形

    matlab绘图的代码

     alf=3;

     n=7;%定义模板大小

     n1=floor((n+1)/2);%确定中心

     for i=1:n

    a(i)= exp(-((i-n1).^2)/(2*alf^2));

     for j=1:n

     b(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf))/(4*pi*alf);

     end

     end

    subplot(121),plot(a),title('一维高斯函数' )

     subplot(122),surf(b),title('二维高斯函数' )

    高斯滤波器理解


    图像滤波

       

    1 图像滤波的基本概念

     图像常常被强度随机信号(也称为噪声)所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声、脉冲噪声、高斯噪声等.椒盐噪声含有随机出现的黑白强度值.而脉冲噪声则只含有随机的白强度值(正脉冲噪声)或黑强度值(负脉冲噪声).与前两者不同,高斯噪声含有强度服从高斯或正态分布的噪声研究滤波就是为了消除噪声干扰。

     图像滤波总体上讲包括空域滤波和频域滤波频率滤波需要先进行傅立叶变换至频域处理然后再反变换回空间域还原图像,空域滤波是直接对图像的数据做空间变换达到滤波的目的。它是一种邻域运算,即输出图像中任何像素的值都是通过采用一定的算法,根据输入图像中对用像素周围一定邻域内像素的值得来的如果输出像素是输入像素邻域像素的线性组合则称为线性滤波(例如最常见的均值滤波和高斯滤波),否则为非线性滤波(中值滤波、边缘保持滤波等)。

     线性平滑滤波器去除高斯噪声的效果很好,且在大多数情况下,对其它类型的噪声也有很好的效果。线性滤波器使用连续窗函数内像素加权和来实现滤波。特别典型的是,同一模式的权重因子可以作用在每一个窗口内,也就意味着线性滤波器是空间不变的,这样就可以使用卷积模板来实现滤波。如果图像的不同部分使用不同的滤波权重因子,且仍然可以用滤波器完成加权运算,那么线性滤波器就是空间可变的。任何不是像素加权运算的滤波器都属于非线性滤波器.非线性滤波器也可以是空间不变的,也就是说,在图像的任何位置上可以进行相同的运算而不考虑图像位置或空间的变化。

     2 图像滤波的计算过程分析

     滤波通常是用卷积或者相关来描述,而线性滤波一般是通过卷积来描述的。他们非常类似,但是还是会有不同。下面我们来根据相关和卷积计算过程来体会一下他们的具体区别:

     卷积的计算步骤:

     (1)卷积核绕自己的核心元素顺时针旋转180度

     (2)移动卷积核的中心元素,使它位于输入图像待处理像素的正上方

     (3)在旋转后的卷积核中,将输入图像的像素值作为权重相乘

     (4)第三步各结果的和做为该输入像素对应的输出像素

       

    相关的计算步骤:

     (1)移动相关核的中心元素,使它位于输入图像待处理像素的正上方

     (2)将输入图像的像素值作为权重,乘以相关核

     (3)将上面各步得到的结果相加做为输出

     可以看出他们的主要区别在于计算卷积的时候,卷积核要先做旋转。而计算相关过程中不需要旋转相关核。

     例如: magic(3) =[8 1 6;3 5 7;4 9 2],旋转180度后就成了[2 9 4;7 5 3;6 1 8]

      高斯平滑滤波器的设计

       高斯函数的最佳逼近由二项式展开的系数决定,换句话说,用杨辉三角形(也称Pascal三角形)的第n行作为高斯滤波器的一个具有n个点的一维逼近,例如,五点逼近为:

    1 4 6 4 1

      它们对应于Pascal三角形的第5行.这一模板被用来在水平方向上平滑图像.在高斯函数可分离性性质中曾指出,二维高斯滤波器能用两个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向.实际中,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成
    这一技术在模板尺寸N约为10时的滤波效果极好.对较大的滤波器,二项式展开系数对大多数计算机来说都太多.但是,任意大的高斯滤波器都能通过重复使用小高斯滤波器来实现.高斯滤波器的二项式逼近的σ可用高斯函数拟合二项式系数的最小方差来计算.

       设计高斯滤波器的另一途径是直接从离散高斯分布中计算模板权值。为了计算方便,一般希望滤波器权值是整数。在模板的一个角点处取一个值,并选择一个K使该角点处值为1。通过这个系数可以使滤波器整数化,由于整数化后的模板权值之和不等于1,为了保证图像的均匀灰度区域不受影响,必须对滤波模板进行权值规范化

       高斯滤波器的采样值或者高斯滤波器的二项式展开系数可以形成离散高斯滤波器.当用离散高斯滤波器进行卷积时,其结果是一个更大的高斯离散滤波器.若一幅图像用N*N离散高斯滤波器进行平滑,接着再用M*M离散高斯滤波器平滑的话,那么平滑结果就和用(N+M-1)*(N+M-1)离散高斯滤波器平滑的结果一样.换言之,在杨辉三角形中用第N行和第M行卷积形成了第N+M-1行.

    【转载】http://blog.sina.com.cn/s/blog_afe2af380101blh0.html
    展开全文
  • 图像卷积和滤波运算(高斯滤波模板)  ...这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:
  • 一、图像滤波的基本概念  图像常常被强度随机信号(也称为噪声)所污染。一些常见的噪声有椒盐(Salt & Pepper)噪声、脉冲噪声、高斯噪声等。椒盐噪声含有随机出现的黑白强度值.而脉冲噪声则只含有随机的白强度...
  • 图像处理的几种滤波

    万次阅读 2018-06-19 01:57:50
    均值滤波均值滤波,是图像处理中最常用的手段,从频率域观点来看均值滤波是一种低通滤波器,高频信号将会去掉,因此可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。理想的均值滤波是用每个像素和它周围像素...
  • 高斯滤波器 ... 高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。...对于图像处理来说,常用维零均值离散高斯函数作平滑滤波
  • 图像处理笔记】锐化空间滤波器

    千次阅读 2015-09-24 17:34:34
    锐化处理的主要目的是突出灰度的过渡部分。补偿轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰。 图像锐化的用途多种多样,应用范围从电子印刷和医学成像到工业检测和军事系统的制导等。 图像的模糊可以...
  • “平滑处理“(smoothing)也称“模糊处理”(bluring),是一简单且使用频率很高的图像处理方法。平滑处理的用途有很多,最常见的是用来减少图像上的噪点或者失真。在涉及到降低图像分辨率时,平滑处理是非常好用...
  • 本节为opencv数字图像处理(8):频率域滤波的第五小节,使用频率域滤波器进行图像的平滑与锐化,主要包括:理想低通/高通滤波器,巴特沃斯低通/高通滤波器、高斯低通/高通滤波器、频率域拉普拉斯算子、高频强调...
  • 数字图像处理章数字图像处理---频域处理(一)维离散傅里叶变换4.1线性空间滤波4.1.1 相关4.1.2 卷积4.1.3 imfilter函数4.2 非线性空间滤波(五)图像处理工具箱中标准的空间滤波器5.1线性空间滤波器5.2非线性...
  • 锐化处理的主要目的是突出灰度的过渡部分。 一、基础 (1)对于一阶微分的任何定义必须保证以下几点: 恒定灰度区域微分为0;灰度台阶或斜坡处微分非0;沿斜坡微分非0 (2)对于一阶微分的任何定义必须保证...
  • 3.4 空间滤波基础 • Images are often corrupted by random variations in intensity, illumination, or have poor contrast and can’t be used directly. • Filtering: transform pixel intensity values to ...
  • 图像处理与识别学习小结

    万次阅读 热门讨论 2009-08-31 23:14:00
    图像处理与识别学习小结 数字图像处理是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。图像处理是信号处理在图像域上的一个应用。目前大多数的图像是以数字形式存储,因而图像处理很多情况...
  • 数字图像处理第三章数字图像处理---频域处理(六)高通滤波函数6.1 高通滤波函数6.2 高频强调滤波(七)选择性滤波7.1带阻和带通滤波器(五)在频域中直接生成滤波器5.1 建立网格数组以实现频域滤波器5.2 频域低通...
  • 深度理解高斯滤波器

    万次阅读 2016-03-28 16:21:17
    1.高斯滤波器综述  高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制...对于图像处理来说,常用维零均值离散高斯函数作平滑滤波器。  高斯函数具有五个重要的性质,
  • 数字图像处理之频域滤波

    万次阅读 2018-07-10 18:02:23
    发现因为是走马观花的过了一遍,所以看得稀里糊涂的,然后许多地方混淆了概念,特别是关于图像频率域的部分的理解(包括图像频率域滤波之类的),所以下面总结一下这段时间重新看《数字图像处理》(电子工业出版社,...
  • 图像常常被强度随机信号所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声、脉冲噪声、高斯噪声等。 椒盐噪声含有随机出现的黑白强度值。 脉冲噪声则只含有随机的白强度值(正脉冲噪声)或黑强度值(负脉冲...
  • python图像处理较为全面

    万次阅读 2018-06-28 19:08:01
    第 1 章 基本的图像操作和处理本章讲解操作和处理图像的基础知识,将通过大量...1.1 PIL:Python图像处理类库PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图...
1 2 3 4 5 ... 20
收藏数 5,088
精华内容 2,035
关键字:

二项式滤波器 图像处理