热门标签 | 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;


 


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了[从头学数学]中第101节关于比例的相关问题的研究和修炼过程。主要内容包括[机器小伟]和[工程师阿伟]一起研究比例的相关问题,并给出了一个求比例的函数scale的实现。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 人淋巴细胞活化基因3蛋白(LAG3)的性质、应用及相关研究
    本文介绍了人淋巴细胞活化基因3蛋白(LAG3)的性质,包括其化学性质、物种来源、重组蛋白序列和应用说明。该蛋白可通过MHC II信号传导激活抗原呈递细胞,促使抗原特异性T细胞反应。关于MHC II分子是否单独调控LAG-3的抑制功能存在争议。此外,本文还介绍了LAG3抗体的相关研究,包括抗体的类型和应用领域。 ... [详细]
  • 本文详细介绍了相机防抖的设置方法和使用技巧,包括索尼防抖设置、VR和Stabilizer档位的选择、机身菜单设置等。同时解释了相机防抖的原理,包括电子防抖和光学防抖的区别,以及它们对画质细节的影响。此外,还提到了一些运动相机的防抖方法,如大疆的Osmo Action的Rock Steady技术。通过本文,你将更好地理解相机防抖的重要性和使用技巧,提高拍摄体验。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了数模国赛的报名参加方法,包括学校报名和自己报名的途径。同时给出了建模竞赛的建议,重在历练的同时掌握方法以及弥补自己的短板。此外,还分享了论文的结构和模型求解部分的注意事项,包括数学命题的表述规范和计算方法的原理等。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • RMAN中的不完整恢复是指通过还原所有数据文件将整个数据库回退,然后执行不完全恢复的操作。不完整恢复的场景包括完整恢复不可行或故意要丢失数据。完整恢复需要备份后生成的所有归档日志和联机重做日志,而如果这些日志缺失或损坏,恢复将在该点停止。决定故意丢失数据是在用户错误发生后采取的行动,例如忘了where条件导致整个表受影响。对于已提交的事务来说,这样的更改是不可逆的。 ... [详细]
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社区 版权所有