APP下载

一种优化的Canny边缘检测算法

2021-11-05田贝乐牛宏侠刘义健

铁路计算机应用 2021年10期
关键词:幅值梯度灰度

田贝乐,牛宏侠,刘义健

(1. 兰州交通大学 光电技术与智能控制教育部重点实验室,兰州 730070;2. 甘肃省高原交通信息工程及控制重点实验室,兰州 730070)

许多边缘检测所采用的算法其原理都是利用微分计算,将所需要的信息从含有噪声的图像的高频部分中提取出来。但由于传统的边缘检测算法较易受到噪声的影响,往往造成边缘检测的结果中含有较多的噪声信号,而所需要的有用信息不能被提取出来,导致检测精度较低[1],例如,Laplace、Log、Prewitt、Sobel和Robert等 边 缘 检 测算 法[2]。与 这几种边缘检测算法相比,Canny边缘检测算法的检测精度更优,且检测结果的信噪比较高,因此广泛应用于各个领域[3]。

在实际应用过程中,照片拍摄时会受到拍摄环境光线强度和摄像机自身情况等各种外界因素的影响。如果利用传统的Canny边缘检测算法对图像进行边缘信息的提取,会导致图像过于光滑,不但使提取的局部信息的精确度降低,还无法较好地滤除噪声,得到的边缘信息中含有伪边缘。综上,本文研究了传统Canny边缘检测算法提取边缘信息的原理,对每个运算步骤进行分析,针对高斯滤波、梯度计算和高低阈值的确定3方面的不足,提出了一种优化的Canny边缘检测算法。

1 传统Canny边缘检测算法

传统Canny边缘检测算法的流程为:(1)采用高斯滤波的方法对原始图像作平滑处理[4];(2)计算降噪后图像的梯度幅值与方向;(3)对梯度的幅值进行非极大值抑制;(4)用双阈值法进行检测并连接边缘,从而形成一个完整的边缘[5]。

1.1 图像平滑处理

Canny边缘检测算法使用高斯滤波对图像进行平滑处理,其原理是邻域平均法[6]。高斯函数如公式(1)所示:

其中,σ为高斯滤波的参数,σ的选择会直接影响滤波效果。若σ较大,会造成边缘偏移严重,并使得运算量大幅增加;若σ较小,虽然边缘的检测精度较高,但图像的平滑作用弱,使得降噪效果不好。

图像平滑处理的流程为:(1)设置一个模板,在该模板内,求出所有像素灰度的加权平均值;(2)将该值赋给该模版中心像素点的灰度值;(3)按照同样的方法,扫描图像中的每个像素点,再进行加权平均计算。

1.2 梯度幅值与方向的计算

Canny边缘检测算法利用2×2邻域内偏导数的有限差分来计算数列矩阵I(x,y)的梯度幅值与方向。计算的具体方法如下。

(1)求出点 (x,y) 处 两个方向的偏导数Px(i,j)和Py(i,j)分别为:

(2)利用公式(4)和公式(5)得到像素的梯度幅值M(i,j) 和 方向 θ (i,j)。

1.3 对梯度幅值的非极大值抑制

由于梯度幅值的极大值附近会产生屋脊带,故非极大值抑制的原理是通过细化幅值图中的屋脊带,更好地确定边缘的位置[7]。

非极大值抑制过程为,将梯度幅值矩阵M(i,j)内的每一个点都作为中心像素点,与其周围8个方向邻域中沿该中心点梯度方向上的两个邻域的梯度幅值进行比较。若中心像素点的幅值小于这两个方向上邻域的梯度幅值,则该中心像素点边缘标志位的值为0。经过非极大值抑制,不仅用一个像素的宽度替代了梯度幅值矩阵的屋脊带宽度,还保留了屋脊的梯度幅值[8]。

1.4 双阈值检测和连接边缘

经上述处理后,还有较多伪边缘的存在,需要通过阈值化处理来滤除噪声,消除伪边缘。

阈值化处理的具体步骤为:(1)设定两个阈值,即一个高阈值、一个低阈值,将梯度幅值小于低阈值的像素点所对应的灰度值视为0;(2)将低阈值提取出的图像设为A,将梯度幅值大于高阈值的图像设为B,由于A为通过低阈值提取得到的图像,故其边缘的连续性较好,但会含有较多的伪边缘,B为梯度幅值大于高阈值的图像,故其不包含伪边缘,但是其边缘的连续性不佳;(3)以图像B为基础,图像A为补充,通过递归追踪法获得边缘信息。

综上,高阈值和低阈值的选择受人为因素影响较大,自适应性较差,在实际工程应用中存在明显的缺陷。因此,需要提出一种可根据不同图像,自适应地确定高低阈值的方法,排除人为因素的干扰[9]。

2 优化后的Canny边缘检测算法

2.1 小波变换的去噪改进

2.1.1 中值滤波优化

传统中值滤波的过程为,建立一个固定的滑动窗口,在这个窗口内对图像进行滤波,即求得一个中心邻域内的所有像素值的中值,用其替代中心像素点的像素值。

自适应中值滤波是在传统中值滤波的基础上,通过窗口中灰度值的大小来自适应地改变窗口的大小[10]。设定一个滤波窗口,Gmid代表该窗口内的灰度中值,Gmax和Gmin分别代表窗口内灰度值的最大值和最小值。如果满足Gmid<Gmax且Gmid>Gmin,则窗口的尺寸不变,否则就将预先设定好的窗口尺寸增大,重复上述过程,直至找到合适的Gmid,或窗口尺寸不能增大为止。随后,验证中心点像素的灰度值G(x,y),若G(x,y)<Gmax且G(x,y)>Gmin,则G(x,y)为该窗口的灰度值,否则Gmid为该窗口的灰度值。

因Gmid的选取易受到噪声的影响,不论是传统中值滤波还是自适应中值滤波,都无法对噪声进行预先判断,导致有一定的滤波盲目性。针对上述不足,本文提出了一种优化的中值滤波方法,使Gmid的选取不受噪声的影响,具体步骤如下。

(1)求得窗口内极值的平均值G¯:

(3)将异常点中的边缘点提取出来。提取边缘点的依据是像素点之间的距离,因为噪声点是孤立存在的,而边缘点通常都是连续存在的,所以根据公式(7)即可分离边缘点和噪声点:

(4)经上述分离方法,可将噪声点分离出来,取正常点的中值作为滤波结果。

2.1.2 小波变换优化

小波变换是指把时间域和空间域上的信号转换到小波域上面。噪声经过变换均匀的分布在小波域的所有部分,有用信号经过变换只分布在小波域的部分区域[11]。因此,有用信号经过小波变换所得到的区域内存在噪声。根据有用信号和噪声小波系数大小不同的特性,设置合适的阈值,对有用信号和噪声进行分类。图像的三级小波分解如图1所示。

图1 图像的三级小波分解

优化后的小波变换滤波原理如下。

(1)对图像进行小波分解。根据图1可知,每经过一次小波分解,都会得到低频(LL)子图像、水平高频(HL)子图像、垂直高频(LH)子图像、高频(HH)子图像。

(2)根据有用信号和噪声在小波系数上的差异进行阈值化处理。由于经过小波分解后的噪声大多在高频区域,所以对(1)中的LL子图像不进行阈值化处理,仅对HL、LH、HH子图像进行阈值化处理。

(3)对经过阈值化处理的HL、LH、HH子图像采用优化后的自适应中值滤波方法进行滤波。HL子图像中含有水平高频和垂直低频信息,因此,采用水平滤波进行处理,保留了垂直低频信息,同时滤除了水平高频信息;LH中含有垂直高频和水平低频信息,因此,采用垂直滤波进行处理,使得水平低频信息得以保留;HH中含有水平高频和垂直高频信息,采用对角滤波的方法进行滤波。

(4)进行小波重构,得到去噪后的图像。

上述方法,相比于传统Canny边缘检测算法中的高斯滤波,能够有效消除噪声,更多地保留原图像的信息。

2.1.3 滤波效果对比

高斯滤波和本文方法的滤波效果对比如图2所示,其中,图2(a)为轨道原图像;图2(b)为加入高斯噪声后的图像;图2(c)为经过高斯滤波后的效果图;图2(d)为经过本文提出的优化后小波变换处理后的图像。

图2 滤波效果对比

2.2 梯度计算方法优化

传统Canny边缘检测算法在梯度幅值与方向的计算上对噪声较为敏感,影响边缘检测效果。本文提出了一种梯度与幅值的优化计算方法,具体步骤如下。

(1)计算水平方向和垂直方向上的偏导数,分别用P0°和P90°表示:

(2)计算对角线(45°和1 35°)方向上的偏导数,用P45°和P135°表示:

(3)利用公式(12)和公式(13)求得水平方向上的差分H0°(i,j)和 垂直方向上的差分H90°(i,j)分别为:

(4)得出梯度幅值W(i,j)为:

梯度的方向 φ (i,j)为:

上述方法与传统Canny边缘检测算法计算梯度的方法相比,考虑了45°和1 35°两个方向上偏导数的影响,抑制了噪声,从而使边缘定位更加准确。

2.3 高低阈值计算

传统Canny边缘检测算法的高低阈值是依靠个人经验进行设定的,而在实际工程应用中,因受到各种条件(例如环境、光照等)影响,单纯依靠个人经验设定的高低阈值会降低边缘检测结果的精度。故本文提出了一种改进迭代法,对高低阈值进行计算,具体流程如下:

(1)利用直方图得到图像灰度的最大值Wmax和最小值Wmin[12],计算二者的均值

(2)根据均值把原始图像分成高灰度区域和低灰度区域,灰度值>K的区域为高灰度区域M,灰度值≤K的区域为低灰度区域N;

(3)求出M区域的灰度最大值W1和 最小值W2,令

(4)M区域内,灰度值>K1的区域为高灰度区域M1, 灰度值≤K1的 区域为低灰度区域M2;

(5)求出M1区 域内的灰度最大值W3和最小值W4, 令根据K2把M1区域分成前景和背景,求出二者的灰度均值G1和G2:

其中,E(i,j)表 示图像中点 (i,j)的 灰度值;F(i,j)为该点的权重系数。

(6)按照(5)的方法,求出M2区域内的灰度最大、最小值W5和W6的 均值K3,根据K3把M2区 域分成前景和背景的灰度均值G3和G4,分别为:

(9)同理,可在N区域内找到低阈值。

该算法具有较好的自适应性,可有效降低噪声影响,从而更好地保留原始信息。

3 实验结果与分析

本文提出了一种优化的Canny边缘检测算法,对高斯滤波、梯度计算和高低阈值的选定3个方面进行优化,并运用MATLAB进行仿真实验,对实验结果进行对比与分析。测试图像为风景图像、地面图像及红细胞图像,实验结果如图3~图5所示。

图3 风景图像效果对比

图5 红细胞图像效果对比

对比图3(b)和图3(c)可知,优化的Canny边缘检测算法可以检测到更多的边缘细节信息,包括更多的木桥细节及木船轮廓;对比图4(b)和图4(c)可知,优化的Canny边缘检测算法可以更好地抑制假边缘信息,从而使得边缘检测的结果含有较少的无用信息;对比图5(b)和图5(c)可知,优化的Canny边缘检测算法可以更好地消除双边缘的情况。

图4 地面图像效果对比

4 结束语

本文针对传统的Canny边缘检测算法在高斯滤波、梯度计算和高低阈值选择上的缺陷,提出了一种优化的Canny边缘检测算法,改进后的Canny边缘检测算法利用优化的小波变换代替高斯滤波,对梯度的计算方法进行了优化,并采用改进的迭代法来确定高低阈值。MATLAB仿真实验结果表明,本文提出的边缘检测算法在保留了传统Canny边缘检测算法优点的同时,还能明显抑制噪声,有效地保留原图像的信息,消除检测结果中的伪边缘和双边缘,从而使得检测结果更加连续,有较强的实用性。

猜你喜欢

幅值梯度灰度
基于Duffing系统的微弱超声导波幅值检测方法研究
带非线性梯度项的p-Laplacian抛物方程的临界指标
采用改进导重法的拓扑结构灰度单元过滤技术
室温下7050铝合金循环变形研究
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
Arduino小车巡线程序的灰度阈值优化方案
一个具梯度项的p-Laplace 方程弱解的存在性
基于AMR的梯度磁传感器在磁异常检测中的研究
基于S变换的交流电网幅值检测系统计算机仿真研究
基于数字虚拟飞行的民机复飞爬升梯度评估