发布时间:2022-07-28
关键词:DMA;大津法;最小二乘法;特征点;十字元素
随着汽车保有量的不断攀升,交通拥堵、交通事故不断频发,越来越多的国家投入到智能网联汽车的研发,智能网联汽车多采用传感器融合方案,视觉传感器作为其中一种重要的传感器,进行图像采集。本文采用摄像头传感器进行图像采集,进行赛道元素特征识别,辅助智能车快速通过多种赛道元素,对于提高城市交通智能化有着重要意义。
1 摄像头传感器选取与安装
1.1 摄像头传感器选取
摄像头传感器是视觉检测的核心器件,信息量丰富,相较于电磁传感器,扫描距离更远,有利于提前进行路径规划。本方案采用龙邱神眼摄像头 MT9V034 作为图像传感器 , 为灰度数字摄像头,只需 3.3 V 供电,分辨率为 120×188,具有高动态成像、超低功耗等多种优 点,该摄像头采用 8 位并行输出,故像素点灰度值范围为 0 ~ 255。
结合智能小车循迹特点,一般会将分辨率设置为 80×60,即可获取赛道图像处理所需数据。高分辨率,图像会更清晰,但数据量增加,传输时间延长,影响图像处理效率,如果再打开串口使用上位机,有机发光半导体(organic electroluminescence display, OLED)屏上图像会延迟,帧率降低,也不便于调试。一般会降低分辨率提高帧率,但也会考虑算法性能,应注重单片机处理速度与图像刷新速度协调。
1.2 摄像头传感器安装
智能小车采用后轮驱动,为避免车模抖动,应让质心靠后,提高小车抓地力,同时还要保证摄像头尽量靠前,采取到更多有效数据,故将摄像头放在车模中部,关于车轴对称。为减轻整车重量,选用空心碳素纤维管作为固定件,并用哥俩好胶水固定摄像头角度,方便调试。
将摄像头正装,OLED 屏幕上图像显示顺序,从上到下依次为 0 ~ 59 行,从左到右依次为 0 ~ 79 列,一般小车前进时,近处图像位于最大行处,远处图像位于 0 行处。
2 图像传输
本方案采用 DMA( 直接存储器访问,Direct Memory Access) 进行数据传输,DMA 可以进行高速数据传输,通过 DMA 控制器,可以将摄像头等外设单元采集的数据直接传输到我们的内存中,只有数据传输开始、结束时才会与 CPU(中央处理器)交流,传输过程中,CPU 可以专心进行图像处理;普通数据传输方式,每一个数据传输都需要依赖 CPU 进行,极大占用 CPU 资源。DMA 传输,极大提高了单片机处理效率,故我们采用 DMA 进行数据传输。
FRM 为场中断,每当 FRM 管脚连接的 IO 口检测到一个沿变化,摄像头和单片机之间开始传输一副图像数据;LINE 为行中断,每当 LINE 管脚连接的 IO 口检测到一个沿变化,摄像头和单片机之间开始传输一行数据;PIX 为像素时钟,每当 PIX 管脚连接的 IO 口检测到一个沿变化,摄像头和单片机之间开始传输一个数据。需要采集一副图像时,会先读取到一个场信号,连续两个场信号之间为一副完整图像,当读取到一个场信号后,会连续读取到 120 个行信号,每两个行信号间,会连续读取到 188 个点信号。获得一个场中断后,开始将图像的每一行数据存入数组,并开始进行行累加计数,当计数达到 120 行后,会获得下一个场中断,一副图像采集完毕,及时将行累加计数器清 0,并置场结束标志位,开始进行数据处理。
3 图像预处理
因选用的摄像头传感器为灰度传感器,无需额外进行图像灰度化,本方案主要采用阀值分割法进行图像分割。阀值的确定是阀值分割法的核心,常见的阀值分为:静态阀值和动态阀值 [2] ,静态阀值容易受到环境光线影响,对不同环境的赛道适应力较差;动态阀值抗干扰性强,对光照变化不敏感。为更好地适应不同赛道环境变化,本方案采用大津法确定动态阀值。大津法(OTSU),利用统计学方法,让计算机在每一张图片上都自适应的根据图片整体亮度确定阈值,单片机在不同环境下都能自适应找到不同的分割阈值,每一张图片的阈值都不一样,受图像亮度和对比度的影响小,但对噪声非常敏感。一般采集的灰度直方图会存在两个峰值,两峰之间存在一个谷底,而大津法的阈值即为峰谷对应的灰度值。
3.1 大津法算法原理
假设灰度直方图中某一灰度值 i 恰为峰谷,以此为 阀值 Threshold 进行图像分割 , 将一幅图像中所有像素分成前景和背景两部分,前景即为白色,背景即为黑色,验证类间方差是否最大。为优化算法性能,对传统类间方差计算式作出变式,得到公式 1,通过下式计算类间方差值:
在所有灰度值中使类间方差值最大的灰度值即为二值化分割阀值 Threshold。
3.2 大津法算法逻辑与优化
3.2.1 算法逻辑
循环 0 ~ 255 个灰度值,记录每一个灰度值对应的类间方差值,将其与已知的最大类间方差值比较,记录两者间最大值,并进行循环计数,当循环计数值达 256 次,即可确定此时最大类间方差值对应的灰度值为二值化阀值 Threshold。
3.2.2 算法优化
如果是固定赛道,可以多次试运行大津法算法,记录对应多种赛道元素的二值化阀值,可以得到一个灰度值范围,比如 70 ~ 140, 缩小灰度值遍历范围,提高算法效率。赛道上光线一般比较均匀,当一幅图像中包含噪声和非均匀光照时,可能会造成大津法阀值不准确,而赛道图像中部分元素灰度差别大,特别是可能会遇到上帝之光的干扰,使部分赛道光照与正常赛道光照差异较大,可以采集赛道时,隔行隔列采集,以此形成的灰度直方图,可以有效减少噪声和非均匀光照;面对上帝之光,也可以尝试部分区域求大津的方法,只对赛道前半部分用大津法求二值化阀值,对图像后半部分舍弃,因为小车往往需要近处图像进行数据处理,及时进行赛道循迹,舍弃远处图像数据,可以使图像二值化数值更接近于赛道近处值,效果更好。也可将赛道划分为远近两个区域,对其分别大津法求阈值,并分别加权求出更理想的二值化阈值。
一般情况下,赛道光照强,二值化动态阈值会更大,对于光斑等干扰,不易找到合适阈值,可以安装滤光片等光学元器件改善。
3.3 二值化
遍历赛道所有像素点灰度值,如果某一像素点灰度值大于二值化阈值,则置为白点 1,如果灰度值小于二值化阈值,则置为黑点 0。
4 图像处理
4.1 中线拟合与偏差
因为摄像头采集到的近处图像实际中线 [4] 与赛道理想中线接近,远处图像可能两者差别比较大,所以我们一般选择从近处到远处开始扫线。从底部第 59 行的理想中线位置第 40 列开始向左向右两方向分别扫线,找到黑白跳变点,记录左右边界点位置。
以向左扫线为例,当向左扫线找到一点 H 的值同其左边一点 J 的值差值为 1 时,再以 H 点向左间隔 3 个点找到点 K,计算点 K 同其左边一点 L 的差值为 0 时,继续以 K 点向左间隔 3 个点找到点 M,计算点 M 同其左边一点 N 的差值为 0 时,即可判断找到第 59 行左边界点,将其计入一个大小为 60 的左线数组,这种方法有效避免了噪声、光斑对边界点提取的影响。同理获得第 59 行右边界坐标,左边界坐标与右边界坐标求和后除以 2,即为当前赛道第 59 行实际中点坐标,并将其存入中线数组。
向左扫线找左边界原理如图 1 所示。
图1 找左边界原理图
继续以第 59 行实际中点坐标为起始点开始进行第 58 行左右扫线,因为部分赛道如果选取理想中点第 40 列作为下一行左右扫线起始点,可能理想中线正好位于黑色区域,左右两边扫线遇到的都是黑点,黑白跳变点位置同扫线起始点间隔较远,连贯性不好,极大地浪费 CPU 性能,不利于小车快速巡线。同理进行 For 循环向上迭代求中线,直到扫线完 60 行,将各行中点连接,即为实际中线。
用右边界数组减左边界数组,可以得到赛道宽度。从起始点第 59 行第 40 列的像素开始,向上扫线,找到白黑跳变点,用图像总行数减去白黑跳变点的值即为赛道长度;在某些特定元素判断中,可以使用赛道宽度、赛道长度作为辅助判断,识别特定元素。
选取一个控制行,控制行与实际中线、理想中线交点分别为 O、P,计算两点差值作为偏差,乘以比例项系数 Kp, 作为 PWM 一部分用于小车转向控制。也可以计算多行偏差,对远处偏差赋予低权重,近处偏差赋予高权重,进行累加作为最终偏差,为进一步提高车速,可以针对不同赛道元素,对多行不同区域分别赋予不同的权重。控制行的选取需要综合考虑车速、摄像头前瞻位置等,一般车速越快,控制行数值选取越小。
4.2 丢线处理
对于部分特殊赛道或者当小车偏离赛道理想中线时,可能无法找到边界线。当出现单边丢线时,根据不同赛道元素,有多种处理方法,以左边丢线为例,可以将图像左边框线规定为黑点 0,当算法向左扫线检测到只有第 0 列有黑点 0 的时候,即判定该点为左边界点;也可以选择找到某一特殊点,比如拐点,利用拐点和其他已知点进行补线,一般采用最小二乘法 [5] 补线处理赛道元素。可以找到左边界丢线前的 5 个左边界点,利用公式 2 和公式 3 计算出拟合直线的 K 和 B,将丢线后的行数依次作为纵坐标带入公式 4 计算出横坐标,补齐左边界。
当出现双边丢线时,一般是处于特殊元素十字路口处,可以选择存储历史数组的方法,用之前的实际中线数据过特殊元素。也可以选择通过左右拐点等同时补线,通过两边界丢线处附件已知的 5 个边界点分别拟合出两条直线,补全左右边界。为降低算法复杂度,也可以直接使用丢线前几行的赛道进行直接补线,因车速、电池电量等情况,可能会不稳定。
4.3 特征点
图2 特征点标注图
图 2 中:A 点为左下拐点、B 点为右下拐点、C 点为左上拐点、D 点为右上拐点、E 点为起始行左边界、 F 点为起始行右边界。
正常直道的边界线斜率为定值,当存在拐点时,如图 2 标注所示,边界线斜率会在拐点前后发生突变,A 为左下拐点,在 A 点下方的左边界线为固定斜率的右倾直线,当从下往上扫线找边界求中线时,突然发现 A 点上方的左边界斜率急剧变缓,自 A 点开始向左接近水平生长。
B 为右下拐点,在 B 点下方的右边界线为固定斜率的左倾直线,当从下往上扫线找边界求中线时,突然发现 B 点上方的右边界斜率急剧变缓,自 B 点开始向右接近水平生长;
同理可知,C 为左上拐点,在 C 点下方的左边界线自右向左接近水平生长,斜率较小,在 C 点上方的左边界斜率急剧变大;D 为右上拐点,在 D 点下方的右边界线自右向左接近水平生长,斜率较小,在 D 点上方的右边界线斜率急剧变大。
4.4 十字路口处理
4.4.1 正入十字路口
当左右扫线找到左下拐点 A、右下拐点 B,且从左下拐点向上隔行扫描 2 行,发现下拐点上方白点数目大于某一设定值时,即可判定正入十字。
十字路口下拐点上方有多行空白行,发生丢边现象,需要找特征点,使用最小二乘法构造边界线。左右巡线找到左下拐点 A、右下拐点 B、左上拐点 C、右上拐点 D, 利用斜截式分别构造线段 AC、BD,补出拐点空白行的左右边界线,再利用左右边界线求和除以 2 作为实际中线。正入十字元素补线图如图 3 所示。
图3 正入十字元素补线图
进入圆环后,可以正常扫线找到左右边界,出环后,用相同方法补线出十字路口。
4.4.2 斜入十字路口
以左斜进入十字路口为例,当左右扫线找到左下拐点 A、右上拐点 D,判定为斜入十字。
十字路口下拐点上方有多行空白行,发生丢边现象,需要找特征点,使用最小二乘法构造边界线。左右扫线找到左下拐点 A、左上拐点 C、右上拐点 D, 利用斜截式构造线段 AC,作为左下拐点上方空白行的左边界;取右上拐点 D 点后方 5 个边界点,利用最小二乘法反向补线,从第 59 行作为纵坐标代入最小二乘法拟合右边界线,循环到 y 取值为 D 点纵坐标,补出丢失的右上拐点下方的右边界,再利用左右边界线求和除以 2 作为实际中线,斜入十字元素补线图如 4 所示。
4.5 车库元素处理
以右入车库为例,车库有比较明显的特点:左边界为直线,右边界丢线,可以找到右下拐点 B,空白行上方存在斑马线。
先找到右下拐点 B,右下拐点 B 上方存在空白行,继续向上扫线,从右向左扫线,找到白黑跳变点,跳变点计数,继续扫线,发现黑白跳变点,计算两者差值,发现在某一范围,对从右向左循线沿途中遇到的所有跳变点计数,发现大于某一阈值,同时满足上述条件,即判定为车库元素。
找到右下拐点 B 后,B 点横坐标减去赛道宽度,即确定到 Z 点坐标,因斑马线总宽度小于赛道宽度,所以可以找到右上拐点 D 点,用最小二乘法构造线段 ZD,通过线段 ZD 加上最近处赛道一半构造出实际中心线,小车沿实际中心线顺利入库。车库元素补线图如 5 所示。
5 结语
本方案主要通过 DMA 传输数据、大津法分割图像,提高单片机处理性能;寻找赛道元素特征点,拟合赛道中线,并对特殊元素进行识别与处理,使智能车更平稳快速通过多种赛道元素,达到了设计要求。
参考文献:
[1] 符晓明.基于ADSP-BF60x网络通信的DMA配置模式及中断方法实现[J].中国计量,2018(03):109-110+112.
[2] 巴德凯.自适应图像分割及并行挖掘方法的研究与实现[D].北京:北方工业大学,2016.
[3] 孙少林,马志强,汤伟.灰度图像二值化算法研究[J].价值工程,2010,29(05):142-143.
[4] 蔡栩嘉,刘海刚,陈冠成,李勇祥,庄越.摄像头智能小车设计与控制算法研究[J].工业控制计算机,2018,31(12):98-101.
[5] 徐翔,王琪,高进可,秦海亭,张钰洁.智能车车道识别与图像处理[J].自动化技术与应用,2020,39(07):91-95.
(注:本文转载自《电子产品世界》2022年7月期)
热点排行