基于改进Canny算法的边缘检测技术应用及发展趋势
2023-08-30汪宗洋王煜朱硕
汪宗洋 王煜 朱硕
(1. 江苏集萃深度感知技术研究所有限公司 无锡 214000;2.南京信息工程大学电子与信息工程学院,南京 210044;3. 无锡学院电子信息工程学院,无锡 214105)
0 引言
边缘检测是图像处理、计算机视觉等领域中的基础性研究问题之一,主要通过提取图像中梯度变化较大的像素点来确定图像边缘,并将亮度变化由亮变暗、由暗变亮的点集标识出来,最终形成轮廓。作为数字图像处理技术中最基本的研究内容,图像边缘检测技术可以更加直观地展示物体边缘或结构,在图像分割、工业、医学以及智能交通等方面有着广泛应用。
随着计算机视觉的不断发展与进步,边缘检测算法不断被优化与更新。目前,边缘检测算法主要分为一阶微分算法(包括Sobel算法、Roberts算法、Prewitt算法)和二阶微分算法(包括Laplacian算法、LOG算法、Canny算法等)。不同边缘检测算法的出现,使图像边缘检测技术得到了更好的发展。其中Sobel、Roberts等算法虽形式灵活、检测精度高,处理被椒盐噪声污染过的图像时,对灰度变化明显且受噪声影响较小的图像处理效果较好,但在处理边缘复杂、噪声较大的图像时,有时会将噪声和边缘上的信息一起过滤掉,从而遗失重要的边缘信息,使得图像处理效果并不理想,在实际应用中仍存在一定局限性。
基于上述问题,Canny于1986年提出了Canny算法,Canny算法是多级边缘检测算法,可以根据实际需求改变双阈值从而应用于不同场景,同时不易受到噪声的干扰,也能够检测弱边缘。相较于其他边缘检测算法,传统Canny算法因其显著的优势被普遍应用,并且随着图像边缘检测技术的发展,诸多学者在传统Canny算法的基础上,针对使用过程中因滤波、检测、定位等因素导致边缘检测精度降低的情况,开展了Canny算法的改进研究。Canny算法经有效改进,可快速、高效地完成对图像边缘位置的准确识别,有利于开展图像边缘检测工作,使该技术在工业制造、工件分拣、医学图像融合、通信及地质图像领域中得到广泛应用。
1 Canny边缘检测算法
1.1 传统Canny边缘检测算法
传统Canny算法的边缘检测步骤如图1所示。首先选择高斯滤波器对待处理图像进行平滑滤波,利用一阶偏导有限差分求得每个像素点的梯度幅值与方向,然后采用非极大值抑制技术对平滑后的图像进行处理,最后采用双阈值方法检测和连接边缘,获得最终的边缘图像。
图1 传统Canny算法的检测步骤
(1)高斯滤波去噪
使用高斯滤波器滤除图像噪声,选取的高斯函数表达式为:
(1)
平滑后的图像表达式M(x,y)为:
M(x,y)=G(x,y)×f(x,y)
(2)
其中(x,y)是坐标,σ是标准差,f(x,y)表示原图像的函数。高斯卷积核的大小将影响Canny检测器的性能,卷积核尺寸越大,检测器对噪声的敏感度越低,但是边缘检测的定位误差也将略有增加。
(2)图像梯度计算
计算平滑后的数据阵列M(x,y)的梯度幅值和梯度方向时,传统Canny算法通常采用2×2领域一阶偏导有限差分。其中,x方向和y方向偏导数的两个阵列Ex和Ey分别为:
(3)
(4)
(5)
(6)
(3)非极大值抑制
非极大值抑制用于保留梯度方向上的局部最大值,抑制其他像素点。具体实现方法是计算每个像素点的梯度方向,将其梯度方向量化为四个区间,然后比较该像素点在梯度方向上与其两侧像素点的梯度幅值,如果该像素点的梯度幅值最大,则保留该像素点,否则将其梯度值抑制为0。此种方式可以将边缘细化和清晰化。
(4)高低阈值的选取
上述三个步骤之后,还需通过选择高低阈值来减少假阳性的数量,将像素点按照梯度幅值的大小分为强边缘、弱边缘和非边缘3类,然后根据设定的高低阈值对弱边缘进行处理。其中高低阈值的选择需要根据输入图像具体分析,若弱边缘与强边缘相连,则将其归为强边缘,否则将其抑制。
图2为传统Canny算法运行各个步骤后的结果,图2(a)为输入原图(来源于边缘检测公用测试图像);图2(b)为灰度化后的运行结果;图2(c)为高斯滤波后的运行结果;图2(d)为梯度计算后的运行结果;图2(e)为非极大值抑制后的运行结果;图2(f)为设定双阈值后的运行结果,即最终输出效果图。其中,图2(c)与图2(b)相比明显变得模糊,这是由于高斯滤波造成的过度平滑现象。
图2 传统Canny算法的运行结果
Canny算法具有信噪比高、定位精度高以及单边缘响应能力强等优点,并且处理过程简单、时间复杂度低,但也存在一些不足之处,例如高斯滤波会对图像过度平滑,不能完全去除噪声;高低阈值需要人为设置,自适应性较差。众多研究机构针对这些问题以及实际的测试需求对算法进行了相应的改进。
1.2 改进Canny边缘检测算法
目前,改进Canny算法的研究主要集中在两个方面。一方面是在原有Canny算法基础上增加预处理或后续处理;另一方面是对Canny算法的滤波方式或高低阈值选择与设定方法进行改进、优化。
1.2.1 增加预处理或后续处理
在采用传统边缘检测之前,先对图像进行预处理,这种方式会在一定程度上提高检测效率。例如,商景辉[1]采用的直方图均衡化方法,增大了图片之间的对比度;王弘毅[2]等提出利用数学形态学进行预处理,不仅保留了边缘信息,而且抑制了噪声,但边缘的细节信息还有待改进;石炜[3]等提出的预处理方式是将二值化的图像进行形态学闭运算处理,增强了改进算法的抗噪性,并准确保留了图像的边缘特征。
传统Canny算法进行图像预处理时,颜色空间多采用RGB格式。而徐衍鲁[4]等提出将图像的颜色空间从RGB格式转换到HSV格式,并将V分量图像提取出来,然后用双边滤波对预处理后的图像进行滤波去噪。
除增加预处理外,一些研究人员在完成边缘检测后,对结果进行了后续处理。卞桂平[5]等运用复合形态学滤波取代高斯滤波,最后运用数学形态学对边缘进行细化。姜恒[6]等利用分区思想将图像划分为若干相互重叠的区域,最后将Canny算法处理后的子区域拼成一幅完整图像。改进Canny算法虽然提高了抗噪性,但是形态学算法的处理速度较慢。
1.2.2 针对图像滤波去噪的改进
由于传统Canny算法的高斯滤波并不能将噪声全部滤除,针对此问题,陆华才[7]等提出利用混合滤波器代替高斯滤波器,并通过最大类间方差法(即Otsu算法)获得高低阈值,再利用隔帧处理的四帧差分法对高斯混合模型进行改进,将其应用于运动目标的检测;张加朋[8]等使用开关中值滤波代替高斯滤波,同时采用K均值聚类(K-means)算法与Otsu算法结合的方法来获得自适应的高低阈值,最后采用面积形态学方法去除干扰边缘,改进后的方法去除椒盐噪声的效果更明显,但是算法处理时间过长。段锁林[9]等提出采用改进的自适应中值滤波,并结合改进的中值滤波(Improved Median Filter,IMF)算法对高斯噪声进行滤波,利用8邻域范围内的数据计算梯度幅值和方向,最后利用二分法查找原理改进Otsu算法来计算高低阈值,取得了较好的检测效果。为了达到高效率、高精度的目的,赵静[10]等提出使用改进的快速中值滤波算法代替经典的高斯滤波。杜绪伟[11]等用双边滤波代替高斯滤波,改进后的Canny算法减少了假边缘数量,提高了去噪效果。
张鹏帆[12]等提出用K-近邻均值滤波代替高斯滤波,并用Scharr算法代替Sobel算法进行梯度计算,最后使用Otsu算法计算双阈值。田贝乐[13]等提出了一种改进的小波变换法(Wavelet Transform,WT)对图像进行滤波,此算法有效消除了噪声,能够保留更多的原图像信息;巨志勇[14]等提出将梯度倒数加权法进行改进,并对图像进行滤波去噪,可以很好地去除噪声,同时极大提升了边缘细节,但是面对复杂图像的边缘检测会有连接不佳的情况。为改善上述情况并有效提高检测精度,程聃[15]等还提出使用结合小波变换的同态滤波算法对图像进行处理。
1.2.3 针对高低阈值设置方法的改进
由于高低阈值的设定需要依靠人工选取,边缘检测算法在确定高低阈值方面自适应性差,刘宇涵[16]等首先采用自适应模糊中值滤波对图像滤波,改进8方向的梯度幅值计算方法,最后将自适应迭代法阈值与Otsu算法结合来确定双阈值,改进后的方法有效保留了图像的边缘细节。李庆忠[17]等利用改进梯度倒数加权滤波的方法滤除图像噪声,最后采用分块自适应双阈值对高低阈值连接进行改进,此算法能够提取传统算法无法检测的弱边缘,具有较高的边缘检测率。宋人杰[18]等利用混合滤波器代替固有滤波器,并将线性边缘增强与Otsu算法相结合获取双阈值。
宋大成[19]等则提出在阈值选取时采用动态单阈值,这种改进方法不仅增强去噪性,而且更加简洁。董宏亮[20]等提出使用两次Otsu算法,这种改进可以完全自适应地得到最佳阈值,避免了人工设置阈值的局限性。李磊[21]等提出结合了截距法和人工蜂群(Artificial Bee Colony,ABC)算法的Otsu算法的自适应阈值选取方法,减少了人工干预,增强了自适应性。何育欣[22]等采用局部高低阈值矩阵的方法,检测精度有明显提升,但是计算的时间复杂度变大。由于弱边缘很难被检测出来,王保军[23]等提出设置高阈值得到强边缘图像,以强边缘端点的边缘方向为引导,然后利用霍夫变换(Hough Transform)代替传统双阈值法检测连接边缘。图3为使用不同算法和高低阈值时的检测结果对比图,图3(a)和图3(b)均采用传统Canny算法,其中图3(a)是高低阈值设置为(100,40)时对图像进行边缘检测的最终输出结果;图3(b)是高低阈值设置为(160,50)时的最终运行结果;图3(c)是采用Otsu算法自适应高低阈值的运行结果,可以看出其运行效果更佳,与图3(a)(b)相比,保留了更多细节,这主要由于传统算法中高低阈值的选取具有一定的不确定性,并且易受人为因素的干扰。
图3 传统Canny算法与改进Canny算法的检测结果对比
1.2.4 其他改进方法
除上述改进方法外,王海龙[24]等提出对非极大值抑制的插值方法进行改进,并利用最优迭代和择优选取方法自适应选取高低阈值。王文豪[25]等提出使用自适应中值滤波代替高斯滤波对图像进行滤波,并采用类间方差最大法自动选取阈值,最后采用多特征融合技术修复断裂的边缘,该方法可以很好地控制断裂边缘的错误连接。闫河[26]等提出了利用像素均值的方法,将非边缘点的像素点排除在外,具有较好的修复性,减少了伪边缘的依赖性,但同时也增加了对初始点选取的依赖性。Hou Shou-Ming[27]等提出将直方图均衡化用于增强图像对比度,在改进Canny算法中,用中值滤波器代替高斯滤波器来去除孤立的噪声点,采用K-means算法分离图像背景和边缘,并结合数学形态学和Otsu算法对Canny算法进行不断改进,该方法能够有效检测出弱边缘。为了解决传统算法对噪声敏感的问题,郑子华[28]等提出在对图像进行边缘检测的过程中加入边缘曲度算法,可以在尽可能抑制噪声的同时保留边缘细节,但是该算法不具有自适应性且时间复杂度高。
王昊[29]等通过图像灰度化处理、直方图均衡化及海森(Hessian)矩阵实现了图像预处理,并提出一种CannyPF(Canny Parameter Free)算法来提取边缘、连接边缘点,以及利用K-means聚类方法合并边缘线段,最终实现输电导线的目标提取。孙浩然[30]等提出利用拓扑结构首先对图像进行预处理,然后使用双边滤波去噪,多尺度对图像边缘细节信息进行增强,并使用4方向的Sobel算法计算梯度幅值和方向,最大熵法自适应计算双阈值,最后使用形态学处理完善边缘,将改进后的算法应用于电池电极的缺陷检测,具有一定使用价值。
2 Canny算法的应用及发展趋势
从上述Canny算法的改进及应用中可以看到,目前利用Canny算法实现边缘检测的技术已相对成熟,改进Canny算法在检测效果和检测精度方面得到了明显改善,并广泛应用于不同领域。例如,将对比度增强Canny边缘检测方法与卷积神经网络相结合,用于数字X射线图像的普通肺炎和新型冠状病毒肺炎(Corona Virus Disease 2019,COVID-19)检测中,此方法可以快速区分正常肺、肺炎与COVID-19,具有较高的准确性、敏感性和特异性,为医学研究带来了极大便利[31];改进Canny算法还可与Sobel算法结合,应用于虹膜图像的检测,该方法不仅可以抑制噪声,还可以准确检测到虹膜的边缘信息,抑制虚假边缘,有助于虹膜图像的进一步研究[32];同时,改进Canny算法还可用在绝缘子串的边缘检测中,可有效提高检测精度[33]。此外,Canny算法用于零件上螺纹缺陷的边缘检测,有助于提高螺纹缺陷的检测精度[34]。
综上所述,Canny算法要想在新的技术领域获得更加广泛的应用,需在原有的理论基础上,进一步引入其他相关测试思想并加以改进。边缘检测精度与抗噪性能、时间复杂度之间是相互制衡的关系,寻求更为精确的改进算法,是边缘检测技术的发展趋势,同时将更多的新方法、新概念引入到边缘检测领域中,使边缘检测技术具有更为广阔的发展与应用前景。
3 结束语
本文通过分析Canny算法在边缘检测中的重要作用,对基于边缘检测的改进Canny算法进行了梳理、比较及总结。阐述了改进Canny算法的应用与发展趋势;Canny算法相较于早期其他类型的边缘检测算法,具有错误率低、去噪声性能强等优点,但也存在过度平滑、自适应性低的缺点。因此,通过在Canny算法基础上增加预处理或后续处理步骤、改变滤波方式、优化阈值设定方法等,可以有效提升Canny算法的检测精度。
但改进后的Canny算法会带来时间复杂度高的缺点,并且面对不同的处理对象会呈现出不同的效果,因此Canny算法要想在新的技术领域中得到更为广泛的应用,应在降低算法的时间复杂度、提高算法的检测精度方面开展进一步的研究工作,为边缘检测技术的发展提供理论基础及技术保证。