基于机器视觉的运动检测与超车策略的研究
2019-08-22孙厚权张其亮刘永良
孙厚权,张其亮,吴 越,刘永良,孙 娜
(1.江苏科技大学(张家港) 电气与信息工程学院,江苏 张家港 215600;2.江苏科技大学(张家港) 机电与动力工程学院,江苏 张家港 215600)
0 引 言
机器视觉与信息处理是人工智能的重要基础。机器视觉系统是使用机器视觉产品将目标物体转化为图像信息,再利用图像信息处理系统,根据像素分布、亮度和颜色等信息,通过各种运算抽取目标的面积、数量、长度等特征进行模式识别,并由识别结果来控制现场设备的动作[1]。
“恩智浦”杯智能汽车竞赛是以前景广阔的汽车电子为背景,涵盖自动控制、模式识别、计算机等多学科专业的创意性竞速比赛。竞赛要求智能车在指定赛道范围内完成自动循迹。按照信息采集的传感器不同,分为3种类别,其中在光电组中又根据任务不同分为四轮与追逐组。四轮组要求完成快速的自动循迹即可。而追逐组要求两辆车模在完成快速自动循迹的同时实现双车之间的超车任务。在已有的研究中,黄润烨等[2]给出一种基于鸳鸯超声波的追逐方案,完成了双车车距的保持,但未能实现超车功能;庄越等[3]给出一种基于鸳鸯超声波测距和蓝牙通信的双车超车策略,但蓝牙在实际使用中易受干扰,而且其可以公开配对的问题会对车模行驶造成难以预测的异常;祝世佺等[4]利用鸳鸯超声波模块和NRF24L01无线通信模块完成了车距的保持与超车的控制,NRF24L01无线通信模块具有配对密钥,解决了异常配对的问题,但其在信号传输过程中也会受到信号干扰器的干扰。另外,目前大部分参赛队伍对采集到的图像仅限于中线的提取与赛道类型的判断,忽略了图像中存在的大量信息。
鉴于上述问题,文中给出一种方案,即在不使用超声波测距模块和无线通讯模块的情况下,仅依靠CMOS摄像头所获取的图像信息,通过运算处理,实现双车追逐过程中的运行控制、路径识别以及超车。
1 图像采集装置
图像采集装置为OV7620,分辨率为640×480,支持逐行扫描(progressive scan)及隔行扫描(interlaced scan)两种方式。图像数据的传输由三个中断信号—像素点中断信号、行中断信号以及场中断信号控制。为便于图像的快速处理又保证图片信息的完整性,采取“奇场采集偶场处理”的方式,即在产生奇数次场中断信号时进行图像采集,偶数次场中断信号时对上一次奇数场采集的图像信息进行处理而不再进行图像采集。为规避消隐区,最终得到404×280的图像数据。
2 图像处理
2.1 图像压缩
数据量庞大是图像数据的特点之一。从信息论的观点来看,描述信息的数据由有用数据和冗余数据组成。而静止图像的相邻像素间存在空间冗余,活动图像的相邻帧间又存在时间冗余。在路径识别中,灰度图像失真是可以接受的,因此考虑到实时处理的时间复杂度,选择对原始图像进行压缩处理。文中采用非均匀压缩方式,即将采集到的图像数据每五行保存一行,四列保存一列,最终形成81×70的压缩图像。
2.2 叠加线性窗口中值滤波去噪
中值滤波[5]是对滑动窗口中像素点的灰度值进行排序处理,然后提取中值作为滤波结果的算法。滑动窗口的设计对算法的时间复杂度和滤波效果有决定性的作用,一般直接使用一种或多种形状的窗口处理,但这种方式会浪费很多时间。文中算法不再拘泥于单一形状,使用横纵双向二维叠加方式进行处理。先对图像数组按行横向滑动三像素点窗口进行中值滤波,再将图像数组按列纵向滑动三像素点窗口进行中值滤波。横纵双向线状叠加的方式能够在极大缩短时间的情况下从两个维度平滑图像。
2.3 动态阈值分割图像
图像分割[6],关键点在于阈值的确定,而摄像头较依赖外界光照环境,一旦采用静态阈值则只有在特定光照条件下才可得到较为合适的图像数据。
对于智能车比赛,路径的组成部分为蓝色背景和白色赛道,两部分灰度值差异明显。因此,动态阈值获取方式常采用最大类间方差法(OTSU)。但最大类间方差法计算量太大,为降低计算的时间复杂度,对该算法进行了适当优化。图像数据的灰度值范围为0~255,共256个数量级,其中0为黑色,255为白色。而赛道背景为蓝色,介于两者之间,因而最佳阈值不会在两端出现,而边界范围经实际测试发现,最佳阈值的范围始终包含在50~200之间,即阈值的目标值域范围为[50,200],因此只需在此范围内进行检测即可。
从目标值域范围内依次选取灰度值i,每次假设当前选取的灰度值i为最佳阈值,将所有小于i的灰度值范围视为前景,所有大于i的灰度值范围视为背景。分别统计前景区间的灰度值数量w0,背景区间的灰度值数量w1,然后计算前景区间的平均灰度值u0和背景区间的平均灰度值u1,那么类间方差g满足:
g=w0×w1×(u0-u1)2
(1)
因为需要的是最大的g值所对应的i值,而由式1知:
g∝(u0-u1)2∝|u0-u1|
(2)
因此,为简化运算规模,只要求使得“g=w0×w1×|u0-u1|”为最大时对应的i值。根据上述方法求得的最佳阈值将图像进行分割即可得到差异显著的二值化图像。
2.4 边缘提取
常见的边缘提取方式有两种,即中心向两边检测法和边缘追踪检测法[7]。中心向两边检测法无法处理一行中出现多个跳变点的情况,容易造成边缘提取错误的现象,而且全部遍历会耗费大量的处理时间。而边缘追踪法虽然可以更好地处理多个跳变点问题,但是却过分依赖上一行的边缘提取结果。
根据成像原理易知,越靠近图片底部的行数表示距离摄像头距离越近,也越容易稳定地提取到边界。因此,对边缘检测算法进行了改进。对于最底部的行,采用由中心向两边检测和直接边缘检测方式将最底部边缘夹逼出来,从而保证最底部的边缘最为稳定。对于剩余行,采用边缘追踪法,将上次获取的边缘点作为本次检测的起始位置。
对于左边界,如果当前位置为白色,说明当前位于赛道中,应该继续往左检测左边缘,如果是黑色则说明是背景,应该往右侧检测;对于右边界,如果当前位置为白色,说明当前位于赛道中,应该往右侧检测,如果是黑色则说明是背景,应该往左侧检测。依此循环,直至整幅图像检索完毕。
2.5 赛道类型判断与处理
2.5.1 弯道特征强化
对于大S弯道,摄像头并不能同时获取到左右边缘,势必存在边界消隐区,而且容易获取到相邻赛道的边缘,从而扰乱车模的正常行驶。因此,须对大S弯道进行特征强化。首先对大S弯道进行识别,其主要特征为单边丢线且中线斜率符号相同,并且根据中线斜率符号的正负可以进一步判断是左弯还是右弯。以右弯为例,从边界消失区开始,将其上部图像的左右边界所在列全部赋值为图像的右边界,即第69列,从而得到一个更大的偏差,使得舵机可以给出更大的打角,完成对大S弯道特征的强化。
2.5.2 十字弯与圆环的缺线拟合
十字弯道与圆环都存在两边同时丢线的情况,因而两种赛道类型的区分也存在很大困难。根据赛道图像特点可以发现,其最大的特征区分点在于拐点的个数以及拐点处的角度。图像大小为81×70,选取中间行(第35行)作为参照,其上部图像作为图像上部,下部图像作为图像下部,则有如表1所示的特征。
表1 十字与圆环特征比较
对于偏差控制,只需要将偏差体现出来即可,因此为节省运算时间与复杂度,缺线拟合使用一元线性回归方程拟合。一元线性回归方程如下:
(3)
3 超车处理
3.1 距离检测与控制
双车在追逐的过程中如果距离控制不当,极易发生碰撞,因此需要对双车距离进行检测与控制。摄像头的焦距是固定的,因而一旦其高度和角度固定之后那么固定距离的物体成像位置也是相对固定的。由此可以通过对前车的成像位置检测来获取实际距离差。
二值化之后的图像前景与背景差异显著,后车整体成像为一黑色连通域,因此可以通过检测黑色连通域的方式来检测前车。文中采用区域生长法[8]检测前车成像的黑色连通域,下面给出具体算法实现步骤。
步骤1:定义数组left和right,大小为图像的行数,用来保存图像左右边界所在列数,定义二维数组visit用来标记访问过的像素点,二维数组cd用来标记连通域。根据优化后的边缘提取方式将左边界所在列数保存在left数组中,右边界所在列数保存在right数组中。
步骤2:从图像顶部第0行开始,按行对像素点顺序扫描。设当前的行标为k,每行扫描范围为从left[k]开始到right[k]结束,判断每一未访问的像素点(xk,yj)是否为黑色像素,其中j∈(left[k],right[k]),(xk,yj)代表第k行,第j个元素的坐标。每个访问过的像素点置访问标记,即visit[k][j]=1。
步骤3:如果当前访问像素点是黑色像素点,则对(xk,yj)进行连通域标记,即cd[k][j]=1,并以该点作为中心,判断其8邻域像素中所有未访问过的像素是否为黑色像素。若有像素满足,则进行标记操作并重复步骤3,直至邻域像素点全部不满足生长规则。
连通域标记完毕之后即可检测成像位置,为便于计算,采用前车尾部所在行数作为距离反馈量。设连通域为D,记D最底部边界所在行坐标为Db。对于文中使用的智能车系统,经测试发现当车速为2.7 m/s左右时,双车间距控制在40 cm左右的范围时效果较好,反映在图像中的位置在第38行。所以文中以第38行为基准,对速度辅以增量式PID控制来保持车距。
3.2 前车停靠
前车停靠首先需要进行停车位置选择。在长直道中,停车位置选择在快要入弯的地方;等分支环形道中,停车位置选择在环道中任意一侧;非等分支圆环中,停车点选择在路径较长的一侧圆环内。停车之后改变前车标志位,将其置为后车标记。
3.2.1 长直道停车
长直道便于加速,若在中间进行停车则整个超车过程会延长很多直道通行时间,而在长直道入弯处车辆都会进行减速处理,而车辆启动时速度较低,因此,超车地点选定为直道入弯处更为合适。
前车停车采用平行移轴策略,以右弯为例,将路径的中线移至图像左侧1/4处(如图1所示)。前车停车后启动速度较低,而后车速度较高,因而前车选择停靠在外侧车道,后车靠内道行驶,双车都较容易过弯。
图1 平行移轴示意
3.2.2 环形道停车
环形道具有双侧通行性,是超车的最佳路段。但是要保证双车走不同侧车道。对于等分支圆环(两侧路径长度相同),规定前车停靠左侧(右侧也可以只要双车不冲突即可);对于非等分支圆环(两侧路径长度不同),前车停靠路径较长的那一侧(便于后车追赶,节省等待时间)。
首先根据2.5.2节给出的特征识别出环形入口,然后开始减速,待环形出口标志出现在视野中,车辆速度置为0。如果初始入环速度过大,可根据实际赛道情况选择给出一定的反向PWM加快减速过程。
3.3 后车超车
下面分别给出长直道和环形中后车超车方案,超车结束之后后车标志位改变,置为前车标记。
3.3.1 直道中的超车
直道中,由于前车停靠位置是在路边,其经过二值化之后成像为黑色像素点,与赛道连成一片。由于文中采用的是优化后边缘追踪法进行边缘检测,所以对后车而言前车的像与赛道边缘连成一片,在后车视野中被当作赛道的一部分(如图2所示),因此不需对该处进行特殊处理,后车可根据中线变化自动完成超车。
图2 前车停靠对后车中线的影响
3.3.2 环形道中的超车
环形道中,前车停靠在圆环一侧,后车进入另一侧,不需对图像进行特殊处理,正常驶出即可。
3.4 优化帧间差分法检测超车
前车停止后,相当于一个静止的摄像头,而不断地连续拍摄图像就相当于在捕获视频,后车在通过的过程就会在一帧帧的画面中显示出来,后车运动的捕获就类似于在视频中进行的运动目标检测[9]。在视频序列中常用的运动目标检测方法主要有背景差分法、光流法和帧间差分法等。背景差分法[10-11]是利用当前图像帧与背景图像帧之间的差分来进行运动目标检测。该方法实现简单,运算速度快,但抗干扰能力较差。光流法[12]是利用序列图像中每一帧图像的像素矢量特征来检测目标区域,判断是否出现有运动目标造成的光流矢量变化。该方法计算太过复杂,不适合在智能车这种实时处理的系统中使用。帧间差分法[13]是对视频序列中连续的两帧或三帧图像作差分运算,利用时间差来提取图像中的运动区域。该方法实现比较简单,但对于运动较慢的目标很难识别。文献[14]给出了一种结合连续帧间差分与背景差分相融合的运动目标检测方法。该方法可较好地检测运动慢的目标,但对于双车系统,需要的只是检测到后车的出现与消失,而不需要整个后车运动的轮廓检测。
针对超车过程中的后车运动检测,在文献[14]的基础上,经过分析与测试,文中提出了一种更加合适的检测方法。该方法首先在前车停车之后记录背景帧,统计并记录背景帧的黑色像素点个数。然后取连续帧,分别统计当前帧与背景帧之间的黑色像素个数差。后车从出现到消失的过程中,黑色像素点个数会出现一个由逐渐增加再到逐渐减少的趋势,并且前车驶出之后获取到的图像帧与背景帧的差值会非常小。图3给出了直道中的超车过程与黑色像素点变化趋势,图4给出了环形道中的图像与实际位置变化。
图3 直道中的超车图像与变化趋势
将连续获取的帧与背景帧进行比较,当发现并没有太大差异(对于文中使用的双车系统,实验测得误差范围在2%左右,这里变化范围控制在10个像素点左右),则认为超车完成,启动速度环,进行新的追逐。
图4 环形道中的超车图像与实际位置对比
4 测试结果与分析
为验证基于机器视觉的超车策略的有效性,在实验室同等光照条件下,对同一智能双车系统采用同等图像处理、寻线方式(优化的边缘追踪法)以及控制策略,分别对添加超声波与无线模块的超车控制方式(采用文献[4]中的策略)与文中提出的运动检测超车方式进行对比测试。测试时车速保持在2.7 m/s左右,双车初始间距为40 cm。测试结果如表2所示。
表2 测试结果
从表2的数据来看,基于机器视觉的运动检测方式与传统的超声波与无线模块结合方式在长直道上超车动作完成度都尚可。但在环形道中,由于超声波角度在环形道中形成盲区,传统的超声波与无线模块结合的方式出现了很大问题,尤其在非均匀大环形赛道中,基于机器视觉的运动检测方式不存在超声波模块本身具有的盲区问题,成功率提升了近14%。
5 结束语
通过对摄像头采集到的图像进行更深层次的挖掘,给出了一种基于运动检测的超车策略。该策略在完成超车动作的前提下减少了超声波与无线模块的使用。针对距离检测,采用区域生长的原理检测前车的成像位置,代替了传统检测方式中超声波模块的功能,且避免了模块本身存在的盲区问题。对于超车过程中停止的前车何时启动,采用了优化的帧间差分法,检测整个后车的超车过程,并识别出超车的结束时刻,代替了无线模块的通信功能。测试结果验证了该方式的有效性,同时在超车方式上,完全采用机器视觉进行间接通信,更加接近于实际生活中的人为超车方式,对于双车追逐系统与人工智能的发展都具有研究价值。