主页 > 案例大全 > 论文案例实践-基于MATLAB数字图像边缘检测算法研究

论文案例实践-基于MATLAB数字图像边缘检测算法研究

2021-06-15 09:30:29

  图像边缘是图像最基本的功能。所谓边缘,是指在区域、目标、目标和背景之间存在的具有最明显局部强度变化的图像部分,包含在图像处理中用于识别的重要信息。边缘检测是数字图像处理中最基本最重要的步骤之一。

  本文介绍了六个经典的边缘检测运算符,如Roberts运算符、Sobel运算符、Canny运算符、LOG算法、小波变换检测方法等。另外,利用MATLAB系统提供的相关功能,将这些不同的运算符组合起来处理相同的图像,并分析、获取该处理图像的特征。

  为了改善阈值选择的效果,这里提出了优化阈值分割和大津法(Otsu)融合的方法,其可以通过图像边缘提取来应用。高阈值可通过最佳阈值分割取得,低阈值可通过大津法取得,提高边缘提取的精度和连续性。

  在电脑的水平逐步提升的时候,人们就开始用电脑来处理图像了,数字图像处理技术最早出现在上个世纪50年代,而图像边缘是图像最基本的特征。所谓边缘,就是指图像局部强度变化最明显的地方,这包括存在于区域、目标、目标和背景、原始和机器之间的、很多的信息的处理可以让图像处理来辅助完成,图像处理的基本内容包括图像检测。图像边缘包括图像位置和轮廓、划分图像、还原图像、认识各种模式、对图像进行压缩、对其他图像进行研究同时对他进行处理说。由此看来,所以我们重点关注的部分是评估图像的边缘和轮廓特征同时总结图像的处理、图像的研究方法。我们根据六种检测运算符的特征展开研究和讨论,围绕Roberts算子,Sobel算子,Canny算子,Prewitt算子,LOG算法和小波变换检测方法。接着,那这些算子的代码输入到MATLAB系统中,但是,我们要对同一幅图像用不同的算子来检测,分析并得到他们处理图像的特点。针对经典边缘检测算子进行研究比较,提出一种新的边缘检测算法,实现对图像边缘信息的提取。

  数字图像处理这项技术用途也十分广泛,例如:在航天航空,我们可以对月球、火星等天体表面进行照片处理,还可以利用陆地卫星所获取的森林、海洋、环境污染、病虫害检测、石油勘探等图像进行资源分析;又或者在生物医学在工程方面,白蛋白、血红蛋白、基因遗传、细胞恶性病变的认识等。同时,它有助于信息交流,科学技术,社会治安。

  1.2国内外现状

  数字图像处理技术从20世纪诞生至今已经过去了大半个世纪,随着科学技术的不断提高,现在数字图像处理已经变成了可供我们学习、开发、研究的一门技术。在此期间边缘检测技术也有了相当长时间的研究发展史,虽然开发了很多算法,但在这些算法中我们经常使用的有两类。一类是在空间领域的微分算子的经典方法,另一类是基于图像滤波的检测方法。之后,在图像边缘检测的研究中,不断开发出了多种多样的算法以供我们进行图像处理研究。现在也在基础算法中总结开发出一些较为经典图像检测算法,如Roberts、Prewitt、Canny、Sobel、等,事物是两面的,我们享受检测方法给我们带来便捷的同时,也要了解他的局限性。最近,针对传统Canny算法在滤波时无差别平滑降噪、边缘信息丢失及模糊的现象,且人工选取梯度高低阈值存在局限性的问题,提出了综合考虑图像位置信息与亮度信息的双边滤波代替传统高斯滤波方法,改进的Cany算法大大改善了边缘的一致性,减少了伪边缘。另外,对于图像内相对较弱的边缘也有优秀的提取效果,改良后的算法的信噪比变高。实验结果表明,改进后的Canny算法能够有效保留真实边缘信息,并且使得边缘更加连续和完整。[1]

  1.3研究思路

  1)基于图像边缘检测算法和原理的理解,通过MATLAB软件调用与MATLAB函数工具箱的各种边缘检测运算符相关的函数,可以处理数字图像的边缘检测。

  2)分析图像处理系统的构建、计算原理、各种操作员的处理特性。

  3)下面就图像处理在各种算法下的优缺点进行说明,例如罗伯特运算符、预定义运算符、索贝尔运算符、二阶微分运算符拉普拉斯运算符等一阶微分运算符的理论分析等。理解了各种算子的好处以及局限性。我们在MATLAB系统中,用不同算子对同一图像进行检测和模拟。

  2.MATLAB的概述?

  2.1 MATLAB简介

  一般来说,MATLAB经常被称为Matrix Laboratory。英语的正式名称是Matrix Laboratory。MATLAB是用于处理图像和数值计算的软件,经常被用于各个领域当中,比如在代数矩阵中,MATLAB的系统中会自动计算出矩阵,又或者是在信号频域中进行动态仿真等,它有以下几个特点:

  1)MATLAB软件的系统拥有强大的数值处理功能为用户提供了500多种计算功能,并且它们的算法多样化,涉及到多门学科,同时包括了数学、统计学等各个学科。MATLAB的功能形式是相对自然的,以一种模式使用来解决问题,就好比是解决数学算式一样,并且大多复杂的运算都交给了计算机,因此解决问题是非常简单,这样我们就可以把更多的精力放在根本问题的解决上面。

  2)通过数据表明,MATLAB有一套自己的视觉数据系统,他可以将我们提供的图像进行高质量的绘制和提取,同时因为图像和文本的组合能鲜明地表示,使人更加清楚和明白与其他更复杂难懂的复合语言相比较,matlab的语言更为简洁明了,容易学习并且掌握,同时灵活引用,能够大大减小了程序员的工作量,程序员短时间编写程序,提高了工作效率。

  4)MATLAB系统是一个开放可延伸的系统,它的系统当中不仅包含了很多开源代码,数学原始代码,提供给我们直接使用,同时,我们还可以根据自己的需求,更改现有的函数。同时,我们还可以在MATLAB系统的环境下开发自己的多功能函数,创建、开发针对此类问题的预设,让MATLAB与我们有更好的配合默契,极大方便了我们处理各种问题。

  因此,MATLAB系统为用户提供了方便快捷的数学系统环境功能,用矩阵的模式作为基本结构,还简就化了繁琐的编程上带来的问题。与其他高水准编程语言相比,MATLAB定义的语法规则更容易学习。MATLAB还具备强大的灵活性,可以和很多计算机语言相互通融,例如,应用c语言时,可以直接选择c语言的函数,极大提高我们的工作效率,便捷了我们的操作。与此同时,我们可以广泛组合matlab程序和其他程序,主要依据直接选择matlab函数和命令,这不仅仅避免了matlab系统程序的局限性,还可以使用其他程序。在MATLAB中灵活使用,便于读取和写入矩阵数据,大幅提高作业效率。

  2.2 MATLAB系统搭建

  MATLAB系统可分为三个大部分,九个小类别。如下图:

  这个金字塔是MATLAB系统的三大部分,从下到上,有基本层、模拟应用层、实时模拟层,首先我们先介绍一下基础层:

  2.2.1 MATLAB软件

  在基础层中矩阵实验室(MATLAB系统)占主导中间位置,是构成MATLAB的关键因素,接下来我们分别介绍一下各个组成部分在MATLAB中的应用[2]。

  1)MATLAB语言:美国MathWork公司根据商业化市场的需求研发了一款数学软件,名为Matlab,它广泛应用于研究算法、总结数据等高级技术语言和交流环境,为了提供便捷的解决方案和全面的帮助给更多的科学领域,它融合了多种强大的功能,在一个便于应用的视窗环境中,这些强大的功能分别是:计算数值、计算矩阵、可视化的科学数据、以及非线性动态系统的建模和仿真。C语言本身是一种高级语言,由他编写的MATLAB系统将主要关注与计算、运用,而不是编写,它拥有一套属于自己的语言规范,并且和其他语言一样拥有定义、函数输入和输出,但是对于使用者来说会非常的方便和快捷。

  2)MATLAB函数:MATLAB拥有一套极为丰富的数学函数库,初等函数、矩阵函数的算法均在其中,在我们遇到的所有问题当中都可以归结为数学函数,所以我们使用MATLAB来处理问题就非常的容易。

  3)MAATLAB图形处理系统:MATLAB结合了图形用户界面GUI技术,实现了使用特别简单且全面的的数字图像处理系统。这包括图像强调、边缘检测、图像几何运算等一般使用的图像处理。

  2.2.2 MATLAB工具箱(Toolboxes)

  MATLAB有各种各样的工具箱选项。例如,包含超过100个功能和超过150个SIMULINK模块的通信工具套件用于通信系统的策略和分析。此外,频域系统识别套件还用于识别具有未知延迟的连续和离散系统。另外,还有图像处理套件和线性矩阵不等式等。这些是MATLAB语言的条件,统计核心还是MATLAB,可以在各个领域中根据不同的需求进行开发。

  2.2.3 MATLAB编译器(Compiler)

  MATLAB编译器是用来编译MATLAB语言的的一种编译工具。MATLAB兼容编译器的命令可生成各个应用程序COM对象、Excel插件。MATLAB根据目标类型生成适当的包装文件。锁存器文件包含编译的应用程序和可执行对象类型之间的接口。这包括执行用锁存器指定的初始化和结束处理的的排列,包括路径信息、加密密钥以及其他必要信息的定义。

  2.3 MATLAB图像处理的应用介绍

  2.3.1 MATLAB的图像处理工具箱

  在图像处理中,与基本的图像处理和通常的处理方法相比,使用MATLAB系统提供的MATLAB工具箱执行这些基本图像处理的函数,例如图像细节、分割和调整。所以,用MTALAB的图像处理工具箱时,可以完成绝大多数的数据处理,MATLAB图像处理工具箱可以起到处理和分析可视化图像,以及算法开发的参考标准、综合设置的图形工具,完成了对图形的强调模糊、评测特征、降噪、分割图像、空间转换、图像配准中的一些基本类型,Matlab的工具箱还可以对二值图像、图像序列、真正的彩色图像、灰图像和索引彩色图像进行处理。处理图像时,可以使用工具箱的类型进行函数转换,同时也可以根据工具箱对函数的各种要求进行相互转换。

  2.3.2 MATLAB中常用的图像函数

  1)imread函数:

  MATLAB可以借助imread()函数、自主完成对导入图像进行用户所发送的处理指令。MATLAB支持的图像也有各种各样的形式,一般的BMP、JPEG、JPG、TIFF、HDF、PCX等。

  2)imwrite函数:

  MATLAB可以通过imwrite()带有函数输出图像的MATLAB可以存储到图像文件中的矩阵数据。支持以上所有文件格式。

  3)imshow/image函数:

  在MATLAB编程系统中,用户可以应用imshow()、image()及其他函数,使图像完成我们所需要的操作。

  4)图像类型转换函数:

  在MATLAB中,只需执行函数即可完成我们对图像的变换需求。比如说把彩色的RGB图像转化成为黑白灰度图像,则要执行rgb 2 gray()函数。此外可以在不同的数据类型之间转换图像。例如,想要把图像的精度再在细致化为双精度图像,就必须执行im2double()函数。

  5)edge函数:

  MATLAB系统提供edge()是图像边缘检测的最基本函数。此外,只有黑吧的灰度图像才可以用这个功能,edge(IAMGE、method)是这个函数的定义。这里,使用IMAGE处理的IMAGE、method边缘检测算发也是IMAGE、method使用的IMAGE边缘检测算法,他们能够使用的方法包括string sobel、prewitt、roberts、log、Canny等。

  3.图像边缘检测

  3.1图像边缘检测的基本理论

  3.1.1图像的边缘

  边缘的基本定义:图像边缘其实就是一组像素,然而这些像素在图像中的位置会随着灰度像素的阶段性变化或屋顶的变化决定的。所以它的形状改变取决于它的灰度图像改变的等级。

  1)阶跃状边缘:只要是处在这个阶段的像素,都是位于阶跃性变化的台阶状的像素,并且它们有很好的连续性,可以说是一种非常理想的边缘模型。如下图3.1

  图3.1阶跃状

  2)屋顶状边缘:这种类型的镜像边缘是缓缓上升和下降的边缘。如图3.2

  图3.2屋顶状

  3.1.2边缘检测

  边缘是图像灰度等级变化最明显的位置。使用该功能的常规边缘检测、用于识别图像差的各个像素或图像的边缘像素的二次差。根据灰度等级的变化,边缘类型可以分为步骤、脉冲、顶棚三种类型。步进边缘和车顶边缘的情况下,边缘点对应导函数的零交叉和二次导函数的峰值。

  具有关系的一阶导数和二阶导数的图像边缘如图3.3

  图3.3图像边缘与一阶导数以及二阶导数的关系

  3.2卷积理论

  在处理图像时,图像处理实际上就是对图像进行卷积,也就是说,通过观察图像内的所有像素,使用各个像素的小区域生成最终图像来实现。

  3.2.1基本理论

  在数学定义中,计算两个函数的无限积分的方法被称为卷积。使用h和k表示两个函数。卷积是一个运算符,使用h和k反转h并移位,通过累积与g的重叠来生成第三个函数的算子。在实际应用程序和计算中,卷积定理意味着一个域中的卷积等于另一个域中的乘法,因此可以用卷积算法替换乘法。

  此外,我们还可以减少卷积操作以简化,这相当于加权加法过程。考虑到折叠的两个函数h和k,h或k作为区间的索引函数,实际上可以认为是扩展移动平均值。

  通常使用小矩阵作为卷积权重。矩阵的大小必须与操作区域的大小相同,必须是奇数[3]。通常,我们把这个矩阵被称为加权内核。在卷积过程中,永娟级的每一个元素乘以图像被操作区域相应的像素,然后把这些结果先相加再重新分配到图像的中心像素中。

  例如,假设A是3x 3大小的图像区域,应用于该区域的矩阵B的卷积内核也是3x3。接下来,使用A和B的折叠,新区域的中心像素值积核,大小也是3×3。那么利用A和B进行卷积,得到的该区域的新的中心像素值如下所示。

  其中:

  通常,卷积内核的所有元素称之为卷集系数。在图像处理效果中起着重要作用的条件有:卷集系数的大小、排列组合和排列方向。然后,我们通常使用的卷积内核是3x 3的矩阵。

  3.2.2边缘效应

  用卷积的方法处理图像的时候也会出现一些不好解决的问题。图像边缘是首要解决的问题。在处理图像的时候使用卷积,就必须翻转图像上的所有区域,并以像素为单位移动卷积内核。但是,在图像的边缘区域,卷积内核不能完全重叠在图像的领域,一部分的部分会超过图像的边缘而中断。这样,在图像外部中断的卷积系数在执行卷积运算时无法找到图像内对应的像素,从而导致计算上的问题[4]。

  有两个最简单且常用的办法来解决这一类问题:

  1)用常数填充:在折叠内核中中断元素的对应位置都应该是常数。这个时候就可以默认这些常数为0.

  2)复制边缘像素:把图像边缘的像素与卷积核中的悬挂元素一一对应后再进行复制,最后交给计算机进行处理。[5]

  3.3 Roberts算子

  3.3.1基本理论

  函数梯度定义如下:

  对于数字图像,渐变是渐变模式。用数字图像处理差值再近似差分。Roberts算子[6]的基本原理是:首先,计算出图像上所有垂直方向上的像素差异,然后用这个差异值再计算像素的梯度。在我们真正计算的时候用的像素,是对角线上的像素,这个时候两个像素会产生差值,即:

  图像的梯度为:

  简化后得:

  相对应的卷积模板:

  ,

  如果使用用于处理图像边缘的边缘检测运算符Roberts,第一步是根据上述方程式获得梯度幅度。接下来,设置预设TH,这个预设是在图像边缘上选取适当的阈值,然后将这两个值进项大小判断对于图像的边缘点>TH,则(x,y)为图像的边缘点,要检测所有这样的边缘点,就需要使用图像的边缘图像。

  想要用罗伯特算子检测图像的边缘,需要知道图像中处于对角位置上相邻的4个像素的灰度差,由于不进行特别的平滑化处理,所以不能起到降低噪声的作用,灵敏度比较高。由此推断Roberts算子对噪声较大的图像处理中有很好的效果。

  3.3.2 Roberts算子

  1)获取原始图像数据区域的指针

  2)在图像处理的中间过程中创建一个能缓冲中间结果的区域,我们吧这个区域称为新缓冲区,在这个区域中像素之间不能有偏差。

  3)用Roberts算子浏览新创建的区域,遍历这个区域内缓冲存储器内的所有像素,就可以实现核心算法。我们利用以上公式计算它们的灰度值。

  4)那计算数据的结果复制粘贴到原始区域。

  代码见附录1

  处理对比图如下:

  3.4 Sobel算子

  3.4.1基本理论

  图像中的点的梯度值随着该点周围相邻像素点间的灰度差变化而变化。换句话说,随着像素的梯度值的增大,对应区域的灰度等级就会在图像的边缘变化更为急速。相反,在像素梯度值较小的图像区域中,灰度等级的变化会缓慢平稳[7]。因此,可以计算图像的一阶导函数来获得图像的梯度值,然后获得图像的边缘。

  Sobel边缘检测融合了一阶导数的边缘检测运算方法和上面的理论。极为准确的计算出加权差即各个像素点垂直方向上4个相邻方向的灰度差。由于权重的因素,靠近中央像素的相邻像素的权重更大。分别求微分和梯度。

  如果要执行卷积运算,则索贝尔边缘检测器将使用3×3卷积内核大小的矩阵。在Sobel算子经常应用的卷积模板中,分为水平方向和垂直方向两种模板。显而易见前者检测水平方向的边缘时效果最好,后者在检测垂直方向的边缘时效果最好。

  水平模板:垂直模板

  使用Sobel算子检测图像边缘时,使用两个模板将图像内的各个像素折叠起来。中间像素就是是卷积计算模板的中心元素。在操作完成后,我们把两个计算结果互相对比,数值大的成为点的输出位,选择适当的阈值提取边缘。

  图像模板邻域,如下表:

  水平方向的卷积为

  垂直方向的卷积为:

  梯度计算为:

  在图像处理中,Sobel边缘检测运算符具有简单的计算方法和处理速度快的优点。同时,此算法对噪声也有一定的抑制效果。相反,这个算法也有几个缺点。因为该算法用于计算,所以只使用两个垂直模板的折叠内核,所以只对水平方向或垂直方向上的边缘有效,适合处理简单的纹理图像。我们不建议应用复杂的图像纹理。

  但是,若检测到图像内特定方向的边缘,Sobel算子为检测45°或135°方向边缘提供操作算子模板。

  检测45°方向边缘Sobel算子检测135°方向边缘Sobel算子

  3.4.2用Sobel算子检验图像边缘

  1)获取原始图像数据区域的指针

  2)先创建两个与原始图像无差别的存储器,然后将其保存,再对副本进行处理,两个区域均被初始化。

  3)在两个缓存区域内创建了Sobel算子模板应用于卷积与运算,在两个区域中,复制图像的所有像素都发生了故障,为了得到准确结果,我们逐个进行卷积运算

  4)比较上一步骤中获得的两个缓存区域的结果,并将较大值重新分配给图像像素。

  5)把选定的图像复制粘贴到原始图像数据区

  代码见附录:

  对比图如下:

  3.5 Prewitt算子

  3.5.1基本理论

  Prewitt边缘检测运算符的方程式和原理,基本上和之前的论文说明的一样。但是,它们之间的差异并不等同于卷积模板的使用,前者是通过加权平均法来使用的。也就是说,中间像素会影响周围像素的加权平均值,也就是说,越接近像素的中心像素,影响越大,加权越大。Prewitt算子模板如下:

  水平模板垂直模板

  使用预设运算符检测图像边缘的时手,用上面两个模板把图像中的各个像素进行卷积,再把中央像素与模板中心像素相对应,最后进行运算。计算完成后,把两个卷积内核的数据结果进行对比,大的数值成为点的输出位,选择适当的阈值提取边缘。

  3.5.2用Prewitt算子检验图像边缘

  1)获取原始图像数据区域的指针

  2)建立两个和原来图像无大小差异的新缓冲存储器,将原始图像保存,对副本进行处理。两个区域均初始化。

  3)在两个缓存区域,分别建立卷积运算的prewitt模板,复制图像的所有像素在两个区域分别发生故障,逐个进行卷积运算。

  4)比较上一步获得的两个缓存区域的结果,把较大的值重新分配给图像中的像素。

  5)把选中的图像复制粘贴到原始区域内。

  代码见附录:

  对比图如下:

  3.6 Krisch算子

  3.6.1基本理论

  krish边缘检测运算符,使用的卷积模板是3×3模板。就看图像中所有像素,把每个像素作为中心,一个一个调查8个相邻区域的像素的灰度值。计算渐变边缘检测器运算符和3个相邻像素的加权灰度值之间的差剩下的5个像素的加权灰度值。在该方法中,在该方法中,按照顺序依次计算8个方向的差值,把最大值重新分配给当前中心像素,成为输出特定方向。krissch算子讲8个卷积模板作为中心像素的8个特定方向。

  八个卷积模板为:

  依据8个卷积模板,先把上传图像的所有像素进行处理,得出边缘强度结果。然后根据检测阈值计算出最终的边缘点,这样就实现了Krisch边缘的检测。

  3.6.2用Krisch算子检验图像边缘

  1)获取原始图像数据区域的指针。

  2)创建两个与原始图像大小相同的新缓冲存储器,把原始图像保存,对副本进行处理,两个区域均被初始化,再复制粘贴,分别贴上图像1和图像2的标签。

  3)对于两个缓存区域,在卷积运算的每个区域设置单独的Kirsch模板,复制这两个区域内的所有像素,执行卷积运算,得出卷积结果。把计算出来的值进行比较,保存到图像1中,然后将图像1复制到缓存图像2中。

  4)重复步骤3,按顺序设置剩下的6个模板并执行计算。最后,将图像1和图像2进行比较,取得较大的灰度值保存到图像1中。对图像1进行处理后复制粘贴到原始区域。

  代码见附录:

  对比图如下:

  3.7 LOG算子

  3.7.1基本理论

  根据图像的边缘的特征,已知周围图像的灰度等级变化很大,因此这里的一阶导数具有极大值或极小值,这也是区域的二次导数。拉普拉斯运算符取图像函数的二次导数,决定与零点交叉的位置,从而决定图像的边缘。

  设一个连续函数为,定义在(x,y)点的LOG算子为:

  从上述公式可以看出,拉普拉斯运算符具有各向同性的特性。也就是说,不依赖方向,线性且不变的位移。基于此特性,拉普拉斯运算符可以清晰地检测各个方向的数字图像的边缘。

  拉普拉斯运算符在图像边缘的检测和处理中与上述运算符相同,是基于卷积模板实现的。拉普拉斯运算符中使用的模板定义必须满足以下规则:模板中所有元素的总计等于零,中间元素为正,其余元素为负。拉普拉斯运算符中使用的模板有很多形式,以下两个一般用于离散情况:

  Laplace运算符通常由以下公式表示:

  这里,表示图像的点(x,y)上关于X轴的第二个偏微分和关于Y轴的第二个偏微分的合计,也表示点上的灰度值图像由拉普拉斯算子处理后。

  使用拉普拉斯运算符检测图像边缘的本质是通过检查运算符的零位置来找到图像边缘的位置。在一些图像边缘检测情况下,将焦点放在边缘位置上,但不用在意灰度差异的特定值。基于拉普拉斯运算符方向的无关性,拉普拉斯运算符是一个很好的选择。

  通过分析拉普拉斯运算符的渲染图,可以发现一些明显的问题和缺点。边缘图像的一部分可能会出现两个像素的情况。因此,无法正确判断实际的边缘在哪里,复杂而无用的信息会增加。这样的图像的结果无疑是加倍的噪音,图像质量差,不够。因此,通过拉普拉斯的计算很少直接用于检测图像的边缘,而是与高斯平滑滤波器组合使用。

  3.7.2高斯算子

  高斯滤镜可以减少图像噪声的一部分。线性平滑滤波方法:由高斯函数的图像选择模板[8],这样可以抑制正态分布的噪声。由于高斯滤波器拥有空间稳定性和小空间位置误差的特征所以它可以广泛应用于平滑原始图像的噪声。

  二维高斯函数为:

  是方程式的标准偏差,定义如下:与上述方程式组合,计算二次导数。得到的表达式是高斯·拉普拉斯运算符:

  3.7.3高斯-拉普拉斯算子

  高斯拉普拉斯运算符考虑到在图像中添加预处理步骤以得到边缘检测的结果,极大地提高了图像的质量,首先使用高斯滤波器平滑图像,降低噪声,并且在检测算法的入口处的图像本身质量。接下来,开始实际检测。低噪声图像使用拉普拉斯运算符处理,获得图像边缘。

  高斯-拉普拉斯运算符式的增量差的选择对图像检测结果有决定性影响。小的情况下,边缘检测的位置精度会变高,但边缘的细节会发生很大的变动,常备用来检测图像的边缘细节。对于较大时,平滑效果会增大,但噪声的影响会大大减少,同时,重要信息的一部分也会平滑化,引起详细损失,从而根据要求提高边缘位置的精度图像噪声以及边缘选择适合检测精度的[9]。

  最常用的高斯拉普拉斯运算符的卷积内核模板是一个大小为5x 5的矩阵。

  3.7.4用高斯-拉普拉斯算子检验图像边缘

  1)得到原始图像区域指针。

  2)创建于原始图像无大小差异的缓冲区,复制粘贴。

  3)设置用于卷积运算的高斯加算子模板,浏览区域内复制图像的像素,执行卷积运算,得出结果。

  4)把计算结果复制粘贴到原始区域。

  代码见附录

  3.8 Canny算子

  3.8.1基本理论

  Canny算子的思路和LOG方法的想法相似。LOG方法首先通过一定的技术方法达到图像平滑化降低噪声的目的,完成目标图像的降噪后,计算导函数进行调查。

  我们在进行边缘检测时面临的急需解决的两个主要问题分别是:抗噪声干扰,选择正确的边缘位置。如果单单是应用简单的微分运算来检测图像的边缘,则作为高频成分的图像的边缘部分和噪声部分的处理变得困难,图像噪声变得更严重[10]。因此,更好的处理方法是在检测图像边缘的过程中使用平滑化过滤器来减少图像噪声,接着使用微分计算进行定位和检测操作。Canny边缘检测算子使用该处理方法,应用高斯函数作为图像处理结果得到一次微分处理图像,可以解决我们面临的两个主要问题,即抗噪声干扰和正确的边缘位置。

  在提出Canny算法的同时,我们还提供了三个标准来识别各种边缘检测的质量[11]。

  1)良好的检测性能是指边缘检测算法的性能优异和低错误率,很少将图像的边缘点作为非边缘点输出到结果图像,或者很少将非图像边缘点直接作为输出到结果图像的边缘点。客观来说我们使用信噪比(SNR)参数值越大检测结果越好。

  在上述公式中,可作为图像的边缘函数,可作为平滑操作中使用的滤波器函数,可作为图像中噪声的平均方差。

  2)定位的精度较高,在检测结果中,如果输出的图像的边缘点距离原始图像的边缘点越接近,那么算法的定位精度就会越高。评价参数Location越大越好。

  3)边缘响应的数量少。降低检测过程中多个像素对应一个像素的边缘的概率,也就是说,单个像素就会响应图像的边缘。使用函数表示检测运算符的脉冲响应导函数的零交叉点之间的平均距离时,必须满足以下条件:

  π

  总之,Canny边缘检测性能评价标准的简单概括是一种非常优秀的边缘检测算法,它不仅能提高检测边缘像素的算法的灵敏度,还能充分抑制噪声。

  1)Canny运算符首先使用高斯过滤器来平滑化和去除噪音,对于导入的图像先进行处理,就要用高斯函数把图像折叠起来。公式如下。

  其中*是卷积运算,表示高斯平滑滤波函数,表示原始图像点的灰度值,表示高斯函数的分散,主要影响图像的平滑度。

  2)根据图像中的点(x,y)沿两个方向计算偏差函数,在这一点上计算梯度的大小和方向。公式如下:

  梯度的幅值:

  梯度方向为:

  3)按照之前的步骤获取图像的全局梯度后,必须将具有本地梯度的最大值的像素点排除,并获取第一个图像边缘。Canny运算符为我们提供了一种方法叫抑制非极大值方法,它可以为我们提供选择梯度上的最大值,这种方法经常用于完成这个步骤和图像边缘的预提取。最大抑制实际上是将四个扇区的中心像素周围的梯度区域和梯度离散图像用作研究区,观察像素点B(x,y),然后按顺序编号0到3,并将灰度值与周围像素作为字段的中心进行比较。在渐变方向上,如果他同时在附近的两个以下,邻域幅角方向示意图如下:

  4 3 2

  1 0 1

  2 3 4

  邻域幅角示意图

  4)双阈值检测边缘

  如果用单独的一个阈值处理图像的话,就很难选择一个相对合适的阈值,所以通常需要反复测试几次。因此,我们用双重阈值进行检测。先用非极大值抑制处理原始图像,再用双阈值处理,分别标记为th 1和th 2。另一方面,这两个值的大小关系满足公式th 1=0.4th 2。首先,使用阈值th 1处理图像,移动图像中各个点的梯度值。与th 1相比,小于th1时,灰度值设置为0。扫描后,输出图像被用作图像1。接着,图像与th 2同样处理,扫描处理后的结果图像,作为图像2。

  5)连接边缘

  用小阈值检测出来的图像1虽然保留了很多图像上的边缘信息,但是对于噪声的影响还是很大。用大阈值检测出来的图像2虽然在噪声上有了明显的降低,但是在图像边缘信息的保留上明显不足。这样,基于图像2,使用图像1中保持的边缘的详细信息,补充图像2中缺失的信息,可以连接图像的边缘[12]。

  I首先,图像2的像素被逐个扫描。扫描初始零以外的灰度像素时,将标记为点p(x,y)。将此点作为起点,继续扫描与此起点相连的等高线。

  II比较图像1和2的位置,发现与图像2的点q(x,y)对应的点s(x,y),调查图像1的8附近的全部像素,追加点。像素的灰度值相对于图像2的对应位置不是零,而是将其标记为点t(x,y)。然后,从点t(x,y)开始,重复上一个步骤。因此,通过循环后,发现无论哪个图像都无法继续,停止后进入下一步。

  III按照前两个步骤,将访问的标记添加到跟踪的边缘线中。从步骤1到图像2的所有等高线连接为止,查找要连接的其他等高线、循环步骤I、步骤1和步骤3。

  Canny算子是通过找到目标图像上信号的最大值检测图像边缘的过程。因为Canny算子使用高斯过滤器使噪音平滑化,所以加工防止性能变高。同时,Canny算子又拥有双重阈值检测算法和边缘连接这两种方法,所以就加强了图像边缘的检测,因此该算子所提取的图像的边缘连续性良好。

  3.8.2用Canny算子检验图像边缘

  1)获取原始图像数据区域的指针

  2)原始图像被高斯过滤器平滑化,降低了噪声的影响。也就是说,使用高斯函数将原始图像折叠起来。

  3)为了执行最大的抑制,我们用上一步的结果当做这个步骤的输入,计算第一个偏微分的有限差分,然后计算该局部区域的梯度幅度和方向。

  4)创建两个于原始图像大小想等的目标图像的缓冲存储器,再将原始图像的副本初始化为两个区域。

  5)使用Th 1和th 2从两个缓冲存储器中提取图像的边缘信息,取得图像1和图像2。

  6)连接边缘的操作主要基于图像2。通过比较和调查图像1,总是增加有效的细节,从而获得相对连续的图像边缘。

  7)将连接图像复制到原始图像数据区域。

  代码见附录:

  对比图如下:

  3.9小波变换的图像边缘检测

  3.9.1基本理论

  小波或小区域的波是一种特殊的波形,他们的长度有限,并且均值等于零小波具有两个特性,分别是“小”和“波动”。“小”指的是在时间范围内有紧密或接近紧密的支持。第二个特性是,其直流分量为0[13]。小波变换是在时域中分析信号的方法。它用时间频率来测定,如果它与信号特性相结合使用的话,低频部分和高频部分各自在频率成分和时间成分上有比较高的分辨率。信号可以根据需要适当显示。信号通过小波变换处理后,可以突出显示特定侧面的特性。这对研究人员的专业分析有帮助。因此,小波函数比正弦好的地方在于小波函数具有分析信号的局部特性。因此,图像边缘像素的灰度等级有剧烈的变化。通过调查1次微分或2次微分,确定边缘的位置。一次微分用来确定最大值,二次微分用来确定零交叉点。将此映射到信号域中,就对应于信号平滑后的拐点。如果通过小波变换提取图像的边缘,图像信号就会在各种各样的尺度上分解成几个成分。找到那个最大点的话,也能知道信号变换点的位置。根据上述的推论,这个地方也是寻找图像边缘的地方。

  使用小波函数检测图像边缘方法如下:

  其中是平滑函数,应满足:

  ,且≧0

  那么,它对应的二进小波变换为:

  如果缩放设置为的固定值,则计算梯度向量系数的公式和相位角的公式如下所示:

  图像平滑后,梯度模块在灰度值的变异点上的最大值将沿着相位角α的方向获得。

  3.9.2多尺度边缘检测

  该想法是使用可以将小波分析分解为若干不同分辨率特性的方法,并且还可以基于不同的尺度、重叠以及每个比例配置、厚的选择通过一系列改变分解为信号。嵌入式或空间域的细度、步进取样。继续聚焦,通知所有细节。

  小波变换在图像信号以不同比例处理时提供关于图像边缘的信息。如果比例较小,则可以获得更详细的信息。这也有助于更准确地识别边缘点,相反,可以提高对噪声的灵敏度。比例尺变大的话,图像的抗噪音性会提高,图像边缘上的很多细节就会变得平滑,边缘的定位精度会降低。

  为了在正确定位边缘位置和减少噪声影响之间实现更好的平衡,使用多尺度和多阈值处理多尺度边缘检测,然后综合各种结果,最后获得图像边缘。这是多尺度边缘检测的中心想法[14]。使用多尺度小波变换方法的密钥通常是选择和的不同分析比例。

  4.对Canny边缘检测进行改进

  4.1双边滤波

  传统的Canny运算符高斯过滤器对边缘信息的保护不够充分,过滤器同时模糊边缘,因此需要手动设定双重阈值的选择,适应性不足。所以提出了一种改进的方法,将高斯滤波替换为同时考虑范围域和空间域的双边滤波。考虑到会影响像素信息和亮度,应该保护边缘的信息。同时,为了取得更好的图像边缘用最佳阈值分割的方法求出高阈值;用大律法求出低阈值。

  双边滤波[15]是一种非线性滤波器,它可以达到保持边缘、降噪平滑的效果,它与高斯滤波相比具有在考虑空间域像素信息和域信息的同时组合滤波的方法的优点。空间的自然图像慢慢变化。通常,相邻的像素非常接近,但是在图像的边缘上进行以往的过滤的话,必然会产生边缘模糊。考虑图像相似性值的范围,优化双边滤波到权重附近各个点的中心,计算内核函数和图像矩阵的卷积运算。主要的想法是,为了减少边缘的模糊大的差的某一侧的边缘像素值发生变化的话,对应的重量就会减少,和附近被加权了的影响的一侧一样会变大,对减少边缘的模糊产生影响。双边滤波的核函数包括空间域核与像素范围域核:像素值在图像平坦区域,对应的像素范围域权重接近于1,这个时候像素值变化很小,此时空间域权重起主要作用,相当于进行高斯模糊;在图像的边缘区域,如果像素值变化很大,那么像素范围域权重变大,从而保持了边缘的信息,像素点p(i,j)输出值计算公式为:

  为各个像素点的值;为位置域高斯函数;为像素值亮度高斯函数

  4.1.1用双边滤波检测图像

  代码见附录:

  4.1.2对高阈值进行最优阈值分割

  使用最佳的阈值分割方法获得高阈值。这样,图像被分割成实际的边缘部分和非实际的边缘部分这两个部分比高阈值大的点就是边缘像素点。最合适的界限划分的主要想法如下:

  设置所获取梯度图像的初始阈值,通过重复分割操作获取新的阈值T,比较T和,相等时返回T,新阈值T将梯度图像分割成两个部分,并最终获得最佳分割阈值。

  最优阈值分割计算方法:

  4.1.3对低阈值进行Otsu(大律法)

  大津法也被称为Otsu。使用大津法将梯度图像的非实数边缘部分分割成伪边缘部分和非边缘部分,分割阈值是通过迭代分割获得大类间方差的最佳分割阈值。

  关于Ostu的界限值划分的想法如下:给定初始阈值后,图像会在重复操作后分成两个部分,即对应的伪边缘部分和非边缘部分,确定图像的高低阈值和伪边缘后,将提取图像的边缘。计算方法如下:

  图像的总平均梯度为:

  类间方差为:

  与是前后图像的像素点比列;与是前后图像的像素平均梯度。

  4.2用改进的Canny边缘检测方法检验图像

  1)得到原始图像数据区域的指针。

  2)把RGB图像转化为灰度图像,读取灰度图像。

  3)对灰度图像进行双边滤波。

  4)计算图像的梯度方向和幅值。

  5)得到计算值后执行非极大值抑制,从而可以得出高阈值和低阈值

  6)将高阈值进行最优阈值分割,将低阈值进行Otus,得到双阈值。

  4.2.1实验仿真验证与分析

  改进方法在MATLAB2019仿真平台下验证,硬件平台为Intel core i5-6300 8G运行内存的计算机,传统的Canny和改进的Canny算法所取得的高阈值和低阈值都是为了比较而选择的。实验数据分别如表1和表2所示。

  方法高阈值低阈值

  传统方法72 36

  改进方法71 45

  表1.工具阈值的比较

  方法高阈值低阈值

  传统方法79 39.5

  改进方法88 50

  表2零件图阈值比较

  下图中示出了本论文传统的Canny算法与改进的电容算法的比较。图a是实验的原始图像,图b是检测到以往的Canny后的再现,图c是改良后的呈现。这张纸的形象。从图中可以明显看出,对于原始图像,本论文改进的算法边缘比传统的Canny算法的边缘更加完整、连续,伪边缘也越来越少。

  (a)原始图像

  (b)传统Csnny算法

  (c)改进的Canny算法

  表3两种算法的SNR比较

  图像Canny算法改进的算法

  工具图30.381 7 36.092 1

  齿轮图67.693 5 94.875 9

  相比之下通过改进的算法SNR得到了大幅度改善,选择了自适应双重阈值后边缘保护效果得到了提高,图中的假边缘被有效地削减,用特定的功能可以提取相对模糊的弱边缘。