基于Canny算子的图像边缘检测及优化
Image Edge Detection and Optimization Based on Canny Operator
DOI: 10.12677/pm.2024.145169, PDF, HTML, XML, 下载: 57  浏览: 115 
作者: 朱晨宇, 吉彦锦:上海理工大学理学院,上海
关键词: 边缘检测Canny算子高斯滤波器自适应平滑滤波噪声Edge Detection Canny Operator Gaussian Filter Adaptive Smoothing Filter Noise
摘要: 图像边缘检测是图像处理和计算机视觉中的基本问题。本文针对图像边缘检测,首先利用二维高斯滤波器对原图像进行滤波降噪,对原始数据与高斯平滑模板作卷积,然后使用一阶差分算子计算水平方向和垂直方向的梯度幅值分量,得到图像的梯度的幅值和梯度的方向,最后进行非极大值抑制与双阈值检测和边缘连接,建立了基于Canny算子的图像边缘检测模型。针对传统Canny算法的缺陷,本文提出了一种改进的Canny边缘检测算法,建立了基于自适应平滑滤波的边缘检测模型。在平滑图像的同时锐化边缘,使用水平、垂直、45˚和135˚四个方向梯度模板计算图像梯度,改善了传统Canny算法在计算梯度时对噪声的敏感性。实验结果表明,改进的模型在检测到更多边缘细节的同时,也具备较强的自适应性。特别地,在噪声环境中,改进的模型检测效果更优。
Abstract: Image edge detection is a basic problem in image processing and computer vision. In this paper, for image edge detection, the original image is filtered and denoised by two-dimensional Gaussian filter, and the original data is convolved with Gaussian smoothing template. Then the first difference operator is used to calculate the horizontal and vertical gradient amplitude components, and the amplitude and direction of the gradient of the image are obtained. Finally, non-maximum suppression, double threshold detection and edge connection are performed,an image edge detection model based on Canny operator is established. Aiming at the defects of traditional Canny algorithm, an improved Canny edge detection algorithm is proposed in this paper, and an edge detection model based on adaptive smoothing filter is established. The edge is sharped while the image is smoothed, and the image gradient is calculated using horizontal, vertical, 45˚ and 135˚ gradient templates, which improves the sensitivity of traditional Canny algorithm to noise when calculating gradient. The results show that the improved model not only detects more edge details, but also has strong adaptability. In particular, the improved model detection results are better in the noisy environment.
文章引用:朱晨宇, 吉彦锦. 基于Canny算子的图像边缘检测及优化[J]. 理论数学, 2024, 14(5): 130-139. https://doi.org/10.12677/pm.2024.145169

1. 引言

边缘检测是许多相关图像处理技术的基础 [1] 。同时,图像边缘检测是图像处理和计算机视觉中的基本问题。从传统产业到新兴产业,从黑白电视到复杂的各种系统工程,都用到了图像边缘检测技术。随着科学技术的发展,人们接触图像也更加方便,如今图像已经成为人们获取信息的重要媒介。图像边缘检测技术也广泛应用于工业、航天、医学、军事等各个领域。图像边缘检测的目的是标识或提取数字图像中亮度或色彩等特征变化明显的点或线条。图像边缘检测大幅度减少了数据存储量,剔除了许多可认为不相关的信息,保留了图像重要的结构属性和特征。有效的图像边缘检测有利于人工智能设备在最短的时间内对图像进行识别或归类等后续的处理。虽然研究人员在图像边缘检测技术取得了很大的进步,但是图像存在的各种噪声,会对结果产生很大影响。所以目前图像边缘检测技术在实际生活中还有更广泛改进空间和应用前景。

自1959年最早提出边缘检测以来,有关边缘检测的新理论和新技术不断被提出 [2] 。检测与提取边缘的经典方法就是微分运算。根据一阶导数在边缘点处取得局部极大值的原理,通过用图像灰度的梯度分布来反映图像灰度的变化。在1965年,L. G. Robers开始系统地研究边缘检测。并且之后许多学者在Roberts算子基础上改进得到Sobel算子、Kirsh算子、Prewitt算子等 [3] 。之后,依据一阶微分的局部最大值对应着二阶微分的过零点,人们提出了Laplace算子,其相当于高通滤波,这也意味着此方法对噪声十分敏感。为了寻找边缘检测的最优滤波器,Hildreth提出了LOG边缘检测算子 [4] 和Canny算子 [5] 。其中Canny算子相较于其它几种算法具有较好的边缘检测精度以及去噪能力。刘庆民 [6] 等在Canny算子的基础上,利用3 × 3大小的,窗口改进后中值滤波器用以替代高斯滤波器,减少了运算量,但是对高斯噪声的滤波效果不佳。Chen [7] 等提出了用自适应中值滤波器替代高斯滤波器,发现对椒盐噪声效果较好,但是对高斯噪声的滤波效果不佳,并且运算量较大。徐武 [8] 等在滤波设计上进行改进,有效滤除了椒盐噪声并保护图像边缘细节信息;李靖 [9] 等使用多尺度细节法增强边缘,降低了高斯滤波的影响。上述改进算法具有降噪处理的步骤,但降噪后容易导致图像边缘模糊,造成图像弱边缘漏检。

本文针对图像边缘检测,首先利用二维高斯滤波器对原图像进行滤波降噪,对原始数据与高斯平滑模板作卷积,根据传统Canny算子,建立了图像边缘检测模型。针对传统Canny算法存在的问题,本文提出了一种改进的Canny边缘检测算法,建立了基于自适应平滑滤波的边缘检测模型,在平滑图像的同时锐化边缘,使用水平、垂直、45˚和135˚四个方向梯度模板计算图像梯度,改善了传统Canny算法在计算梯度时对噪声的敏感性,并且对图像弱边缘检测效果良好。

2. 图像边缘检测模型

2.1. Canny边缘检测算子

1986年,Canny定义了边缘检测的三条准则:信噪比准则、定位精度准则和单边缘响应准则。好的边缘检测算子必须满足这三条准则。Canny在此三条准则的基础上提出了一种最佳边缘检测算子,即Canny边缘检测算子。三条准则的详细定义如下 [5] :

(1) 信噪比准则。非边缘像素误检测为边缘的误检率必须最低,边缘的漏检率最低。为了获取好的边缘检测效果,好的边缘检测算法必须使这两个概率值最小化。输出信噪比最大化,就能得到很好的边缘检测效果。定义滤波器的冲激响应为 f ( x ) ,要检测边缘 G ( x ) ,假定边缘在 M [ i , j ] 处。边缘点处滤波器的响应可以由以下公式得到:

H G ( x ) = + G ( x ) f ( x ) d x . (2.1)

假定有限冲击响应 [ w , w ] ,噪声为 n ( x ) ,噪声的响应的平方根如下:

H n ( x ) = n 0 w + w ( f ( x ) ) 2 d x , (2.2)

n 0 为单位长度噪声振幅的均方,边缘检测的输出信噪比可由下式计算得到:

S N R = | + G ( x ) f ( x ) d x | n 0 w + w ( f ( x ) ) 2 d x . (2.3)

(2) 定位精度准则。检测出的边缘位置离实际边缘位置最近。定位精度准则定义如下:

Localization = | + G ( x ) f ( x ) d x | n 0 w + w ( f ( x ) ) 2 d x . (2.4)

这里 G ( x ) f ( x ) 分别表示 G ( x ) f ( x ) 的一阶微分。检测出的边缘离实际边缘位置越近,Localization越大。

(3) 单边缘响应准则。使得检测出的边缘只有一个像素宽度,这样做可以消除伪边缘,这样更利于后续对边缘进行特征提取和图像分析。

2.2. Canny边缘检测流程

Canny算子检测的基本步骤是先使用二维高斯滤波对图像进行平滑处理;接着利用导数算子分别求出图像像素灰度的x和y方向的梯度,求出幅值以及方向;之后利用非极大值抑制找出像素在梯度方向上的最大值,确定是否将中心像素定为边缘;最后进行双阈值选择,对上一步求出的边缘点进行判断。图像边缘提取流程图如图1所示。

Figure 1. Image edge extraction flowchart

图1. 图像边缘提取流程图

2.2.1. 高斯滤波器

首先用高斯滤波器对输入图像进行卷积滤波,滤除噪声,减小噪声对梯度计算的影响。高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。其原理就是用一个模板扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值取替代卷积中心像素的值。二维高斯滤波器如下所示:

G ( x , y , σ ) = 1 2 π σ 2 exp ( x 2 + y 2 2 σ 2 ) , (2.5)

其中, x 是图像一个像素的横坐标, y 是该像素的纵坐标, x 2 + y 2 是该像素到频率矩阵中心(邻域内中心像素)的距离, σ 是高斯分布的标准差,代表着数据的离散程度。要想得到一个高斯滤波器的模板,可以对高斯函数进行离散化,得到的高斯函数值作为模板的系数。对于窗口模板大小为 ( 2 k + 1 ) × ( 2 k + 1 ) ,模板中各个元素值的计算公式如下:

G i j = 1 2 π σ 2 exp { [ i ( k + 1 ) ] 2 + [ j ( k + 1 ) ] 2 2 σ 2 } . (2.6)

例如,采用 3 × 3 模板,假如取 σ = 0.8 ,利用公式(2.6),归一化处理后可以得到模板:

[ 0.0668 0.1249 0.0668 0.1249 0.2334 0.1249 0.0668 0.1249 0.0668 ] = 1 16 [ 1 2 1 2 4 2 1 2 1 ] .

2.2.2. 求像素梯度幅值与方向

使用一阶差分算子计算每个像素点的水平方向和垂直方向的梯度幅值分量,从而得到图像的梯度的幅值M和梯度的方向 ,为了提高梯度的计算精度也可以用Sobel算子1来计算图像的梯度的幅值 M 和方向 θ

M = G x 2 + G y 2 , (2.7)

θ = arctan G y G x . (2.8)

其中 G x G y 分别是对 G ( x , y , σ ) x偏导和y偏导。

设图像窗口为A,中心像素为e,与Sobel算子水平方向和垂直方向分别进行卷积操作,计算过程如下:

G x = [ 1 0 1 2 0 2 1 0 1 ] [ a b c d e f g h i ] = ( c + 2 f + i a 2 d g ) , G y = [ 1 2 1 0 0 0 1 2 1 ] [ a b c d e f g h i ] = ( a + 2 b + c g 2 h i ) . (2.9)

2.2.3. 高斯滤波求像素梯度幅值与方向

非极大值抑制沿着像素梯度方向寻找像素点的局部梯度极大值,方法是首先遍历梯度幅值图像 M [ i , j ] 上每个像素,插值计算当前像素梯度方向上相邻两个像素的梯度幅值;之后进行对比,如果当前像素的梯度幅值大于或等于这个两个值,则当前像素是可能的边缘点,否则该像素点为非边缘像素;最后将图像边缘细化为一个像素宽度,梯度幅值图像 M [ i , j ] 经过非极大值抑制得到图像 N M S [ i , j ]

2.2.4. 双阈值检测和边缘连接

Canny边缘检测方法用高阈值 T n 和低阈值 T i 来提取边缘。通过设定高阈值 T n 和低阈值 T i ,对非极大值抑制中产生的局部极大值像素点进行滤波,以达到降噪和保持边缘连续性的目的。遍历图像 M [ i , j ] ,像素点会被过滤成三个集合,分别是强边缘集合 E 1 ,弱边缘集合 E 2 ,和舍弃边缘集合 E 3 。当出现 E 1 的间断点时,则在搜索 3 × 3 窗口中寻找是否有 E 2 ,有则连接到强边缘集合 E 1 中,最终的强边缘点集合即为最终的图像边缘。Canny算子边缘检测流程如下图2所示。

Figure 2. Flow chart of Canny operator edge detection

图2. Canny算子边缘检测流程图

于是可以建立边缘检测模型:

{ G ( x , y , σ ) = 1 2 π σ 2 exp ( x 2 + y 2 2 σ 2 ) , G i j = 1 2 π σ 2 exp { [ i ( k + 1 ) ] 2 + [ j ( k + 1 ) ] 2 2 σ 2 } , M = G x 2 + G y 2 , θ = arctan G y G x .

我们利用边缘检测模型对如下图像进行了边缘检测,结果如图3

Figure 3. Canny operator edge detection effect

图3. Canny算子边缘检测效果

3. 改进的Canny算法

Canny算子在边缘检测方面取得了良好的效果,在图像去噪和边缘细节保留上取得了较好的平衡,成为评价其它边缘检测方法的标准。但是在实际应用中发现,图像在拍摄、传输、转换等过程中要受到各方面因素的影响,如相机和光照强度的影响,图像中存在噪声,整幅图像对比度不一致以及模糊的边缘等,在这些情况下,用传统的Canny算子进行边缘检测,存在以下几个方面的缺陷:

(1) 传统的Canny算子采用高斯滤波对图像进行平滑,高斯滤波系数需要人为确定,不同的高斯滤波系数对图像边缘检测效果影响很大,人为确定的滤波系数很难做到兼顾噪声平滑和保护边缘信息的要求。

(2) 传统的Canny算子的梯度幅值是通过2 × 2的邻域内有限差分均值来计算,对边缘的定位比较准确,但是对噪声过于敏感,容易检测出假边缘和丢失一些真实边缘细节部分。

3.1. 自适应平滑滤波原理及流程

为了克服传统Canny算法中高斯函数的方差需要人为设定的难题,以及考虑到一般的滤波方法会在滤波图像的同时模糊原图像,所以本文使用自适应平滑滤波 [10] 取代高斯滤波平滑输入图像。单纯的平滑滤波可以去除噪声,但是会丢失很多图像的细节,最明显的就是让图像变得模糊,并且计算量大,而自适应平滑滤波可以达到去除噪声的同时又增加细节,使图像边缘检测的效果达到最佳。自适应平滑滤波的基本思想是用一种小的平均加权模板与原图像进行迭代卷积,每次迭代时自适应地改变各像素加权系数 [11] 。这种自适应平滑滤波的迭代运算在抑制噪声的过程中锐化了图像的边缘,对边缘检测的后续过程产生积极地影响。

f ( x , y ) 为输入图像, x 是图像一个像素的横坐标, y 是该像素的纵坐标。当图像灰度值用二维信号 f ( n ) ( x , y ) 表示时,则 G x 2 ( x , y ) + G y 2 ( x , y ) 定义为 f ( n ) ( x , y ) 的梯度。一次迭代的计算步骤如下:

(1) 令 n = 0 ,迭代次数为 N = 5 ,并设置参数k的值。

(2) 采用差分进行梯度分量的计算:

G x ( x , y ) = 1 2 [ f ( x + 1 , y ) f ( x 1 , y ) ] , (3.1)

G y ( x , y ) = 1 2 [ f ( x , y + 1 ) f ( x , y 1 ) ] . (3.2)

(3) 计算滤波器的权系数:

w ( x , y ) = exp [ G x 2 ( x , y ) + G y 2 ( x , y ) 2 k 2 ] . (3.3)

(4) 对图像 f ( n + 1 ) ( x , y ) 所有像素点进行加权平均,即滤波:

f ( n + 1 ) ( x , y ) = i = 1 1 j = 1 1 f ( n ) ( x + i , y + j ) w ( n ) ( x + i , y + j ) i = 1 1 j = 1 1 w ( n ) ( x + i , y + j ) . (3.4)

(5) k = N 否?如果 k = N 迭代结束;否则 k = N + 1 ,转步骤(2)。

3.2. 基于Canny算子梯度幅值计算改进

借鉴Sobel算子的一阶梯度模板,来求图像的梯度幅值,并将其扩展为水平、垂直、45˚和135˚四个方向上一阶梯度模板。梯度模板如图4所示。

Figure 4. Gradient template

图4. 梯度模板

四个方向上的一阶梯度分量 G x ( x , y ) , G y ( x , y ) , G 45 ( x , y ) ,和 G 135 ( x , y ) 可由图(3)中的四个一阶梯度模板分别对滤波后的图像进行卷积得到,卷积具体计算形式类似(2.9)。

梯度幅值和梯度角度可以由四个方向一阶梯度分量求得,即:

M ( x , y ) = G x 2 + G y 2 + G 45 2 + G 135 2 , (3.5)

θ ( x , y ) = arctan [ G y ( x , y ) G x ( x , y ) ] . (3.6)

于是可以建立基于自适应平滑滤波的改进的边缘检测模型:

{ G x ( x , y ) = 1 2 [ f ( x + 1 , y ) f ( x 1 , y ) ] , G y ( x , y ) = 1 2 [ f ( x , y + 1 ) f ( x , y 1 ) ] , w ( x , y ) = exp [ G x 2 ( x , y ) + G y 2 ( x , y ) 2 k 2 ] , f ( n + 1 ) ( x , y ) = i = 1 1 j = 1 1 f ( n ) ( x + i , y + j ) w ( n ) ( x + i , y + j ) i = 1 1 j = 1 1 w ( n ) ( x + i , y + j ) , M ( x , y ) = G x 2 + G y 2 + G 45 2 + G 135 2 , θ ( x , y ) = arctan [ G y ( x , y ) G x ( x , y ) ] , k = 10 , n = 5.

我们利用边缘检测模型对如下图像进行了边缘检测,结果如图5

(a) 噪声图像

(b) 传统Canny算法检测效果 (c) 改进算法检测效果

Figure 5. Comparison of effect in noisy environment

图5. 噪音环境下效果对比

结果表明,改进的算法可以检测出更多的边缘细节;在抑制噪声和连接边缘方面由于传统Canny算法;特别是在噪声环境中,由于改进算法使用了自适应平滑滤波,使得改进算法的检测效果更具有优越性。

4. 结语

本文针对图像边缘检测,首先建立了基于Canny算子的图像边缘检测模型。针对传统Canny算法的缺陷,本文提出了一种改进的Canny边缘检测算法,建立了基于自适应平滑滤波的边缘检测模型,改善了传统Canny算法在计算梯度时对噪声的敏感性。实验结果表明,改进的模型在检测到更多边缘细节的同时,也具备较强的自适应性。特别地,在噪声环境中,改进的模型检测效果更优。相比高斯滤波,本文改进算法是通过增加计算复杂度为代价来提高滤波的智能化程度。在改进的Canny算法中,高低阈值仍需要人为设定,这使得伪边缘和边缘的连续性之间存在着矛盾,同一组高、低阈值对于不同的图像来说,边缘检测质量差异很大。未来,可以考虑如何降低计算复杂度,缩短计算时间,并且改进算法,进行自适应阈值改进。近年来也出现了一些新兴的技术,比如遗传算法、小波变换、模糊数学和神经网络等 [12] 。接下来可以考虑如何将这些技术应用于图像边缘提取以及用新技术改进现有边缘检测算法。

参考文献

[1] 左飞. 数字图像技术: 原理与实践[M]. 北京: 电子工业出版社, 2014.
[2] 郑南宁. 计算机视觉与模式识别[M]. 北京: 国防工业出版社, 1998.
[3] 章毓晋. 图像工程(中册)——图像分析[M]. 北京: 清华大学出版社, 2005.
[4] Marr, D. and Hidreth, E.C. (1980) Theory of Edge Detection. Proceedings of the Royal Society of London, London, B207, 187-217.
https://doi.org/10.1098/rspb.1980.0020
[5] Canny, J. (1986) A Computational Approach to Edge Detection. IEEE Trans Pattern Analysis and Machine Intelligence, 8, 679-698.
https://doi.org/10.1109/TPAMI.1986.4767851
[6] 刘庆民, 张蕾, 李雪. 基于改进Canny的芯片图像边缘检测算法[J]. 计算机工程与设计, 2016, 37(11): 3063-3067.
[7] Chen, X.F., Guan, H.B., Gu, J.N., et al. (2012) A Study and Improvements on Canny Algorithm. Advanced Engineering Forum, 6, 205-209.
https://doi.org/10.4028/www.scientific.net/AEF.6-7.205
[8] 徐武, 张强, 王欣达, 等. 基于改进Canny算子的图像边缘检测方法[J]. 激光杂志, 2022, 43(4): 103-108.
[9] 李靖, 王慧, 闫科, 等. 改进Canny算法的图像边缘增强法[J]. 测绘科学技术学报, 2021, 38(4): 398-403.
[10] 许宏科, 秦严严, 陈会茹. 一种基于改进Canny的边缘检测算法[J]. 红外技术, 2014, 36(3): 210-214.
[11] 景晓军, 李剑峰, 熊玉庆. 静止图像的一种自适应平滑滤波算法[J]. 通信学报, 2002, 23(10): 6-14.
[12] 马宇飞. 基于梯度算子的图像边缘检测算法研究[D]: [硕士学位论文]. 西安: 西安电子科技大学, 2013.