zoukankan      html  css  js  c++  java
  • 空间域图像增强和边缘检测

    半夜起来做了WY的笔试题,感觉知识掌握的很不好。

    其中有一问答题关于边缘检测算子,虽然都知道这几种算子,但是说不上来它们各自的有缺点及应用,现在来总结一下网上的资料。

    图像增强的过程中,通常利用各种平滑滤波算法来消除噪声。而通常在图像中,图像的主要能量集中在低频部分,噪声和边缘往往集中在高频部分。所以平滑滤波不仅使噪声减少,图像的边缘信息也会损失,图像的边缘也会变的模糊。为了减少这种不利的效果,通常利用图像锐化来是边缘变得清晰。锐化的目的是让图像的边缘及细节变得清晰。平滑后的图像变得模糊,主要原因是图像经过了平均或积分运算,因此我们可以对其进行逆运算如微分,使其变的清晰。微分运算是求信号的变换率,由傅立叶变换的微分性质可知,微分运算具有较强高频分量作用。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。但要注意能够进行锐化处理的图像必须有较高的信噪比,否则锐化后图像信噪比反而更低,从而使得噪声增加的比信号还要多,因此一般是先去除或减轻噪声后再进行锐化处理。

    Roberts、Sobel、Prewitt得算子主要是基于空间域的滤波器,也就是空域微分法。

    一阶微分算子:

    一阶微分主要指梯度模运算,图像的梯度模值包含了边界及细节信息。梯度模算子用于计算梯度模值,通常认为它是边界提取算子,具有极值性、位移不变性和旋转不变性。

    图像在点(x,y)处的梯度定义为一个二维列矢量:

    梯度的幅值为:                                          梯度的方向在f(x,y)最大变换率方向上为:

                             

     对于离散函数f(x,y)可用差分代替微分,差分可取为后向差分,前向差分。在x,y方向上的一阶向后差分分别定义为:

    梯度定义为:

    其幅值和方向分别为:

    在实际应用中,梯度的模还有很多近似式,如使用x,y方向上差分绝对值替代模来度量,梯度的幅值就是,最大变化量单位距离所增加的量。在边缘部分时这个增量会比较大,因此梯度幅值也就较大。而在灰度变换平缓的区域幅值也就小,灰度不变的区域幅值为零。。我们根据得到的梯度值来返回像素的值,如将梯度值大的像素设置成白色,梯度值小的设置为黑色,这样就可以将边缘提取出来了,或者是加强梯度值大的像素灰度值就可以突出细节了达到了锐化的目的。

    根据梯度值,进而对像素的处理一般有三种方式:锐化是要突出细节(边界),所以要对边缘的像素加强(比如直接用梯度值作为像素的灰度或者RGB的分量),而边缘检测只要根据设置的阀值,超过阀值的像素灰度设为0,否则设为255。

    1)辅以阀值判断    设T为阀值,像素的梯度值大于T,则像素的灰度(或者RGB的分量)加上某一个值(如100),加上某一个值(如100)像素的灰度值(或RGB的分量值)后若大于255,取255

       

     2)设以某一特定值     设t为阀值,像素的梯度值大于T,则像素的灰度(或者RGB的分量)设置为某一定值La    

     

     3)二值化图像     设T为阀值,像素的梯度值大于T,则像素的灰度(或者RGB的分量)设置为255,否则设置为0     


    根据图像边界(细节,边缘)的拓扑结构,一阶微分锐化具体又分为单方向的一阶微分锐化和无方向的微分锐化          

    单方向的一阶锐化是指对某个特定方向上的边缘(细节)信息的进行加强。最简单的单方向一阶锐化就是水平方向与垂直方向上的锐化。        

    水平方向的锐化非常简单,通过一个可以检测出水平方向上的像素值的变化模板来实现。

    垂直方向需要改变算子方向:

    问题:单方向锐化的计算结果中出现了小于零的像素值?

           方法1:整体加一个正整数,以保证所有的像素值均为正。比如+128,还有小于0的则视为0,若有大于255视为255处理, 这样做的结果是:可以获得类似浮雕的效果。

           方法2:将所有的像素值取绝对值。这样做的结果是,可以获得对边缘的有方向提取。

    前面的单一方向锐化处理结果对于人工设计制造的具有矩形特征物体(例如:楼房、汉字等)的边缘的提取很有效。但是,对于不规则形状(如:人物)的边缘提取,则存在信息的缺损。

    为了解决上面的问题,就希望提出对任何方向上的边缘信息均敏感的锐化算法。因为这类锐化方法要求对边缘的方向没有选择,所有称为无方向的锐化算法。

    边缘检测算子检查每个像素的领域并对灰度变化率进行量化,通常也包括方向的确定。大多数是基于方向当属模板求卷积的方法。

    将所有的边缘模板逐一作用于图像中的每一个像素,产生最大输出值的边缘模板方向表示该点边缘的方向,如果所有方向上的边缘模板接近于零,该点处没有边缘;如果所有方向上的边缘模板输出值都近似相等,没有可靠边缘方向   

    卷积过程可以看做简单的加权求和过程 :

    下面介绍几种一阶无向算子:

    Roberts:又称交叉微分算子,算法如下

    可用如下kernel表示

     Sobel:公式如下

     其中A是原图像, Gx,Gy分别为水平和竖直方向算子与原图像的卷积。

     图中所示的2 卷积核Gx 、Gy 形成Sobel 算子。一个核对通常的垂 直边缘响应最大 ,而另一个核对水平边缘响应最大。 

     特点:锐化的边缘信息较强,计算量相对也较小

     Priwitt:公式如下

     A为原图像,Gx,Gy分别为水平和竖直方向算子与原图像的卷积。

     Prewitt算子在一个方向求微分,而在另一个方向求平均,因而对噪声相对不敏感,有抑制噪声作用。但是像素平均相当于对图像的低通滤波,所以Prewitt算子对边缘的定位不如Roberts算子。

     特点:与Sobel相比,有一定的抗干扰性,图像效果比较干净。

    几种方法的效果比较

           Sobel算法与Priwitt算法的思路相同,属于同一类型,因此处理效果基本相同。

           Roberts算法的模板为2*2,提取信息较弱。

           单方向锐化经过处理之后,也可以对边界进行增强。

    另外Canny算子也算是一种一阶微分算子,不同之处在于canny算子需要做一系列处理来实现最优边缘的检测其步骤一般包括:

         step1:用高斯滤波器平滑图象

         step2:用一阶偏导的有限差分来计算梯度的幅值和方向

         step3:对梯度幅值进行非极大值抑制

         step4:用双阈值算法检测和连接边缘

    二阶微分算子:

    在某些灰度变换情况下一阶微分算子往往不能准确的描述,如下:

    而采用二阶微分算子能够获得更加丰富的细节信息。

    1)  对应突变形的细节,通过一阶微分的极值点,二阶微分的过0点均可以检测处理

    2)对应细线行的细节,通过一阶微分的过0点,二阶微分的极小值点均可以检测处理。

    3)对应渐变的细节,一般情况很难检测,但二阶微分的信息比一阶微分的信息略多。

    二阶微分算子的推导:

    Laplacian算子:将上述的公式写成模板化即为Laplacian算子

    为了改善锐化效果,可以脱离微分的计算原理,在原有的算子基础上,对模板系数进行改变,获得Laplacian变形算子:

    其中H2是在H1的基础上在考虑45°和135°方向的结果

    Laplacian算子对噪声比较敏感,Laplacian算子有一个缺点是它对图像中的某些边缘产生双重响应。所以图像一般先经过平滑处理,通常把Laplacian算子和平滑算子结合起来生成一个新的模板。因此我们介绍LoG算子。

    LoG: Laplacian of Gaussian 是一种将该方法将高斯滤波和拉普拉斯检测算子结合在一起进行边缘检测的方法,故称为Log(Laplacian of Gassian )算法。

    主要步骤:

    1.滤波:首先对图像f(x,y)进行平滑滤波,其滤波函数根据人类视觉特性选为高斯函数,即:

    其中,G(x,y)是一个圆对称函数,其平滑的作用是可通过  来控制的。将图像 G(x,y)与f(x,y) 进行卷积,可以得到一个平滑的图像,即:

    2.增强:对平滑图像g(x,y) 进行拉普拉斯运算 

    3.检测:边缘检测判据是二阶导数的零交叉点(即h(x,y)=0  的点)并对应一阶导数的较大峰值。

    LOG滤波器有以下特点 :

    (1) 通过图象平滑,消除了一切尺度小于σ的图象强度变化;

    (2) 若用其它微分法 ,需要计算不同方向的微分,而它无方向性 ,因此可以节省计算量 ;

    (3) 它定位精度高 ,边缘连续性好 ,可以提取对 比度较弱的边缘点。

    LOG滤波器也有它的缺点:

    当边缘的宽度小于 算子宽度时 ,由于过零点的斜坡融合将会丢失细节。

    LOG滤波器有无限长的拖尾 ,若取得很大尺寸,将使得计算不堪重负。但随着的增加 ,LOG滤波器幅值迅速下降 ,当r大于一定程度时 ,可以忽略模板的作用 ,这就为节省计算量创造了条件。实际计算时 ,常常取n×n 大小的 LOG滤波器 , n≈3σ。

    另外 ,LOG 滤波器可以近似为两个指数函数之差,即DoG。

     参考博客:http://dsqiu.iteye.com/blog/1638589

  • 相关阅读:
    mvc与springmvc
    mybatis一级与二级缓存详解
    resultType和resultMap的使用场景
    mybatis第一天学习总结
    linux常用命令(不断更新)
    SSH基本框架搭建的详细过程
    hibernate多条件组合查询的两种方式
    AJAX验证用户名是否被注册
    Vimrc
    关于window.open在不同浏览器的不同点
  • 原文地址:https://www.cnblogs.com/klitech/p/5732457.html
Copyright © 2011-2022 走看看