雨天道路环境下改进的Canny 目标检测算法
2022-03-27周智
周智
(南昌交通学院,江西 南昌 330100)
0 引言
在ADAS(Advanced Driver Assistance Systems,驾驶辅助系统)中,有效识别前方车辆是实现碰撞预警和自动规避的一项关键技术。ADAS 中的感知来源包括摄像头、激光雷达、毫米波雷达、超声波雷达等各种传感器获取的环境数据。在雨天行驶环境中,尤其是在中到大雨天气时,环境阴暗且能见度低,而雨滴本身又具有速度快、分布密集等特点、极易对识别过程产生干扰和影响。为提高算法的识别率,本文将在基于Canny 算子的基础上改进针对雨天道路环境的目标检测算法。
1 Canny 边缘检测算法
1986 年由John F.canny 开发的Canny 边缘检测算子是边缘检测算法中较为流行的算法之一。作为一种可以从不同的视觉对象中提取有用结构信息的技术,由于运算量相对较少,该算法被广泛应用于各种视觉系统之中。Canny 边缘检测算法主要由图像降噪、计算梯度、非极大值抑制和滞后阈值四个部分构成。其主要的算法思想是利用高斯求导方法计算出图像对应点的梯度,然后再通过设置双阙值来检测出图像的边缘,其步骤如下。
1.1 图像降噪
为最大程度避免检测结果受到噪声的影响,在进行检测前,采用Gauss 滤波器对图像进行卷积,以减少噪声影响。其函数表达式如下[1]:
式中,σ 为Gauss 滤波器分布参数,抑制噪声能力与σ 取值成正比,边缘定位精度与σ 取值成反比。因此,σ 的取值大小决定了图像降噪的效果。
1.2 计算梯度
梯度是表示边缘特征灰度值的变化程度。由于图像本身是由离散数据构成的,所以可以使用差分值来表示,差分值就是两个像素之间的灰度差。
在实际图像中,图像的边缘可以指向不同的方向。因此,Canny 算法通过使用梯度算子来表示灰度值的变化程度和方向,再通过对水平差分和垂直差分进行计算,来确定像素点的梯度和方向。其函数表达式如下:
其中,I(i,j)为点(i,j)的灰度值,P(i,j)为点(i,j)的梯度值,Angle_θ(i,j)为点(i,j)的梯度方向。
1.3 非极大值抑制
非极大值抑制是寻找像素点局部最大值的一个步骤。在获得了梯度和方向后,通过遍历图像的方法去除所有不是边界的点。遍历像素点的过程中,判断当前像素点是否是周围具有相同方向梯度像素点中的最大值:如果是则保留该像素点,否则将其抑制(归零)。
1.4 滞后阈值
最后,为了确定真正的边界,通过设置maxval和minval 两个滞后阈值来进行判断。若图像的梯度值高于maxval 则被认为是边界,将其保留;若图像的梯度值低于minval 则不被看作是边界,将其抛弃;若图像的梯度值在两者之间,与边界相连的同样视为边界,否则反之。
2 改进的Canny 边缘检测算法
2.1 图像灰度化处理
将红、蓝、绿色阶组成的彩色图像转换为灰度色阶来表示,通过只保留图像中的亮度特征和边缘特征,进一步提高算法的计算速度。在本文的图像灰度化处理过程中,使用加权平均法处理,即对图像中的某一个像素点中的 RGB 分量按0.299,0.587 和0.114 的比例进行加权和计算,使图像的RGB 值转化为灰度值,如式(6)所示。
2.2 改进噪声去除算法
在实际目标图像中,椒盐噪声为主要噪声,而Gauss 滤波器对椒盐噪声的抑制能力相对有限。在数学形态学中,opening 运算对椒盐噪声的抑制能力相对更强[2]。其原理是先对目标图像进行腐蚀,去除噪声;由于这个过程也会压缩部分图像,所以在已完成腐蚀化的图像基础上再进行一定程度的膨胀处理,膨胀后的图像保持或强化了原有的图像,并且在一定程度上除去了噪声或降低了噪声的影响。其表达式为:
其中:P 为原图像;S 为结构元素;⊖表示腐蚀运算;⊕表示膨胀运算。
在实际行车过程中,夜间强光、大雨天气、光线昏暗、模糊车道等情况,影响了车辆图像识别效果。同时,在有一定车速或摄像头抓取图像模糊的情景下,opening 运算也能对图像有一定的补偿。因此,使用opening 运算替代Gauss 滤波器。
2.3 采用自适应阈值
由于雨天行车环境复杂,公路环境和自然环境等都会对行驶过程中图像识别产生影响。因此,设计自动选取合适阈值[3]方式:
其中:v 为图像像素的中值,σ 为经验值0.33[4]。
3 算法验证
实验硬件设备:CPUi7-7500U@2.70GHz2.90GHz,内存为8G,操作系统环境为Windows10,编程语言为Python3.9.6,视觉库为openCV-python4.5.3.56,计算库为numpy1.21.1。由于本文算法是针对复杂环境下的目标,因此选择的图片是驾驶过程中拍摄的夜间行驶的远光、暴雨环境下的远距离目标和雨天行驶过程中车内识别近距离目标。
如图1 所示,在阴暗雨天环境下,对对向驶来的强光车辆,本文改进的Canny 检测算法识别效果更好,能有效减少强烈灯光的干扰,同时能有效降低雨点带来的影响,更小范围锁定对向车辆和周边车辆的位置。
图1 阴暗雨天且对面强光环境的识别效果对比a)原始图片 b)Canny 检测算法 c)改进的Canny 检测算法Figure 1 Comparison of recognition effects of opposite strong light environment in dark and rainy days a)Original lmage b)Canny c)Modified Canny
如图2 所示,在暴雨环境下,相较于传统Canny算法,改进后的Canny 算法在减少雨滴影响的同时,也有效减少了周围其他环境因素带来的影响,并且对较远距离的车辆的识别能力有一定提高。
图2 暴雨环境下识别效果对比a)原始图片 b)Canny 检测算法 c)改进的Canny 检测算法Figure 2 Comparison of recognition effects under rainstorm environment a)Original lmage b)Canny c)Modified Canny
如图3 所示,在小雨天气环境下,模拟驾驶员视角或行车记录仪视角,从车内视角对算法进行近距离车辆的检测效果验证,可以看出本文的改进Canny算法能明显有效降低前挡玻璃上水珠带来的影响。
图3 小雨环境下车内识别效果对比a)原始图片 b)Canny 检测算法 c)改进的Canny 检测算法Figure 3 Comparison of recognition effect in light rain environment a)Original lmage b)Canny c)Modified Canny
4 结语
雨天道路环境作为日常常见的异常环境,在自动驾驶领域具有重要研究价值。本文在传统Canny算法的基础上,从实际场景出发对其进行改进,通过实验对比,验证了该改进算法在雨天场景下的有效性。但在面对更为复杂的环境(如雾天、部分遮挡等)时,需要对算法进行进一步的研究和改进,以提高算法的识别效果和场景适用性。