Canny算子对图像边缘检测的一种改进
2022-04-22申嘉锡
申嘉锡,齐 华,王 晨
(1.西安工业大学兵器科学与技术学院,西安 710021;2.西安工业大学兵器电子信息学院,西安 710021;3.西安工业大学电子信息学院,西安 710021)
0 引言
图像边缘是指其周围像素灰度变化剧烈点的部分。实际在图像边缘检测时就是将这些点找到,然后连接起来。实际检测中在存在噪声干扰的情况下,采用传统Canny算子进行边缘检测,噪声会被误当作边缘,因此,需要对传统Canny算子进行改进,从而得到边缘检测图像。
本文分析了传统的Canny算子的基本原理,对检测图像人为添加噪声时,使用传统Canny算子检测会存在噪声干扰而被漏检或误检,提出了改进方法。①采用混合滤波替换高斯滤波对图像平滑处理。②对梯度幅值和方向进行优化求解。③非极大抑制值的改进。结果表明,改进的新算方法提高了图像边缘检测的准确度,不易将噪声当做边缘图像进行检测出来,有效地进行了去噪处理,实验效果较好。
1 Canny算子基本原理与步骤
1986年,Canny J依据边缘检测算子的三个判断准则,提出了Canny算子,具体实现步骤如下:
1.1 平滑处理
高斯滤波消除图像中的噪声。
1.2 计算梯度强度和方向
1.3 非极大值抑制
把邻域中心像素和梯度方向相邻的梯度幅值进行插值比较,抑制消除非边缘点产生。
1.4 双阈值检测
传统Canny算子是人为设定的高低阈值参数来确定是否是图像边缘点。
1.5 连接边缘
通过对伪边缘抑制,最终得到检测图像。
2 改进的Canny边缘检测算法
2.1 以混合滤波器代替高斯滤波器
传统的Canny算子检测是利用高斯滤波进行去噪处理,但是使用高斯滤波器不能直接较好的去除本论文中的噪声图像,当我们人为的给需要检测的图片中添加部分比例的椒盐噪声和高斯噪声时,发现使用传统Canny算子去噪处理效果较差,因此本文提出利用混合滤波对图片进行去噪处理。
2.1.1 中值滤波
用目标点四周多个像素灰度的均值与周围的像素值进行替换。算法流程如图1所示。
图1 中值滤波算法流程
要想使滤波之后的结果达到理想的效果,最佳的窗口尺寸大小很难确定,需要尝试不同窗口下的滤波效果。本文选择的的是3×3窗口大小,对本文中添加的噪声用中值滤波能有效的消除干扰噪声和点状噪声,消除只有一个高斯滤波器对复杂噪声的处理效果差的情况。
2.1.2 均值滤波
基本思想是选用一个由其邻域像素所构成模板并将该模板中所含像素的灰度求和取平均且以此均值将原像素灰度取而代之。
二者是以中值滤波的输出作为均值滤波的输入,降噪处理。去噪流程图如图2所示。
图2 改进算法去噪流程
2.2 改进的梯度幅值和方向计算方法
传统的Canny算子采用的是2×2范围来计算梯度幅值和方向,考虑到对于手动添加椒盐噪声或者高斯噪声的图像,使用传统方法对噪声滤除敏感,容易把噪声当成边缘,因此本文使用改进的3×3范围内4个方向来替代传统的两个方向计算梯度幅值和方向。增加了45°和135°。梯度幅值和方向分别为:
2.3 非极大值抑制的改进
本文采用3×3范围对所有元素沿梯度方向中的点依次进行插值并和目标中心元素幅度值进行大小比较,若两个插值都比目标点的梯度幅值大,则将目标点值设置为0。否则置为1。通过上述一次与插值进行比较就能够逐渐得到最大边缘点的集合,从而得到更加完整的边缘检测图像。
以上是本论文对传统方法的改进,改进算法流程如图3所示。
图3 改进的Canny算子流程
3 仿真结果分析
本次实验的环境:在PyCharm结合Opencv库对同一幅图像在有噪声(浓度=0.1椒盐噪声,浓度=0.1高斯噪声)和无噪声人为干扰下,得到的检测结果。
从实验结果可以看出,在无噪声条件下,改进Canny算法与Canny算法检测结果存在一点的误差,主要的差别就是对伪边缘、断边缘部分能够更好的判断,同时将边缘点能偶更好的连接起来。主要在图4中的(b)和(c)图,能够明显的看到改进的Canny算子对边缘的检测提取更加完整没有出现伪边缘以及断边缘的情况。
图4 Lena图像效果
当加入浓度为0.1的椒盐噪声时,改进的Canny算子显示结果相对较好,对椒盐噪声起到了去噪效果,也对于伪边缘的抑制效果更好,边缘检测质量也较为理想,检测出来的边缘清晰,边缘的连续性较好。而传统Canny算子会当成图像边缘处理,构成了一种噪声是边缘的假象。
当加入浓度为0.1的高斯噪声时,使用传统的高斯滤波去噪效果不是特别的明显,只是起到了轻微的去噪平光滑效果,相比于对椒盐噪声的边缘检测效果有所改善。
通过以上描述能够得到结论:在未加入噪声时,对图像进行边缘处理,传统的Canny边缘检测算子会出现伪边缘以及边缘弱化的情况。加入噪声时传统的Canny检测算子会误把噪声当成边缘进行处理效果很不理想,但是对人为添加椒盐噪声和高斯噪声的图像而言,基于传统Canny算子改进的算法对图像边缘的检测效果明显,噪声与边缘的区分度好,验证了本文利用对Canny算子的改进起到了对添加高斯噪声和椒盐噪声检测效果。
通过实验验证改进的算法对一定密度的椒盐噪声和高斯噪声的检测效果明显,本文针对存在某种特定噪声进行检测处理,实际图像噪声可能更加很复杂。
4 结语
本文对传统Canny检测算法中一些不足进行了改进,利用混合滤波器替代高斯滤波器对图像实施去噪处理,使用8领域内四个方向的偏导数求梯度幅值和方向,使用邻域内插值比较的方式对非极大值抑制进行优化,阈值选取方面使用人工调试的方式,使边缘检测得到最好的效果。高低阈值本论文中设置为50,100,结果证明,传统Canny对人为添加一定浓度的噪声时,容易将噪声和图像的边缘进行混淆,得到的检测图像效果不佳,但是使用改进后的Canny边缘检测算法进行处理使检测到的图像边缘细节更加突出,边缘检测的质量也较为理想,验证了本论文对传统Canny算子边缘检测改进的正确性以及可靠性。