热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

图像锐化边缘检测

图像锐化和边缘检测本文内容构成:1、图像锐化和边缘检测的基本概念,微分梯度已经差分的定义2、锐化和边缘检测的像素处理方式(3种࿰

图像锐化和边缘检测


本文内容构成:

       1、图像锐化和边缘检测的基本概念,微分梯度已经差分的定义

       2、锐化和边缘检测的像素处理方式(3种)

       3、单方向一阶微分锐化,包括:

             水平方向

             垂直方向

             Kirsch算子

        4、无方向微分锐化,包括:

             Roberts算子

             Sobel算子

             Prewitt算子

             Laplacian算子(二阶微分)

             LOG算子(二阶微分

        5、二阶微分

        6、实验结果对比

 

        在图像增强过程中,通常利用各类图像平滑算法消除噪声,图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像边缘信息也主要集中在其高频部分。这将导致原始图像在平滑处理之后,图像边缘和图像轮廓模糊的情况出现。为了减少这类不利效果的影响,就需要利用图像锐化技术,使图像的边缘变得清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变得清晰。微分运算是求信号的变化率,由傅立叶变换的微分性质可知,微分运算具有较强高频分量作用。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。但要注意能够进行锐化处理的图像必须有较高的性噪比,否则锐化后图像性噪比反而更低,从而使得噪声增加的比信号还要多,因此一般是先去除或减轻噪声后再进行锐化处理。

 

       图像锐化的方法分为高通滤波和空域微分法。图像的边缘或线条的细节(边缘)部分 与图像频谱的高频分量相对应,因此采用高通滤波让高频分量顺利通过,并适当抑制中低频分量,是图像的细节变得清楚,实现图像的锐化,由于高通滤波我们在前面频域滤波已经讲过,所以这里主要讲空域的方法——微分法。

 

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

图像在点处的梯度 定义为一个二维列矢量:

梯度大的幅值即模值,为:

 

 

梯度的方向在 最大变化率方向上,方向角可表示为:

        对于离散函数 也有相应的概念和公式,只是用差分代替微分。差分可取为后向差分,前向差分。

在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     


                                                                 

 

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

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

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


                                                              
 垂直方向只需要将方向改变下就可以得到:
                                                                           

Kirsch算子

        Kirsch算子采用8个模板对图像上的每一个像素点进行卷积求导数,这8个模板代表8个方向,对图像上的8个特定边缘方向作出最大响应,运算(与3*3像素加权之和,就是对应位置相乘后求和)中取最大值作为图像的边缘输出。下面是8个模板:

                                                                                               

 

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

       方法1&#xff1a;整体加一个正整数&#xff0c;以保证所有的像素值均为正。比如&#43;128&#xff0c;还有<0的则视为0&#xff0c;若有>255视为255处理,这样做的结果是&#xff1a;可以获得类似浮雕的效果。

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

 

无方向一阶锐化问题的提出                  

       前面的锐化处理结果对于人工设计制造的具有矩形特征物体&#xff08;例如&#xff1a;楼房、汉字等&#xff09;的边缘的提取很有效。但是&#xff0c;对于不规则形状&#xff08;如&#xff1a;人物&#xff09;的边缘提取&#xff0c;则存在信息的缺损。

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

双方向一次微分运算&#xff0c;直接以梯度值代替

       理论基础&#xff1a;对灰度图像f在纵方向和横方向两个方向进行微分。该算法是同时增强水平和垂直方向的边缘。利用双方向一次微分运算&#xff0c;算出梯度后让梯度值赋给该点的灰度值。

数学表达式为&#xff1a;

G(i,j)&#61;sqrt{[f(i,j)-f(i,j-1)]*[f(i,j)-f(i,j-1)]&#43;[f(i,j)-f(i-1,j)]*[f(i,j)-f(i-1,j)]}

或G(i,j)&#61;|f(i,j)-f(i,j-1)|&#43;|f(i,j)-f(i-1,j)|

 

边缘检测

       

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

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

                                                                            

卷积
                                                                        

卷积可以简单的看成加权求和的过程。

下面分别对Roberts算子&#xff0c;Sobel算子&#xff0c;Prewitt算子&#xff0c;Laplacian算子介绍&#xff1a;

 

&#xff08;1&#xff09;无方向一阶锐化——交叉微分

交叉微分算子&#xff08;Robert算子&#xff09;计算公式如下&#xff1a;

                                                                                

特点&#xff1a;算法简单

 

&#xff08;2&#xff09;无方向一阶锐化——Sobel锐化

Sobel锐化计算公式如下&#xff1a;

                                                                                                 

Sobel边缘算子的卷积和如上图所示,图像中的每个像素都用这两个核做卷积。Sobel算子认为邻域的像素对当前像素产生的影响不是等价的&#xff0c;所以距离不同的像素具有不同的权值&#xff0c;对算子结果产生的影响也不同。一般来说&#xff0c;距离越大&#xff0c;产生的影响越小。这两个核分别对垂直边缘和水平边缘响应最大&#xff0c;两个卷积的最大值作为该点的输出位。运算结果是一幅边缘幅度图像。

 特点&#xff1a;锐化的边缘信息较强

 

&#xff08;3&#xff09;无方向一阶锐化——Priwitt锐化                                                                             

Priwitt锐化计算公式如下&#xff1a;

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

特点&#xff1a;与Sobel相比&#xff0c;有一定的抗干扰性&#xff0c;图像效果比较干净。

 

几种方法的效果比较

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

       Roberts算法的模板为2*2&#xff0c;提取信息较弱。

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

 

二阶微分锐化——问题的提出

                                                                                       

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

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

       3&#xff09;对应渐变的细节&#xff0c;一边情况很难检测&#xff0c;但二阶微分的信息比一阶微分的信息略多。

二阶微分锐化——算法推导


                                                                                
 
                                             

 

将上面推导的公式写成模板系数形式&#xff0c;即为Laplacian算子&#xff1a;     

       Laplacian算子利用二阶导数信息&#xff0c;具有各向同性&#xff0c;即与坐标轴方向无关&#xff0c;坐标轴旋转后梯度结果不变。使得图像经过二阶微分后&#xff0c;在边缘处产生一个陡峭的零交叉点&#xff0c;根据这个对零交叉点判断边缘。                                                                    

Laplacian变形算子

                                                                  

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

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

                                                            

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

Log边缘算子

现在介绍一种利用图像强度二阶导数的零交叉点来求边缘点的算法对噪声十分敏感&#xff0c;所以在边缘增强前滤除噪声。为此&#xff0c;马尔&#xff08;Marr&#xff09;和希尔得勒斯&#xff08;Hildreth&#xff09;根据人类视觉特性提出了一种边缘检测的方法&#xff0c;该方法将高斯滤波和拉普拉斯检测算子结合在一起进行边缘检测的方法&#xff0c;故称为Log&#xff08;Laplacian of Gassian &#xff09;算法。也称之为拉普拉斯高斯算法。该算法的主要思路和步骤如下&#xff1a;

&#xff08;1&#xff09;滤波&#xff1a;首先对图像f(x,y)进行平滑滤波&#xff0c;其滤波函数根据人类视觉特性选为高斯函数&#xff0c;即&#xff1a;

 

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

&#xff08;2&#xff09;增强&#xff1a;对平滑图像g(x,y) 进行拉普拉斯运算&#xff0c;即&#xff1a;

                                                                   

&#xff08;3&#xff09;检测&#xff1a;边缘检测判据是二阶导数的零交叉点&#xff08;即h(x,y)&#61;0  的点&#xff09;并对应一阶导数的较大峰值。

 这种方法的特点是图像首先与高斯滤波器进行卷积&#xff0c;这样既平滑了图像又降低了噪声&#xff0c;孤立的噪声点和较小的结构组织将被滤除。但是由于平滑会造成图像边缘的延伸&#xff0c;因此边缘检测器只考虑那些具有局部梯度最大值的点为边缘点。这一点可以用二阶导数的零交叉点来实现。拉普拉斯函数用二维二阶导数的近似&#xff0c;是因为它是一种无方向算子。在实际应用中为了避免检测出非显著边缘&#xff0c;应选择一阶导数大于某一阈值的零交叉点作为边缘点。由于对平滑图像g(x,y) 进行拉普拉斯运算可等效为G(x,y) 的拉普拉斯运算与f(x,y) 的卷积&#xff0c;故上式变为&#xff1a;

                                                               

式中  称为LOG滤波器&#xff0c;其为&#xff1a;

                                                     
这样就有两种方法求图像边缘&#xff1a;

①先求图像与高斯滤波器的卷积&#xff0c;再求卷积的拉普拉斯的变换&#xff0c;然后再进行过零判断。

②求高斯滤波器的拉普拉斯的变换&#xff0c;再求与图像的卷积&#xff0c;然后再进行过零判断。

这两种方法在数学上是等价的。上式就是马尔和希尔得勒斯提出的边缘检测算子&#xff08;简称M-H算子&#xff09;,由于LOG滤波器在(x,y) 空间中的图形与墨西哥草帽形状相似&#xff0c;所以又称为墨西哥草帽算子。

拉普拉斯算子对图像中的嗓声相当敏感。而且它常产生双像素宽的边缘&#xff0c;也不能提供边缘方向的信息。高斯-拉普拉斯算子是效果较好的边沿检测器&#xff0c;常用的5×5模板的高斯--拉普拉斯算子如图2.7所示&#xff1a;

                                                                                    

                                                                                            高斯—拉普拉斯算子

高斯--拉普拉斯算子把高斯平滑滤波器和拉普拉斯锐化滤波器结合起来&#xff0c;先平化掉噪声&#xff0c;再进行边缘检测&#xff0c;所以效果更好。

程序的主要思想就是将每个像素的灰度值或RGB的分量与算子矩阵求卷积&#xff08;用加权求和代替&#xff09;&#xff0c;只是锐化是要突出细节&#xff08;边界&#xff09;&#xff0c;所以要对边缘的像素加强&#xff08;比如直接用梯度值作为像素的灰度或者RGB的分量&#xff09;&#xff0c;而边缘检测只要根据设置的阀值&#xff0c;超过阀值的像素灰度设为0&#xff0c;否则设为255。

查看实验效果&#xff1a;


 


推荐阅读
author-avatar
GYuan83_844
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有