基于摄像头传感器的智能车循迹算法设计方案

2022-07-24 12:09熊中华
电子产品世界 2022年7期
关键词:最小二乘法

熊中华

摘要:本方案通过DMA进行摄像头与单片机之间的信息传输,采用大津法确定二值化阀值,进行图像分割,极大提高图像处理速度。本文主要介绍了中心线拟合、最小二乘法补边界线、特征点提取、十字元素与车库元素识别与处理等算法,使智能车更平稳快速通过多种赛道元素。

关键词:DMA;大津法;最小二乘法;特征点;十字元素;

随着汽车保有量的不断攀升,交通拥堵、交通事故不断频发,越来越多的国家投入到智能网联汽车的研发,智能网联汽车多采用传感器融合方案,视觉传感器作为其中一种重要的传感器,进行图像采集。本文采用摄像头传感器进行图像采集,进行赛道元素特征识别,辅助智能车快速通过多种赛道元素,对于提高城市交通智能化有着重要意义。

1摄像头传感器选取与安装

1.1摄像头传感器选取

摄像头传感器是视觉检测的核心器件,信息量丰富,相较于电磁传感器,扫描距离更远,有利于提前進行路径规划。本方案采用龙邱神眼摄像头MT9V034作为图像传感器,为灰度数字摄像头,只需3.3 V供电,分辨率为120×188,具有高动态成像、超低功耗等多种优点,该摄像头采用8位并行输出,故像素点灰度值范围为0~255。

结合智能小车循迹特点,一般会将分辨率设置为80x60,即可获取赛道图像处理所需数据。高分辨率,图像会更清晰,但数据量增加,传输时间延长,影响图像处理效率,如果再打开串口使用上位机,有机发光半导体(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大津法算法原理

假设灰度直方图中某一灰度值,恰为峰谷,以此为阀值Threshold进行图像分割,将一幅图像中所有像素分成前景和背景两部分,前景即为白色,背景即为黑色,验证类间方差是否最大。为优化算法性能,对传统类间方差计算式作出变式,得到公式1,通过下式计算类间方差值:

σ=PP(E-E)(1)

式中:P为所有黑色像素占所有像素中的比例,P为所有白色像素占所有像素中的比例,E为所有黑色像素的平均灰度,E为所有白色像素的平均灰度,σ为方差值。

在所有灰度值中使类间方差值最大的灰度值即为二值化分割阀值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所示。

继续以第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中:A点为左下拐点、B点为右下拐点、C点为左上拐点、D点为右上拐点、E点为起始行左边界、F点为起始行右边界。

正常直道的边界线斜率为定值,当存在拐点时,如图2标注所示,边界线斜率会在拐点前后发生突变,A 为左下拐点,在A点下方的左边界线为固定斜率的右倾直线,当从下往上扫线找边界求中线时,突然发现A点上方的左边界斜率急劇变缓,自A点开始向左接近水平生长;

B为右下拐点,在B点下方的右边界线为固定斜率的左倾直线,当从下往上扫线找边界求中线时,突然发现B点上方的右边界斜率急剧变缓,自B点开始向右接近水平生长;

同理可知,C为左上拐点,在C点下方的左边界线自右向左接近水平生长,斜率较小,在C点上方的左边界斜率急剧变大;D为右上拐点,在D点下方的右边界线自右向左接近水平生长,斜率较小,在D点上方的右边界线斜率急剧变大。

以找左下拐点A为例,假设选取边界点R,R点纵坐标行数为i,判断其是否为左下拐点,扫线找边界时,比较R点附近连续几行左边界点对应的横坐标,即其对应的列数,分组两两计算连续左边界点横坐标差值,发现第i行与第i-1行对应的横坐标差值为正数T,第i+1行与第i行对应的横坐标差值绝对值为T,并且T-T差值大于某一阈值,连续多组左边界点都符合上述条件,并且R点上方出现较多空白行,即判定为左下拐点A,单独用变量记录左下拐点A值,用于后续补线。

4.4十字路口处理

4.4.1正入十字路口

当左右扫线找到左下拐点A、右下拐点B,且从左下拐点向上隔行扫描2行,发现下拐点上方白点数目大于某一设定值时,即可判定正入十字。

十字路口下拐点上方有多行空白行,发生丢边现象,需要找特征点,使用最小二乘法构造边界线。左右巡线找到左下拐点A、右下拐点B、左上拐点C、右上拐点D,利用斜截式分别构造线段AC、BD,补出拐点空白行的左右边界线,再利用左右边界线求和除以2作为实际中线。正入十字元素补线图如图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.

猜你喜欢
最小二乘法
基于压电陶瓷的纳米定位与扫描平台模型辨识算法研究
基于惯导角度量测的轨道平面最佳线形参数估计算法
全国各省份经济发展影响因素的实证分析
手动求解线性回归方程的方法和技巧