摘" 要: 针对传统Canny边缘检测算法不能处理椒盐噪声干扰,阈值选取依靠人工干预的问题,提出一种改进Canny算子的边缘检测算法。首先,提出一种改进的递归中值滤波取代高斯滤波,去除图像噪声的同时减少图像边缘信息的丢失;然后,利用双线性插值改进非极大值抑制对像素梯度值进行亚像素级别的定位;最后,采用基于迭代的Otsu阈值分割算法自适应地获取阈值并进行迭代式边缘连接,提高算法的自适应程度。实验结果表明,对比Canny算子、Sobel算子以及一种改进的Canny算法,在去噪图像质量评价指标上提高了8.5%,在边缘检测准确率上提高了22%,并且改进的算法去除椒盐噪声能力突出,自适应性强,检测出的边缘信息更完整,连续性更佳。
关键词: 图像处理; Canny; 边缘检测; 改进的递归中值滤波; 双线性插值; 基于迭代的Otsu阈值分割
中图分类号: TN911⁃34" " " " " " " " " " " " " "文献标识码: A" " " " " " " " " " " " 文章编号: 1004⁃373X(2024)23⁃0036⁃07
Image edge detection method based on improved Canny operator
BAO Qilong1, JING Huicheng1, ZHANG Jingxuan1, 2, WANG Yi1, YANG Fuquan3
(1. College of Electrical Engineering, North China University of Science and Technology, Tangshan 063210, China;
2. Green Intelligent Mining Technology Innovation Center of Hebei Province, Tangshan 063210, China;
3. School of Electrical Engineering, Hebei University of Technology, Tianjin 300130, China)
Abstract: The traditional Canny edge detection algorithm fails to deal with salt⁃and⁃pepper noise interference, and the threshold selection depends on manual intervention, so an edge detection algorithm based on improved Canny operator is proposed. An improved recursive median filtering is proposed to replace the Gaussian filter, which can reduce the loss of image edge information while removing image noise. Then bilinear interpolation is used to improve non⁃maximum suppression to locate the pixel gradient values at the level of sub⁃pixel. The iteration⁃based Otsu threshold segmentation algorithm is used to obtain the threshold value adaptively and perform the iterative edge connection, so as to improve the adaptive degree of the algorithm. Experimental results show that, in comparison with the algorithm based on Canny operator and the algorithm based on Sobel operator, the denoised image quality evaluation index of the proposed algorithm is improved by 8.5%, and its edge detection accuracy is improved by 22%. Moreover, the proposed algorithm has outstanding ability of removing salt⁃and⁃pepper noise, strong adaptability, more complete edge information detected and better continuity.
Keywords: image processing; Canny; edge detection; improved recursive median filtering; bilinear interpolation; iteration⁃based Otsu threshold segmentation
0" 引" 言
边缘检测在数字图像处理领域扮演着至关重要的角色。传统的边缘检测算法通常依赖于一阶或二阶导数的计算,以获取局部窗口内像素的特征值,即灰度值或梯度值。之后通过控制阈值对这些特征值进行处理。尽管常见的边缘检测算子Prewitt、Sobel、Scharr、Robert[1]等在运算速度和易实现性上具有一定优势,但它们在图像抗噪性和边缘连接方面存在一些不足,导致在实际应用中的处理不尽人意。在这种情况下,Canny算子[2]脱颖而出,不仅具备上述算子的优点,还表现出较好的抗噪性,在信噪比和准确率方面显著优于传统算子。但Canny算子对椒盐噪声的处理效果并不理想,会过度平滑图像边缘[3]。针对Canny算子边缘检测在实际应用中表现出的缺点,文献[4]利用开关中值滤波代替高斯滤波器,并结合K⁃means和Otsu增强算法的抗噪性,实现自适应选择高低阈值;文献[5]提出了一种将模糊神经网络和自适应中值滤波相结合的方法,以解决受椒盐噪声影响的图像边缘检测问题;文献[6]设计了基于分数阶Sobel算子的梯度计算方法,相较于传统Sobel算子在边缘检测方面不仅具有更好的噪声抑制效果,还具有更高的灵敏度和更强的鲁棒性;文献[7]通过扩充梯度计算模板方向的方法来提高边缘提取的准确性;文献[8]改进了非极大值抑制中插值法随意选取的缺陷,引入插值系数并采用择优选取阈值的方法,提高了边缘定位的准确性;文献[9]利用最大类间方差(Otsu)算法实现了双阈值的自适应分割;文献[10]将阈值细分为全局和局部两个层面,通过使用4个阈值将边缘点分为5种情况,以更详细地区分不同类型的边缘。
通过对以上文献的学习,本文提出了一种改进的Canny边缘检测方法。首先采用改进的递归中值滤波代替高斯滤波;其次选用双线性插值法[11]改进非极大值抑制;最后利用基于迭代的Otsu阈值分割算法进行边缘连接。
1" 传统Canny边缘检测算法
1.1" Canny算法原理
Canny边缘检测算法遵循如下三项原则。
1) 低错误率:尽量减少噪声,同时识别出尽可能多的真实边缘。
2) 高定位性:确保检测到的边缘与实际边缘位置尽可能一致。
3) 最小响应:保证边缘标记具有唯一性,最大程度上抑制虚假边缘的出现。
依据这三个判断准则,传统Canny检测的步骤主要可以分为以下四个步骤。
1) 通过高斯滤波对图像进行预处理,消除噪声干扰。
2) Sobel算子采用2×2的邻域模板进行双梯度计算。
3) 在梯度方向上对幅值进行非极大值抑制,保留局部梯度幅值的极大值点,从而细化边缘获取准确的边缘位置。
4) 双阈值检测并连接边缘。
1.2" 存在的不足
虽然Canny边缘检测算法在抗干扰性和边缘提取精度上具有明显的优势,但仍然存在一些问题:不能处理椒盐噪声,易造成图片失真且丢失边缘信息;非极大值抑制进行梯度方向上像素点对比时存在随机性,忽视了随机误差出现的可能,会导致虚假边缘的出现;双阈值检测缺乏自适应性且易受环境因素的干扰。
2" 改进Canny算法
2.1" 改进的递归中值滤波去噪
针对Canny算法中高斯滤波器对椒盐噪声处理效果不佳,且容易模糊边缘信息的问题,提出了一种改进的递归中值滤波算法。
递归中值滤波器[12]是一种常用于去除图像噪声具有递归性质的非线性滤波器,其原理是选择一个固定大小的滑动窗口,在图像上沿一定的步长滑动,将窗口内像素按灰度值进行排序,然后选取排序后的中间值作为窗口内像素的估计值。重要的是,每一次滤波操作都基于上一步的输出,具有递归的特性,有助于进一步达到去噪的目的。
然而,递归中值滤波器存在一个缺点,即其窗口大小是固定的,这意味着无论图像的纹理复杂度如何,窗口大小都保持不变。这会导致在纹理复杂或者边缘明显的区域,无法充分考虑到周围像素的信息。因此,本文提出了一种改进的递归中值滤波算法,其原理是基于局部对比度来调整不同区域滤波窗口的大小,以更好地适应图像的局部特征。改进递归中值滤波算法步骤如下。
1) 设初始滑动窗口为[W0]([W0]为奇数),最大滑动窗口大小为[Wmax],[M]为窗口中值且将窗口区域内的标准差[ω]作为局部对比度的度量,[Th]为判断值。
2) 对像素点[(x,y)]滤波时,先在窗口区域内进行对比度判断,若[ωlt;Th],则跳至步骤3);若[ωgt;Th]且[W0≤Wmax],则跳至步骤4)。
3) 使用当前窗口大小递归调用滤波器进行滤波处理并输出为窗口中值[M],窗口移动到下一像素位置。
4) 扩大窗口大小,即[W0=W0+2],重新计算[ω],转至步骤2)。
5) 若[ωgt;Th],且[W0=Wmax],则将其窗口中值替换为该窗口已处理的4个相邻像素的中位数。
6) 重复以上步骤,直到处理完整个图像的所有像素。
滤波器的数学模型如下:
[y(i)=medy(i-k),…,y(i-1),x(i),…,x(i+k)] (1)
由于噪声点与周围像素差异较大,因此局部对比度通常较高。与递归中值滤波相比,改进的滤波算法会先计算窗口区域的局部对比度,在局部对比度不同的区域调整滤波窗口的大小,更好地适应图像局部特征,增强噪声衰减能力的同时减少滤波后图像细节的丢失,降低对边缘检测结果的影响。具体检测效果对比如图1所示。
由图1可以看出,改进后的递归中值滤波具有与递归中值滤波相同的去噪能力,相比高斯滤波能很好地去除椒盐噪声的干扰,但是相同的情况下,递归中值滤波会造成图像失真,而改进后的算法不会。
为进一步验证改进后滤波算法的去噪效果,分别对Lena、Emilia和Rice三幅图像加入10%的椒盐噪声并与三种滤波器进行降噪对比分析,如图2所示。
由对比图2可知,高斯滤波受椒盐噪声影响时效果较差,未能有效去除噪声;自适应中值滤波相对于高斯滤波在去除噪声方面效果较好,但是图像清晰度有所下降;递归中值滤波处理椒盐噪声时过度平滑图像,图像模糊程度较高。与前三种方法相比,改进的递归中值滤波对于椒盐噪声的去除效果最佳,图像整体清晰度好,失真程度较低。
为更客观地展现图像的去噪效果,在此处引入信噪比(SNR)和峰值信噪比(PSNR)两个评价指标,分别对去噪图像进行评价,具体结果如表1所示。
根据表1的数据分析,改进后的递归中值滤波相比于高斯滤波SNR和PSNR提高了2~4 dB和3~5 dB;相较于递归中值滤波SNR和PSNR提高了1~4 dB和2~5 dB;自适应中值滤波的结果与改进后的递归中值滤波差距较小,但是总体数值上改进后的递归中值滤波要优于自适应中值滤波。
由此可以得出,高斯滤波的结果最差,递归中值滤波稍好于高斯滤波,但是仍不及自适应中值滤波和改进后的递归中值滤波。尽管自适应中值滤波与改进后的递归中值滤波的结果相近,但其仍低于改进后的递归中值滤波。这进一步证明了改进算法的去噪能力。
2.2" 双线性插值改进非极大值抑制
传统Canny算子中非极大值抑制的过程,只是简单地将目标像素点的梯度幅值与梯度方向上的两个邻近点进行比较,忽略了梯度方向和领域像素点之间的关系,没有考虑梯度方向是否与领域像素点一一对应且重合的问题,从而导致随机误差和虚假边缘的出现。针对这些问题,本文引入了双线性插值法,该方法通过对包括目标像素在内的4个像素点在梯度方向上进行插值,实现对边缘的亚像素级别的定位,更精确地定位边缘位置。插值图如图3所示,横坐标代表像素位置,纵坐标代表像素点的灰度值。
将每个目标像素的周围4个像素代入[Q11]、[Q12]、[Q21]、[Q22],在[X]方向进行两次插值,最后在[Y]方向进行插值即可得到目标图像的像素值,公式如下:
[f(R1)≈x2-xx2-x1f(Q11)+x-x1x2-x1f(Q21)] (2)
[f(R2)≈x2-xx2-x1f(Q12)+x-x1x2-x1f(Q22)] (3)
[f(P)≈y2-yy2-y1f(R1)+y-y1y2-y1f(R2)] (4)
改进后的非极大值抑制方法对每个像素进行插值,找到[P]点并将所有[P]点连接起来,实现消除虚假边缘并细化边缘宽度,得到更为精确的亚像素级边缘图。
2.3" 基于迭代的Otsu阈值分割
Canny算法双阈值选取需要人工干预,不能根据图像特性自适应调整阈值。针对这一问题,当今学者多采取Otsu算法进行自适应阈值分割,并取得了一定的成效。但Otsu算法易受环境因素的干扰,会将背景图像错分为前景图像,导致图像直方图呈多峰,影响图像二值化结果,进而影响边缘检测的结果,如图4所示。
因此,本文提出了一种基于迭代的Otsu阈值分割算法,具体步骤如下。
1) Otsu算法通过灰度值将图像划分成前景和背景两部分[13]。定义分割阈值为[T0],后将图像分割为两个类别[C0]和[C1]。
分别计算[C0]和[C1]的平均灰度[u1]和[u2]以及他们所占图像总像素点的比例[α1]和[α2]。图像全局灰度均值为[G],类方差为[σ],得下述公式:
[α1∗u1+α2∗u2=G," " α1+α2=1] (5)
通过优化分割阈值,即最大化下述公式:
[σ=α1(u1-G)2+α2(u2-G)2] (6)
再进行化简得:
[σ=α1*α2(u1-u2)2] (7)
通过公式计算所有像素的类间方差,得到的最大值就是分割阈值[T0]。
2) 根据公式(7)求得二值化阈值[T0],采取迭代的思想对其进行最优阈值选取。设初始阈值为[T0],将图像分为两个区域[M1]和[M2],计算这两个区域的平均灰度,其中灰度级设定为[K],每个灰度级[i]对应的像素点的数量为[ni]。
[M1=i=0T0-1inii=0T0-1ni] (8)
[M2=i=TKinii=TKni] (9)
求得[M1]和[M2]的值后,计算[M1]、[M2]的平均值并将其当作新阈值[Tn]。
[Tn=M1+M22] (10)
3) 将[Tn]和[T0]比较,当[Tn-T0lt;α]时([α]为可忽略误差),[Tn]为迭代出的最优分割阈值;如若不然,[T0]=[Tn]。重复运算上述步骤,直到满足停止条件,得到最优分割阈值[Tn]。算法流程图如图5所示。
4) 由求得的最优分割阈值[Tn]进行阈值分割,令高低阈值为[Tmax]、[Tmin],使高阈值[Tmax]=[Tn],低阈值[Tmin]=0.4[Tmax]。对每一个边缘像素值[T]进行判别:若[Tmax]lt;[T],则将其记为强边缘,其像素值置为255;若[T]lt;[Tmin],则会被抑制,像素值为0;若[Tmin]lt;[T]lt;[Tmax],则记为弱边缘点,再次进行精确判别。迭代式遍历整个边缘图,将判定为弱边缘的点使用8连通域的划分,当其8连通域内有一个及以上的强边缘点,则将弱边缘点变为强边缘点,像素值记为255。随后对该过程进行多次迭代,将弱边缘点连接到相邻的强边缘点,直到迭代中没有新的像素被分类为强边缘,则停止迭代。图6为改进前后Otsu算法对比图。
如图6所示,与Otsu算法相比,改进的Otsu算法在强光影响下分割出的二值化图像细节更为丰富,从而证明改进的Otsu阈值分割算法的可行性,具有一定的应用价值。改进算法将迭代法和Otsu法相结合,利用迭代法的理念和特性,通过多次求解图像阈值来找到最优的图像分割阈值[Tn],以增强Otsu算法的抗干扰和识别能力,从而大幅提升Canny算法的自适应能力和边缘检测的准确性。
3" 实验结果及分析
本文实验程序采用Python语言编写,在Pycharm 2022环境下运行搭配OpenCV库进行实验仿真,验证本文算法的边缘检测效果。
为了验证本文算法在边缘检测中的有效性,将其与传统的Canny边缘算法、Sobel算法以及文献[14]中的方法进行对比评估。选取4张含有椒盐噪声的不同场景的图片作为实验对象,实验结果如图7所示。
主观上观察,Sobel算法可以大致勾勒出图像轮廓,但是基本被椒盐噪声覆盖;Canny算法相比Sobel算法稍有改进,但是无法去除椒盐噪声的干扰,且局部边缘处存在间断,边缘连接不够完整;文献[14]中的算法在椒盐噪声的滤除方面效果良好,整体的边缘提取效果也较好,但在局部边缘处存在间断,导致图像轮廓整体完整性较差。
与上述算法相比,本文改进算法总体上优于前面三种算法,在边缘检测结果中鲜有掺杂椒盐噪声,图像轮廓更加完整,边缘细节更为丰富,边缘连接更加连续,且伪边缘的出现较小。
为了客观体现各个算法的性能,本文采用了文献[7]描述的评估方法,如表2所示。
其中有三个度量指标:[A]、[B]和[C]。[A]代表边缘点总数(1值的量);[B]表示像素点在其4邻域内有其连通成分的点的个数;[C]表示像素点在其8邻域内有其连通成分的点的个数。在此,[A]值的增加表示边缘点数量越多,提取效果越好;而[CA]和[CB]的值越小,则表示线性连接度越好。
由表2可知,在[CA]和[CB]的数值上,本文算法较传统Canny算法、Sobel算法和文献[14]算法要低。在[CA]数值上,较Canny算法、Sobel算法和文献[14]算法,分别低出16%~30%、24%~36%、9%~20%;在[CB]数值上,较Canny算法、Sobel算法和文献[14]算法分别低出11%~30%、19%~32%、6%~29%。因此,本文算法改进成效较好,能更好地保留图像边缘的细节特征,且在保持边缘完整度方面表现出极好的效果。
为体现本文算法的执行效率,对上述算法进行执行效率对比,如图8所示。
本文改进算法在执行效率上虽逊色于传统算法,但边缘检测结果表现尤为突出。纵使本文算法在执行效率上与传统算法有所差距,仍符合实际应用可接受范围。
4" 结" 语
本文采用改进的递归中值滤波取代高斯滤波,增强算法抗噪性的同时保留更多的图像细节;其次利用双线性插值法改进非极大值抑制,消除虚假边缘的产生;最后将迭代法与Otsu算法相结合,利用迭代法的特性多次求解图像最佳分割阈值,增强算法的抗干扰和识别能力,实现高低阈值的自适应性和边缘连接的准确性,在一定程度上解决了Canny算法处理噪声干扰和阈值选取方面的困境。实验证明,本文算法在处理椒盐噪声时表现出色,去噪后的图像在图像质量评估指标和边缘连接度方面的表现突出,提高了边缘检测的准确率,减少了边缘特征的丢失。但是本文算法的执行时间逊色于传统算法,下一步将针对这个问题进行改进和提高。
注:本文通讯作者为张靖轩。
参考文献
[1] 唐阳山,徐忠帅,黄贤丞,等.基于Roberts算子的车道线图像的边缘检测研究[J].辽宁工业大学学报(自然科学版),2017,37(6):383⁃386.
[2] SONG R J, ZHANG Z Q, LIU H Y. Edge connection based canny edge detection algorithm [J]. Pattern recognition and image analysis, 2017, 8(6): 1228⁃1236.
[3] 杨少令,刁燕,罗华,等.一种改进的Canny图像分割算法[J].计算机与现代化,2018(8):57⁃60.
[4] 张加朋,于凤芹.基于Canny算子改进型的影像测量边缘检测[J].激光与光电子学进展,2020,57(24):258⁃265.
[5] FARAHANIARD H, SHANBEHZADEH J, PEDRAM M M, et al. A hybrid edge detection algorithm for salt⁃and⁃pepper noise [J]. Proceedings of the international MultiConference of engineers and computer scientists, 2011, 1(3): 16⁃18.
[6] 张晨阳,曹艳华,杨晓忠.一种基于改进Canny算法的图像边缘检测新方法[J].计算机仿真,2023,40(7):382⁃386.
[7] 郝泽兴,郭改枝,代妍玮,等.一种改进Canny算子的边缘检测算法[J].内蒙古大学学报(自然科学版),2022,53(5):530⁃537.
[8] 王海龙,柳林,纪文璐.改进插值及择优阈值Canny算法的边缘检测[J].计算机仿真,2020,37(5):394⁃398.
[9] CHEN X F, GUAN H B, GU J N, et al. A study and improvements on Canny algorithm [J]. Advanced engineering forum, 2012, 6/7: 205⁃209.
[10] LU C Z, QI X G, DING K, et al. An improved FAST algorithm based on image edges for complex environment [J]. Sensors, 2022, 22(19): 7127.
[11] 杨舒,曾寿金,刘震,等.基于Canny和双线性插值的镍片边缘提取算法[J].福建工程学院学报,2022,20(6):567⁃572.
[12] 王寅,潘佩芳,孔凡坊,等.基于递归中值滤波的暂态能量方向元件仿真分析[J].电力系统保护与控制,2010,38(7):29⁃31.
[13] 李靖,王慧,闫科,等.改进Canny算法的图像边缘增强方法[J].测绘科学技术学报,2021,38(4):398⁃403.
[14] 吴翔,于微波,马艳辉,等.一种新的改进Canny图像边缘检测算法[J].影像科学与光化学,2016,34(1):116⁃121.
作者简介:包启龙(2000—),男,河南漯河人,在读硕士研究生,研究方向为智能感知与控制技术。
景会成(1966—),男,河北秦皇岛人,硕士研究生,副教授,研究方向为智能技术及应用。
张靖轩(1982—),男,河北唐山人,博士研究生,副教授,研究方向为复杂系统的故障诊断与可靠性评估、智能检测与数据挖掘。