强噪声下改进Canny算法的边缘检测
2021-01-19董林鹭何建华薛智爽刘小芳赵良军
黄 慧,董林鹭,何建华,薛智爽,刘小芳*,赵良军
(1.人工智能四川省重点实验室,四川 自贡 643000;2.四川轻化工大学 自动化与信息工程学院,四川 自贡 643000;3.四川轻化工大学 计算机科学与工程学院,四川 自贡 643000)
0 引 言
图像的边缘信息是图像的重要特征之一,可以描述图像中目标轮廓、相对位置及其他重要信息[1]。边缘检测是图像处理中重要的过程之一,检测的结果将直接影响图像分析。传统边缘检测算法通过检测一阶导数的最大值或二阶导数为零的值来完成[2]。虽然代表一阶微分算子(Roberts、Prewitt、Sobel等)和二阶微分算子(Log、拉普拉斯等)有许多优点,如计算简单、速度快、易实现,但它们受噪声的影响大,在实际工程应用中效果不能令人满意。
1986年John F. Canny提出一种多级边缘检测算法命名为Canny[3],并提出三个标准用于判断边缘检测算子的性能:信噪比准则、定位精度准则、单边响应准则。与普通的边缘检测算法相比,Canny算法通常具有最佳性能[4-5]。近年来,许多研究人提出基于Canny的改进算法,例如,吴翔等人[6-7]提出使用自适应中值滤波进行图像处理,采用Otsu算法计算由梯度幅值得到图像的高低阈值,一定程度上提高了抗噪性能。徐衍鲁[8]提出将图像转换到HSV空间,采用双边滤波替代高斯滤波,得到的边缘细节丰富。Canny算法常用于道路[9]、建筑物[10]、医学[11]图像检测等方面。
由于Canny算法易受噪声等因素干扰,且光照等噪声不可避免,实际运用的效果不能令人满意。为提高改进算法的抗噪性,该文采用平滑聚类的方法减少噪声同时保留重要的边缘,再加入45°、135°方向计算梯度幅值和方向,以获得更多有用的信息。对比多种传统算法,改进算法在边缘检测和抗噪声干扰方面取得了较好的效果。
1 传统Canny边缘检测算法
1.1 高斯滤波
应用高斯滤波平滑图像达到去噪的目的。原图像I(x,y)与高斯掩模作卷积之后得到图像H(x,y),其与原始图像相比噪声减少,图像H(x,y)可以表示为:
H(x,y)=G(x,y)·I(x,y)
(1)
1.2 计算图像的灰度梯度
基本思想是寻找一幅图像中灰度强度变化最强的位置,所谓变化最强即是指梯度方向,平滑后的图像计算梯度幅值G(x,y)和方向θ(x,y)的公式为:
(2)
θ(x,y)=ar tan2(Gx,Gy)
(3)
1.3 非极大抑制技术消除边误检
减少非边缘信息误检为边缘信息的情况,其目的是使模糊的边界变得清晰,保留了每个像素点上梯度强度极大值,删除其他的值。
1.4 双阈值的方法决定潜在边界
一个高阈值和一个低阈值来区分边缘像素。如果边缘像素点梯度值大于高阈值,则被认为是强边缘点。如果边缘梯度值小于高阈值,大于低阈值,则标记为弱边缘点。小于低阈值的点则被抑制掉。
1.5 滞后技术跟踪边界
强边缘被认定为真的边缘,弱边缘点可能是真的边缘,也可能是噪声或颜色变化等因素引起的误差。为得到更精确的结果,后者引起的弱边缘点应该去掉。所谓的滞后边界跟踪算法是检查一个弱边缘点的8连通邻域像素,只要有强边缘点存在,那弱边缘点会被认为是真正的边缘而保留下来[2,7]。
2 混合噪声下改进的Canny边缘检测算法
传统Canny算法中高斯模板的标准方差大小决定滤波的效果,若图像中存在部分区域含有强噪声,则方差效果更佳;若是弱噪声,方差过大会导致细节丢失。在传统算法中方差固定,很难同时兼顾去噪的效果和保存图像细节[12]。图像的采集、转换和传送等过程中易受仪器和外界环境而产生噪声,如椒盐噪声、高斯噪声等,但传统Canny算子只能对高斯噪声进行简单处理,这时图像进行边缘提取的效果将无法满足信息提取的要求。对图像的滤波去噪预处理,是改进算法的关键。但是滤波很容易模糊图像,导致图像边缘的细节保护能力降低[13-14]。故该文将Canny算子去噪部分改为平滑聚类。目的是将相同区域的纹理进行归类,减少噪声的干扰和对细节的破坏。
2.1 强噪图像的平滑聚类
图像平滑聚类主要分为三个过程:(1)图像像素检测;(2)根据窗口内像素点的变化数量自适应调整平滑窗口大小;(3)使用加权方法平滑聚类各个区域的像素。采用m×m的窗口模板,此处m为窗口大小,一般设置为奇数;该窗口中心的像素点(i,j)的灰度值为f(i,j),窗口内像素点值构成的集合Si,j和窗口内所有像素值的平均值Avg(Si,j)分别为:
Si,j={f(i+k,j+r)|k,r=-1,0,1}
(4)
(5)
设Zmin和Zmax分别是Si,j中的最小灰度值和最大灰度值,确定差异像素的方法是:中心像素的灰度值f(i,j)=Zmin,f(i,j)=Zmax或f(i,j)-Avg(Si,j)>di,j,则认为是异像素点,将异像素点标记为N(i,j)=1,其余点为0,其中检测阈值dij表示基于人眼视觉特性的异像素点敏感度系数,其表达式为[15]:
自适应调整平滑窗口的大小,在统计异像素点数量时,使用m×m的窗口模板,统计窗口中心像素中的异像素点总数Num(Si,j):
(7)
平滑窗口的大小只与m×m的窗口模板内的异像素点数量有关,由Num(Si,j)的大小自适应确定。平滑时,先利用相似度函数计算出滤波窗口内像素点之间的相似度,进行排序,根据相似度大小对窗口内的像素点自适应地分配权值,然后对滤波窗口的中心像素点进行加权平滑,得到中心的输出响应值R(i,j)为:
R(i+k,j+r)=φ(|f(i+k,j+r)-f(i,j)|)
(8)
其中,φ是以|f(i+k,j+r)-f(i,j)|为自变量的相似度函数,在[0,+∞]为减函数,且φ(0)=1,φ(∞)=0。
对滤波窗口中心像素点(i,j)做中值加权平滑,得到的灰度值为:
g(i,j)=med{f(i-n,j-n),f(i-n+1,j-n+1),…,f(i,j),…,f(i+n,j+n)}
(9)
2.2 计算图像梯度值
传统Canny算法在2×2的邻域内使用Sobel算子求解梯度幅值和方向,不过邻域内没有考虑更多的方向[12],由此文献[15]提出改进算法,在3×3的8邻域内,通过x方向、y方向、45°、135°四个方向的一阶导数差分来计算梯度值。针对8邻域内45°、135°转可变的缺陷,文献[16]对x方向、y方向的差分进行改进,同时满足边缘定位和抗噪的要求,不过计算量明显变大。该文在传统算法的基础上在3×3邻域内使用Sobel算子,加入45°、135°方向计算梯度幅值和方向,得到合成的梯度幅值G(x,y)和合成的梯度角A(x,y)分别为:
G(x,y)=
(10)
(11)
2.3 标出边缘像素
采用普通的双阈值检测来确定真实及潜在的边缘,高低阈值的大小直接影响到检测的结果,决定检测出的边缘信息的多少。由于需要借助人工经验选取高阈值,并选取其一半作为低阈值,因此适应性低,且选高阈值时应该考虑图像的整体特征和局部特征。文中算法在阈值选取时,综合以上因素考虑图像的灰度变化(平均方差Eave)和图像自身的灰度信息(平均灰度Gave)[17],高阈值的计算为:
(12)
3 计算机仿真实验
为验证文中算法的效果,体现算法良好的抗噪性,选用Matlab R2018a平台将改进算法与其他传统算法进行对比。图1、图2是对Lena和House加入标准差为0.03的高斯噪声的边缘检测结果。图3、图4是对Lena和House加入标准差为0.5的椒盐噪声边缘检测结果。
图1 图Lena在标准方差为0.03的高斯噪声下的边缘检测结果
图2 图House在标准方差为0.03的高斯噪声下的边缘检测结果
图3 图Lena在标准方差为0.5的椒盐噪声下的边缘检测结果
图4 图House在标准方差为0.5的椒盐噪声下的边缘检测结果
由上述实验看出Sobel、Roberts、Prewitts、Log算法应对稍强的噪声效果就十分不好,下面主要对比文中算法和传统Canny算法的效果。为了验证算法的通用性和可靠性,图5和图6是对Lena和House加入混合噪声1(标准差为0.03的高斯噪声和0.1的椒盐噪声)下的检测效果。图7和图8是对Lena和House加入混合噪声2(标准差为0.03的高斯噪声和0.5的椒盐噪声)下的检测效果。
图5 图Lena在混合噪声1下的检测结果
图6 图House在混合噪声1下的检测结果
图7 图Lena在混合噪声2下的检测结果
图8 图House在混合噪声2下的检测结果
仿真结果表明文中算法具有较强的抗噪性。从图1到图8可以看出随着噪声的增大,传统算法抗噪声的性能不佳,其检测结果仅剩下一些不连续的线条或噪声点,无法判断边缘,但文中算法受干扰的影响较小,边缘判别较为准确,线段具备一定的连续性,结果较为完整。文中算法具有更好的抗噪性。
4 结束语
在混合噪声条件下,与传统的Canny算法难以达到良好的降噪效果的情况相比,该文提出的加权中值滤波算法具有普适性和高效性。其优点是在噪声滤波过程中,将输入窗口W中的像素值与加权系数乘积的值作为该窗口的中心像素点滤波后的输出值,降低邻域噪声的影响,保留更多的图像细节,提高中值滤波技术的去噪效果和运算性能。实验结果表明,该算法检测出的图像的边缘清晰,算法滤波和边缘检测的效果均优于其他几种算法。