APP下载

基于改进Canny算法的图像边缘检测方法研究

2021-11-17陈桂芬丁小奇

计算机仿真 2021年4期
关键词:算子高斯灰度

李 静,陈桂芬,丁小奇

(吉林农业大学信息技术学院,吉林长春 130118)

1 引言

边缘信息是重要的图像特征信息,边缘检测方法研究是图像分析和识别领域[1]中一个十分引人关注的课题。目前,主要边缘检测算法有:Canny算子[2]、Prewitt 算子[3]、Sobel算子[4]和Laplace 算子[4]等。Canny算子因其抗干扰性强、计算复杂度低等优点,成为当下边缘检测算法的首选[6],在各行各业中均取得了广泛应用。针对经典的Canny算法在实际应用中存在的问题,许多学者提出了自己的改进方法,例如:2017年刘克平等人针对采用经典的Canny算法进行边缘检测时图像平滑处理过度、对无关信息消除能力较弱等缺点,提出一种基于改进Canny算法的工件边缘检测方法,改进的算法能够准确地检测到真实边缘,具备较强的适应性,检测效果优于经典的Canny算法[7];2018年罗文婷等人针对在自动化道路病害检测过程中经典的Canny算法存在对标线边缘识别不全,噪声、伪边缘较多等问题对Canny算法进行改进,改进后的算法在抑制噪声、剔除伪边缘及路面干扰、边缘识别连续性和单一边缘响应方面实际应用效果较好[8];2019年胡克满等人为克服Canny算子在织物疵点边缘检测中存在阈值设定、滤波参数选择等自适应问题,提出一种基于改进的Canny算法,改进后的算法可有效地检测到织物疵点的边缘细节,提高了算法的有效性[9]。

通过对Canny算法和前人的研究进行深入学习,本文作者总结出:经典的Canny算法在实际应用中,由于图像在高斯模糊时,人为设定标准差较随意,导致图像平滑效果不佳,后期检测精度降低;人为设定双阈值,导致输出图像边缘信息丢失严重,边缘信息连续性差。针对经典的Canny算法在图像边缘检测过程中存在上述问题,且近年来的研究尚没有较为完善的解决方法,本文提出一种基于改进Canny算法的图像边缘检测方法:使用自适应高斯-中值滤波算法代替传统的高斯模糊、选取Soble算子计算幅值梯度和方向、最后运用Ostu(最大类间差方法)算法自动确定双阈值,形成改进后的Canny算法,并将改进后的算法与经典的Canny算法、Sobel算子从图像边缘检测效果、边缘图像统计结果和算法执行效率等三方面进行了对比分析。

2 经典的Canny算法

2.1 Canny算法基本原理

Canny算法是由John F.Canny于1986年开发出来的一个多级边缘检测算法[10],其目的是在保留原有图像属性的情况下,显著减少图像的数据规模[11]。该算法主要包括五个步骤:1)将图像灰度处理后进行高斯模糊平滑操作;2)利用一阶有限差分计算图像水平和垂直方向的偏导数、梯度的幅值以及梯度方向,寻找图像的强梯度;3)对梯度幅值进行非极大值抑制消除边缘误检,得到局部最大值点,保留为候选边缘点,将非极大值点灰度值重置为0;4)采用双阈值算法检测和边界连接;5)利用滞后技术跟踪边界[12]。

2.2 经典Canny算法的缺陷

Canny算法对图像处理步骤简单,计算复杂度低,但是在检测效果上也存在一些缺陷,主要有以下原因:1)利用二维高斯滤波进行图像平滑处理时,随机选取高斯标准差σ,导致图像平滑效果差,噪声剔除不充分;2)在处理灰度变化均匀的图像时,采用一阶有限差分梯度算子使得图像边界粗糙难以标定准确位置,找不到检测边界;3)人为设置高低阈值导致算法的适应性低,图像边缘信息丢失,产生伪边缘。

3 改进的Canny算法

本文针对上述缺陷1),提出使用自适应高斯-中值滤波算法代替传统的高斯模糊,解决了高斯标准差σ选取随意的问题;针对缺陷2),选用Soble算子代替传统的Canny算子,提高位置加权系数的准确性;针对缺陷3),采用Ostu双阈值计算连接边缘,避免人为设置高低阈值的局限性。算法的主要流程如图1所示。

图1 改进的Canny算法流程

3.1 自适应中值-高斯滤波算法

任何边缘检测算法都不可能在未经处理的原始数据上很好的工作[13]。运用Canny算法进行图像边缘检测时,第一步就是对图像进行平滑处理。由于中值滤波算法对图像的边缘保护[14]效果好,高斯滤波去除随机噪声效果佳,故采用两者结合的方法。

3.1.1 自适应中值滤波算法

传统的高斯滤波很难同时兼顾边缘信息的保留和噪声的平滑[15]。自适应中值滤波不仅可以有效地减少噪声对数据的影响,还可以较好的保留图像基本的边缘信息[17]。其具体算法步骤如下:

l)首先设定f(i,j)为像素点(i,j)的图像灰度值,w(i,j)为当前灰度窗口的大小,设定初始窗口大小w=3,fmin,fmed,fmax,分别为工作窗口内的灰度最小值,灰度中值和灰度最大值;

2)当fmin

3)若fmin

3.1.2 自适应高斯滤波算法

将中值滤波处理过后的图像进行自适应高斯滤波处理,以去除图像中的高斯噪声。首先利用二维高斯滤波函数生成高斯核

(1)

式中,k为高斯核半径,σ为标准差。当卷积窗口滑动时,鉴于高斯核系数权值与方差呈正比例关系特性[17],可以根据方差的大小求得高斯核标准差σ。图像某区域内方差的大小计算公式为

(2)

(3)

Si,j表示为中心点(i,j)的卷积窗口,方差D(i,j)越大,表示在Si,j区域内,像素值的离散程度越大,选取更小的σ生成的高斯核系数权重越大,对该区域影响越小。根据这一特性,将方差D(i,j)与二维高斯滤波函数f(i,j)作比,得到函数

(4)

式中,由于D(i,j)是常量,R(i,j)则是一个关于高斯核半径k与标准差σ的函数,即

(5)

当R=1时,高斯核中参数的权重大小与像素值权重最接近,此时,该处的标准差σ即由S(x,y)区域内的像素值的方差D求得。以此类推,反复迭代,从而形成一种自适应高斯滤波,最后对图像的像素点全部卷积后完成高斯滤波处理。

3.2 Soble算子计算梯度幅值

Soble算子结合高斯平滑和微分求导计算图像的近似梯度,在图像上使用此算子将会产生对应的梯矢量,其操作分为水平和垂直两个方向进行:

1)水平变化:将图像I与内核Gx进行卷积

(6)

2)垂直变化:将图像I与内核Gy进行卷积

(7)

3)在图像每一点上,求出近似梯度

(8)

4)在图像每一点上,求出梯度方向

(9)

当内核大小为3*3时,Soble算子可能会产生较大误差,本文采用OpenCV中Scharr函数代替3*3大小的Soble算子内核,可以在保证运算速率的同时,得到更加精确的计算结果。其内核替换如下

(10)

3.3 Ostu确定双阈值

Ostu算法是一种自动确定阈值的方法,其原理是将图像分为前景和背景两个部分[18],分割阈值记为t,属于前景部分的像素点占全幅的比值记为v0,平均灰度记为u0;背景像素点占全幅比值比值记为v1,平均灰度记为u1;图像总平均灰度记为u,类间方差记为σ;图像中小于阈值t的像素点个数记为N0,大于阈值t的像素点个数记为N1。则

u=v0*u0+v1*u1

(11)

σ(t)=v0(t)(u0-u)2+v1(t)(u1-u)2

(12)

将(11)式代入(12)式中,可以得到

σ(t)=v0(t)v1(t)(u0-u1)2

(13)

遍历全图,当σ(t)为全局最大值时,t值为最佳阈值。

4 仿真与结果分析

本实验在Visual Studio 2010环境下运行,搭配OpenCV插件,选取了3类(图2经典Lena图像;图3植物叶片图像;图4动物图像)图像数据进行仿真,对改进的Canny算子与经典的Canny算子、Soble算子进行了边缘检测实验和评价分析,得到如下对比图像。图2为经典的Lena图像应用三种算法进行边缘检测效果对比。

图2 经典Lena图边缘检测结果

由图2经典Lena图边缘检测结果可以看出:经典的Canny算法在Lena图像的帽子部分(红色圈标注)边缘检测有信息缺失现象,边缘杂线较多;Soble算子检测效果稍优于经典Canny算法,但是在图像复杂边缘处如Lena图像人物头发(蓝色圈标注)处检测效果杂乱,部分线条模糊,但是较经典的Canny算法边缘线条连续性好;本文改进的Canny算法检测结果较前两者相比,整体线条更加清晰,单一且完整,未出现边缘缺失和边界模糊的现象。图3,4分别展示了三种算法在不同类型数据图像检测效果对比效果。

图3 植物叶片边缘检测结果

由图3的植物叶片边缘检测对比结果可以看出,经典的Canny算法存在明显的检测边缘轮廓(白色圈标注)线条杂乱的现象,而Soble算子在叶片整体脉络上线条模糊,分界不清晰。从整体上看,本文改进的Canny算法边缘检测效果优于经典Canny算法和Soble算子。为了进一步验证三种算法的检测效果,作者又选取了图片边缘信息更加复杂的图像(图4)做了进一步仿真。

图4 复杂动物图像边缘检测结果

由图4复杂动物图像边缘检测结果可以看出,经典的Canny算法明显存在边缘信息丢失和出现伪边缘现象(黄色圈标注),无关信息消除能力弱;Soble算子检测结果存在边缘信息模糊和边界不清晰现象,杂质信息筛选效果也不理想(绿色圈标注);本文改进的Canny算法在保证边缘信息特征完整的情况下,有效剔除了杂质信息,单一边缘响应方面实际应用效果更优。由图2至图4的算法检测结果对比可以看出,本文改进的Canny算法较经典的Canny算子、Soble算子均表现出了更优的边缘检测效果。

为了更加直观地评价边缘检测算法的性能,本文根据文献[19]中的评价指标进行统计,统计结果如表1所示。其中A表示算法检测出的边缘像素总数,即检测结果图中像素值为1的个数;B表示为4-连通成分,即一个像素点在它的4-邻域内是否有与它连通的像素;C表示为8-连通成分,即一个像素点在它的8-邻域内是否有与它连通的像素。通常情况下,当C/A和C/B值越小时,表示图像边缘连接程度越好,图像边缘检测效果更优。因此,可以将C/A和C/B比值作为衡量边缘图像边缘连接程度的指标。

表1 像边缘统计结果

由表1中的数据可以看出,改进的Canny算法在三组对比实验中C/A和C/B的值均小于经典的Canny算子和Soble算子,单边缘响应效果更好,边缘图像连接程度更好。其中C/A值比经典的Canny算法值低26%-39%,比Soble算子低25%-33%;C/B值比经典的Canny算法低19%-32%,比Soble算子低18%-25%。

为了更加客观地评价本文改进算法的性能,作者对三种算法执行效率进行监测,得到的对比结果如表2所示:

表2 三种算法执行效率

由表2结果可以看出,本文算法在执行效率上和经典的Canny算法不相上下,稍差于Soble算子,但可以满足实际生产需要。为了进一步验证算法的有效性,作者选取了公开数据集不同类型共计200幅图像进行反复试验,得到的实验结果均与上述趋势一致。

5 结语

本文提出的基于改进Canny算法的图像边缘检测方法,相比于经典的Canny算法和Soble算子,在图像边缘检测效果、边缘图像统计结果方面均取得了更好的实验结果,在一定程度上提高了算法的有效性。由于本文算法在计算复杂度上更加繁琐,算法的执行效率还有待提高,作者将在提高算法效率等方面进一步研究,以提高算法的整体性能。总体上说,本文改进的算法相对于经典的Canny算法具有更高的边缘检测精度,对于提高边缘检测算法在实际应用中的适应性具有很强的参考价值。

猜你喜欢

算子高斯灰度
航空滤光片阵列多光谱图像条带灰度调整算法
天津港智慧工作平台灰度发布系统和流程设计
Domestication or Foreignization:A Cultural Choice
Arduino小车巡线程序的灰度阈值优化方案
数学王子高斯
QK空间上的叠加算子
从自卑到自信 瑞恩·高斯林
逼近论中的收敛性估计
一种基于灰度分割的调焦评价函数