“数字图像处理”边缘检测教学案例设计

2022-07-30 06:25张俊超
电气电子教学学报 2022年3期
关键词:数字图像处理算子幅值

张俊超

(中南大学 航空航天学院, 长沙 410083)

“数字图像处理”是电子信息类与电气类专业,和人工智能研究方向的基础课程,该课程具有较强的理论性和实践性[1]。传统的授课型教学往往注重知识的传授和完成练习作业,这样培养的学生只会做题和考试考高分,缺乏实际工程问题的分析与解决能力。为了激发学生的学习兴趣和培养其实践能力,增加了相应的实践教学环节[2]。

然而,通过近几年的本科教学和自身辅导本科生毕业设计的经历,我们发现大多数本科生对图像处理算法的理解浮于表面,且对本领域的前沿算法了解甚少。此外,在处理实际问题时,仅会调整库函数的输入参数和拼凑不同的库函数,不了解算法的底层思想,无法从根本原理上分析问题,极大程度地抑制了底层创新的培养。

本文首先简要介绍一些常见的边缘检测算子,然后以边缘检测-Canny算子的教学为案例,在传授Canny算子基础理论的同时,注重培养学生的动手实践、分析问题和自主学习的能力。此外,本案例注重底层算法编程实现的讲解,加深学生对Canny算子底层原理的理解,并鼓励学生开展原始性的底层创新,这将对“数字图像处理”课程教学改革具有良好的借鉴意义。

1 常见边缘检测算子

边缘是指图像中像素的值有突变的地方,如图1所示:图像的边缘存在于一阶导数的极值处和二阶导数的过零点处,接下来简要介绍一些常见的基于梯度的边缘检测算子。

图1 图像边缘模型及其一阶二阶导数

基于图像导数的边缘检测算子主要有:Roberts算子、Prewitt算子、Sobel算子和Laplace算子等。这些算子均是基于设计的导数求解模板(如图2所示),通过与图像进行卷积操作,获得梯度的幅值。根据边缘处的梯度幅值是极大值,可以实现边缘的检测。其中,基于二阶导数的边缘检测Laplace算子无方向性,且常产生双像素宽的边缘。

图2 基于图像梯度的边缘检测算子

2 Canny算子的原理介绍

Canny算子是一种经典的边缘检测算法,它是Canny于1986年提出的。该算子包括四个步骤,具体如下:

步骤一:高斯低通滤波器平滑图像,抑制噪声对边缘检测结果的影响。图像f经过高斯滤波器h平滑滤波得到图像g,表示如下:

(1)

g(x,y)=h(x,y)⊗f(x,y)

(2)

步骤二:用一阶偏导的有限差分计算梯度的幅值和方向。基于Sobel算子计算的结果如图3所示。

图3 计算梯度的幅值和方向

步骤三:对梯度幅值进行非极大值抑制。可以采用基于最近邻和基于插值的策略进行非极大值的抑制。这里只简要介绍基于邻域的方法,如图4所示。首先,将梯度方向角的变化范围平均分成4个扇区;其次,根据目标像素的梯度方向角所在扇区,确定邻域的像素;最后,比较目标像素和邻域像素的梯度幅值,若目标像素的梯度幅值不是最大的,则进行抑制。比如,梯度方向在第3扇区,则需比较当前像素(i,j)的梯度幅值,与对角邻域像素(i-1,j+1)和(i+1,j-1)的梯度幅值。若当前像素的梯度幅值小于其中任意一个,则当前像素的梯度幅值被置为0。

图4 非极大值抑制

步骤四:用双阈值法检测和连接边缘,即高阈值T2和低阈值T1,常设置T2=2*T1。梯度幅值超过T2的称为强边缘,小于T2且大于T1的称为弱边缘,小于T1的不是边缘。当弱边缘的周围8邻域有强边缘点存在时,就将该弱边缘点变成强边缘点,以此来实现对强边缘的补充。

以上就是Canny算子的基本原理,大部分本科生熟练运用Matlab自带的edge函数,实现图像的边缘检测。针对不同的应用问题,只会调整函数的输入参数,不能从底层对算法做改进。为此,我们在课程教学中增加了底层代码编程实现的讲解和训练,旨在培养学生动手实践和自主创新的能力。

3 Canny算子的编程实现

Canny算子的Matlab代码实现如图5所示:4个子函数(Gau_Filter、Sobel_Edge_Detection、NMS、ThresholdSeg)分别对应四个步骤。通过对比代码和理论公式,让学生们去发现其中的区别,并体会如何将所学理论代码化。比如,高斯低通滤波器的理论表示如公式(1)所示,需要指定方差的大小;而在编程实现时,还需要设定滤波器窗口的大小,且最后的归一化操作保障滤波后像素灰度值不会出现奇值(大于255或者过小)。此外,在对图像做滤波处理和求解梯度时,均用到了卷积操作,为了保证卷积后图像大小不改变,在编程实现时首先对图像做了边界填充的处理。

图5 Canny算子的Matlab代码实现

基于Cameraman图像的边缘检测结果如图6所示,学生们可以直观感受每一步处理的结果,加深对算法步骤设计的理解,可以针对不同的应用,针对性地优化其中对应的步骤,不再是仅仅调整库函数的输入参数。最后,通过和Matlab的edge库函数检测结果进行对比,引导学生发现问题和激发学生自主学习的能力,自主查阅相关的文献,对算法做进一步地改进和优化。

图6 Canny算子的边缘检测结果

最后,引导学生分析Canny算子涉及到的参数变量:高斯低通滤波器的方差σ和窗口大小、低阈值T1。不同参数设置下Canny算子的边缘检测结果如图7所示,根据第一行的检测结果,引导学生分析高斯低通滤波器的窗口大小对边缘检测结果的影响;根据第二行的检测结果,引导学生分析高斯低通滤波器的方差大小对边缘检测结果的影响;根据第三行的检测结果,引导学生分析低阈值大小对边缘检测结果的影响。通过上述的引导和分析,加深学生对Canny算子的理解,并体会Canny算子存在的不足,激发学生自主对Canny算子做优化和改进。

图7 不同参数设置下Canny算子的边缘检测结果

4 基于Canny算子的工程应用

车道线检测是是自动驾驶领域的重要技术之一,在辅助驾驶、车道偏移预警和车辆防碰撞系统中得到广泛应用。Canny算子是图像处理领域经典的边缘检测算法,该算法可以应用到车道线检测中[3-4]。文献[4]所采用的车道线检测流程如图8所示:首先,进行ROI区域的裁剪,减少无关信息的干扰;其次,利用Canny算子对ROI图像进行边缘检测;然后,根据概率Hough变换,拟合边界;最后,根据斜率约束筛选车道线、同车道线边界合并和左右两侧车道线约束筛选等叠加约束,检测车道线。基于该工程问题,布置相应的小组实践作业,以提升学生的自学和动手实践能力。

图8 车道线检测算法流程图

5 边缘检测的前沿技术

近些年来,深度学习技术在图像识别、图像复原、目标检测与跟踪等领域得到了广泛应用。“数字图像处理”是一门实践性较强的课程,课堂中除了讲授经典的边缘检测算法,目前最新的和前沿的方法也需要做简要介绍,便于学生们理解该研究方向的发展动态。如图9所示是基于SegNet的边缘检测网络结构[5],该网络是将图像做为输入,端到端地输出检测到的边缘。

图9 基于深度学习的图像边缘检测(SegNet)

6 结语

针对学生过于依赖库函数编程,对底层算法理解浮于表面等问题,本文以边缘检测教学为案例,在讲授算法基本原理的同时,注重底层算法编程实现的讲解,加深学生对Canny算子底层原理的理解。

此外,该案例还结合车道线检测的工程应用,帮助学生理解该算法的应用范围。最后,介绍了边缘检测问题的前沿技术,开阔学生的视野和培养学

生对知识的探索兴趣。课堂实践结果表明,该教学模式使学生提升学习的积极性和动手实践的能力,同时培养了科研兴趣。

猜你喜欢
数字图像处理算子幅值
室温下7050铝合金循环变形研究
有界线性算子及其函数的(R)性质
Domestication or Foreignization:A Cultural Choice
可靠性步进电机细分驱动技术研究
QK空间上的叠加算子
平地机作业负载谱分析
信息与计算科学专业《数字图像处理》课程教学探讨与实践
Prevention of aspiration of gastric contents during attempt in tracheal intubation in the semi-lateral and lateral positions
微课在大学专业课中的应用研究
以应用实例为主线、以程序设计为主导的数字图像处理课程教学方法改革